[{"data":1,"prerenderedAt":173027},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-09-02-js-xue-xi":3,"wiki-doc-nav":32},{"id":4,"title":5,"body":6,"description":23,"extension":24,"meta":25,"navigation":27,"path":28,"seo":29,"stem":30,"__hash__":31},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":8,"toc":19},"minimark",[9],[10,11,12,13],"p",{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[14,15,16],"a",{"href":16,"rel":17},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[18],"nofollow",{"title":20,"searchDepth":21,"depth":21,"links":22},"",2,[],"三件套第三套学习","md",{"category":26},"前端",true,"\u002Fwiki\u002F2025-09-02-js",{"title":5,"description":23},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",[33,5150,6258,7678,10667,12018,13507,14596,23359,23372,23970,23996,24120,24361,24426,24444,24457,24504,24628,24797,24996,25176,25381,25517,25612,25649,25662,25972,26713,27421,27442,28462,30093,30244,30257,30269,30570,50382,50397,50414,50447,53319,76667,92812,92824,92937,93058,93828,94491,94852,94890,94996,95096,95139,95165,95226,96880,96981,97006,97497,97997,99077,99360,100102,100604,100616,102632,104296,105799,107497,109414,111333,113355,116825,117257,117720,118469,121413,121761,121783,122139,125446,125458,125861,125884,126031,126198,126403,126704,127261,127918,129849,131447,132096,133590,135021,136256,137950,139702,142112,142228,143163,143374,144259,145494,145722,145735,146890,149302,151670,154991,157468,159112,160889,162902,165954,168134,170661,172855],{"id":34,"title":35,"body":36,"description":20,"extension":24,"meta":5145,"navigation":27,"path":5146,"seo":5147,"stem":5148,"__hash__":5149},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":37,"toc":5117},[38,42,47,50,54,67,71,76,79,82,85,88,91,126,130,133,136,139,142,195,199,218,220,234,237,245,248,1110,1117,1134,1138,1229,1233,1239,1328,1332,1370,1374,1438,1442,1446,1453,1464,1468,1473,1477,1482,1486,1491,1495,1499,1504,1774,1779,1917,1922,2179,2182,2190,2194,2199,2302,2305,2611,2620,2721,2724,2727,2730,2733,2993,2998,3138,3141,3320,3323,3451,3454,3606,3610,3615,3618,3629,3637,3640,3747,3751,3755,3760,3810,3815,3820,3844,3849,3902,3905,3910,4087,4092,4377,4382,4779,4783,4788,4845,4850,4858,4861,5001,5004,5113],[39,40,35],"h1",{"id":41},"_1基础入门",[43,44,46],"h2",{"id":45},"_11注释","1.1注释",[10,48,49],{},"\u002F\u002F或者\u002F* *\u002F",[43,51,53],{"id":52},"_12命名","1.2命名",[55,56,57,61,64],"ol",{},[58,59,60],"li",{},"字母数字下划线",[58,62,63],{},"开头必须是字母或_",[58,65,66],{},"不能使用关键词",[43,68,70],{"id":69},"_13数据类型","1.3数据类型",[72,73,75],"h3",{"id":74},"_131整形","1.3.1整形",[10,77,78],{},"short 短整形 2",[10,80,81],{},"int 整形 4",[10,83,84],{},"long 长整形 win4 linux32位4 linux64位8",[10,86,87],{},"long long 长长整形 8",[10,89,90],{},"利用sizeof可以求数据类型占用的内存空间大小",[92,93,97],"pre",{"className":94,"code":95,"language":96,"meta":20,"style":20},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[98,99,100,119],"code",{"__ignoreMap":20},[101,102,105,109,113,116],"span",{"class":103,"line":104},"line",1,[101,106,108],{"class":107},"szBVR","sizeof",[101,110,112],{"class":111},"sVt8B","(",[101,114,115],{"class":107},"int",[101,117,118],{"class":111},")\n",[101,120,121,123],{"class":103,"line":21},[101,122,108],{"class":107},[101,124,125],{"class":111},"(num)\n",[72,127,129],{"id":128},"_132浮点型","1.3.2浮点型",[10,131,132],{},"float 单精度 4节 7位有效数字",[10,134,135],{},"double 双精度 8节 15-16有效数字",[10,137,138],{},"默认情况下，输出一个小数，会显示6位有效数字",[10,140,141],{},"注意点：",[92,143,145],{"className":94,"code":144,"language":96,"meta":20,"style":20},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[98,146,147,172],{"__ignoreMap":20},[101,148,149,152,155,158,162,165,168],{"class":103,"line":104},[101,150,151],{"class":107},"float",[101,153,154],{"class":111}," f1",[101,156,157],{"class":107},"=",[101,159,161],{"class":160},"sj4cs","3.14",[101,163,164],{"class":107},"f",[101,166,167],{"class":111},";",[101,169,171],{"class":170},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[101,173,174,176,179,181,184,187,190,192],{"class":103,"line":21},[101,175,151],{"class":107},[101,177,178],{"class":111}," f2",[101,180,157],{"class":107},[101,182,183],{"class":160},"3",[101,185,186],{"class":107},"e",[101,188,189],{"class":160},"2",[101,191,167],{"class":111},[101,193,194],{"class":170}," \u002F\u002F科学记数法\n",[72,196,198],{"id":197},"_133字符型","1.3.3字符型",[92,200,202],{"className":94,"code":201,"language":96,"meta":20,"style":20},"char ch='a'\n",[98,203,204],{"__ignoreMap":20},[101,205,206,209,212,214],{"class":103,"line":104},[101,207,208],{"class":107},"char",[101,210,211],{"class":111}," ch",[101,213,157],{"class":107},[101,215,217],{"class":216},"sZZnC","'a'\n",[10,219,141],{},[55,221,222,225,228,231],{},[58,223,224],{},"在显示字符型变量时，只能单引号，双引号x",[58,226,227],{},"单引号内只能一个字符，不能字符串",[58,229,230],{},"c和c++字符型变量只占用一个字符",[58,232,233],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[10,235,236],{},"ASCII码大致由以下两部分组成：",[55,238,239,242],{},[58,240,241],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[58,243,244],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[10,246,247],{},"ASCII码表格：",[249,250,251,295],"table",{},[252,253,254],"thead",{},[255,256,257,265,270,274,279,283,287,291],"tr",{},[258,259,260,264],"th",{},[261,262,263],"strong",{},"ASCII","值",[258,266,267],{},[261,268,269],{},"控制字符",[258,271,272,264],{},[261,273,263],{},[258,275,276],{},[261,277,278],{},"字符",[258,280,281,264],{},[261,282,263],{},[258,284,285],{},[261,286,278],{},[258,288,289,264],{},[261,290,263],{},[258,292,293],{},[261,294,278],{},[296,297,298,325,350,375,400,426,451,476,502,527,553,579,605,630,656,682,708,732,757,782,807,832,857,882,907,932,957,983,1008,1033,1058,1084],"tbody",{},[255,299,300,304,307,310,313,316,319,322],{},[301,302,303],"td",{},"0",[301,305,306],{},"NUT",[301,308,309],{},"32",[301,311,312],{},"(space)",[301,314,315],{},"64",[301,317,318],{},"@",[301,320,321],{},"96",[301,323,324],{},"、",[255,326,327,330,333,336,339,342,345,348],{},[301,328,329],{},"1",[301,331,332],{},"SOH",[301,334,335],{},"33",[301,337,338],{},"!",[301,340,341],{},"65",[301,343,344],{},"A",[301,346,347],{},"97",[301,349,14],{},[255,351,352,354,357,360,363,366,369,372],{},[301,353,189],{},[301,355,356],{},"STX",[301,358,359],{},"34",[301,361,362],{},"\"",[301,364,365],{},"66",[301,367,368],{},"B",[301,370,371],{},"98",[301,373,374],{},"b",[255,376,377,379,382,385,388,391,394,397],{},[301,378,183],{},[301,380,381],{},"ETX",[301,383,384],{},"35",[301,386,387],{},"#",[301,389,390],{},"67",[301,392,393],{},"C",[301,395,396],{},"99",[301,398,399],{},"c",[255,401,402,405,408,411,414,417,420,423],{},[301,403,404],{},"4",[301,406,407],{},"EOT",[301,409,410],{},"36",[301,412,413],{},"$",[301,415,416],{},"68",[301,418,419],{},"D",[301,421,422],{},"100",[301,424,425],{},"d",[255,427,428,431,434,437,440,443,446,449],{},[301,429,430],{},"5",[301,432,433],{},"ENQ",[301,435,436],{},"37",[301,438,439],{},"%",[301,441,442],{},"69",[301,444,445],{},"E",[301,447,448],{},"101",[301,450,186],{},[255,452,453,456,459,462,465,468,471,474],{},[301,454,455],{},"6",[301,457,458],{},"ACK",[301,460,461],{},"38",[301,463,464],{},"&",[301,466,467],{},"70",[301,469,470],{},"F",[301,472,473],{},"102",[301,475,164],{},[255,477,478,481,484,487,490,493,496,499],{},[301,479,480],{},"7",[301,482,483],{},"BEL",[301,485,486],{},"39",[301,488,489],{},",",[301,491,492],{},"71",[301,494,495],{},"G",[301,497,498],{},"103",[301,500,501],{},"g",[255,503,504,507,510,513,515,518,521,524],{},[301,505,506],{},"8",[301,508,509],{},"BS",[301,511,512],{},"40",[301,514,112],{},[301,516,517],{},"72",[301,519,520],{},"H",[301,522,523],{},"104",[301,525,526],{},"h",[255,528,529,532,535,538,541,544,547,550],{},[301,530,531],{},"9",[301,533,534],{},"HT",[301,536,537],{},"41",[301,539,540],{},")",[301,542,543],{},"73",[301,545,546],{},"I",[301,548,549],{},"105",[301,551,552],{},"i",[255,554,555,558,561,564,567,570,573,576],{},[301,556,557],{},"10",[301,559,560],{},"LF",[301,562,563],{},"42",[301,565,566],{},"*",[301,568,569],{},"74",[301,571,572],{},"J",[301,574,575],{},"106",[301,577,578],{},"j",[255,580,581,584,587,590,593,596,599,602],{},[301,582,583],{},"11",[301,585,586],{},"VT",[301,588,589],{},"43",[301,591,592],{},"+",[301,594,595],{},"75",[301,597,598],{},"K",[301,600,601],{},"107",[301,603,604],{},"k",[255,606,607,610,613,616,618,621,624,627],{},[301,608,609],{},"12",[301,611,612],{},"FF",[301,614,615],{},"44",[301,617,489],{},[301,619,620],{},"76",[301,622,623],{},"L",[301,625,626],{},"108",[301,628,629],{},"l",[255,631,632,635,638,641,644,647,650,653],{},[301,633,634],{},"13",[301,636,637],{},"CR",[301,639,640],{},"45",[301,642,643],{},"-",[301,645,646],{},"77",[301,648,649],{},"M",[301,651,652],{},"109",[301,654,655],{},"m",[255,657,658,661,664,667,670,673,676,679],{},[301,659,660],{},"14",[301,662,663],{},"SO",[301,665,666],{},"46",[301,668,669],{},".",[301,671,672],{},"78",[301,674,675],{},"N",[301,677,678],{},"110",[301,680,681],{},"n",[255,683,684,687,690,693,696,699,702,705],{},[301,685,686],{},"15",[301,688,689],{},"SI",[301,691,692],{},"47",[301,694,695],{},"\u002F",[301,697,698],{},"79",[301,700,701],{},"O",[301,703,704],{},"111",[301,706,707],{},"o",[255,709,710,713,716,719,721,724,727,730],{},[301,711,712],{},"16",[301,714,715],{},"DLE",[301,717,718],{},"48",[301,720,303],{},[301,722,723],{},"80",[301,725,726],{},"P",[301,728,729],{},"112",[301,731,10],{},[255,733,734,737,740,743,745,748,751,754],{},[301,735,736],{},"17",[301,738,739],{},"DCI",[301,741,742],{},"49",[301,744,329],{},[301,746,747],{},"81",[301,749,750],{},"Q",[301,752,753],{},"113",[301,755,756],{},"q",[255,758,759,762,765,768,770,773,776,779],{},[301,760,761],{},"18",[301,763,764],{},"DC2",[301,766,767],{},"50",[301,769,189],{},[301,771,772],{},"82",[301,774,775],{},"R",[301,777,778],{},"114",[301,780,781],{},"r",[255,783,784,787,790,793,795,798,801,804],{},[301,785,786],{},"19",[301,788,789],{},"DC3",[301,791,792],{},"51",[301,794,183],{},[301,796,797],{},"83",[301,799,800],{},"S",[301,802,803],{},"115",[301,805,806],{},"s",[255,808,809,812,815,818,820,823,826,829],{},[301,810,811],{},"20",[301,813,814],{},"DC4",[301,816,817],{},"52",[301,819,404],{},[301,821,822],{},"84",[301,824,825],{},"T",[301,827,828],{},"116",[301,830,831],{},"t",[255,833,834,837,840,843,845,848,851,854],{},[301,835,836],{},"21",[301,838,839],{},"NAK",[301,841,842],{},"53",[301,844,430],{},[301,846,847],{},"85",[301,849,850],{},"U",[301,852,853],{},"117",[301,855,856],{},"u",[255,858,859,862,865,868,870,873,876,879],{},[301,860,861],{},"22",[301,863,864],{},"SYN",[301,866,867],{},"54",[301,869,455],{},[301,871,872],{},"86",[301,874,875],{},"V",[301,877,878],{},"118",[301,880,881],{},"v",[255,883,884,887,890,893,895,898,901,904],{},[301,885,886],{},"23",[301,888,889],{},"TB",[301,891,892],{},"55",[301,894,480],{},[301,896,897],{},"87",[301,899,900],{},"W",[301,902,903],{},"119",[301,905,906],{},"w",[255,908,909,912,915,918,920,923,926,929],{},[301,910,911],{},"24",[301,913,914],{},"CAN",[301,916,917],{},"56",[301,919,506],{},[301,921,922],{},"88",[301,924,925],{},"X",[301,927,928],{},"120",[301,930,931],{},"x",[255,933,934,937,940,943,945,948,951,954],{},[301,935,936],{},"25",[301,938,939],{},"EM",[301,941,942],{},"57",[301,944,531],{},[301,946,947],{},"89",[301,949,950],{},"Y",[301,952,953],{},"121",[301,955,956],{},"y",[255,958,959,962,965,968,971,974,977,980],{},[301,960,961],{},"26",[301,963,964],{},"SUB",[301,966,967],{},"58",[301,969,970],{},":",[301,972,973],{},"90",[301,975,976],{},"Z",[301,978,979],{},"122",[301,981,982],{},"z",[255,984,985,988,991,994,996,999,1002,1005],{},[301,986,987],{},"27",[301,989,990],{},"ESC",[301,992,993],{},"59",[301,995,167],{},[301,997,998],{},"91",[301,1000,1001],{},"[",[301,1003,1004],{},"123",[301,1006,1007],{},"{",[255,1009,1010,1013,1016,1019,1022,1025,1027,1030],{},[301,1011,1012],{},"28",[301,1014,1015],{},"FS",[301,1017,1018],{},"60",[301,1020,1021],{},"\u003C",[301,1023,1024],{},"92",[301,1026,695],{},[301,1028,1029],{},"124",[301,1031,1032],{},"|",[255,1034,1035,1038,1041,1044,1046,1049,1052,1055],{},[301,1036,1037],{},"29",[301,1039,1040],{},"GS",[301,1042,1043],{},"61",[301,1045,157],{},[301,1047,1048],{},"93",[301,1050,1051],{},"]",[301,1053,1054],{},"125",[301,1056,1057],{},"}",[255,1059,1060,1063,1066,1069,1072,1075,1078,1081],{},[301,1061,1062],{},"30",[301,1064,1065],{},"RS",[301,1067,1068],{},"62",[301,1070,1071],{},">",[301,1073,1074],{},"94",[301,1076,1077],{},"^",[301,1079,1080],{},"126",[301,1082,1083],{},"`",[255,1085,1086,1089,1092,1095,1098,1101,1104,1107],{},[301,1087,1088],{},"31",[301,1090,1091],{},"US",[301,1093,1094],{},"63",[301,1096,1097],{},"?",[301,1099,1100],{},"95",[301,1102,1103],{},"_",[301,1105,1106],{},"127",[301,1108,1109],{},"DEL",[10,1111,1112,1113,1116],{},"ASCII 码大致由以下",[261,1114,1115],{},"两部分组","成：",[1118,1119,1120,1127],"ul",{},[58,1121,1122,1123,1126],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[261,1124,1125],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[58,1128,1129,1130,1133],{},"ASCII 打印字符：数字 ",[261,1131,1132],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[72,1135,1137],{"id":1136},"_134转义字符","1.3.4转义字符",[92,1139,1141],{"className":94,"code":1140,"language":96,"meta":20,"style":20},"\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",[98,1142,1143,1148,1164,1179,1185,1199,1205],{"__ignoreMap":20},[101,1144,1145],{"class":103,"line":104},[101,1146,1147],{"class":170},"\u002F\u002F换行符\n",[101,1149,1150,1153,1156,1159,1161],{"class":103,"line":21},[101,1151,1152],{"class":111},"cout ",[101,1154,1155],{"class":107},"\u003C\u003C",[101,1157,1158],{"class":216},"\"hello world\u002Fn\"",[101,1160,167],{"class":111},[101,1162,1163],{"class":170}," \u002F\u002F就等同于如下：\n",[101,1165,1167,1169,1171,1174,1176],{"class":103,"line":1166},3,[101,1168,1152],{"class":111},[101,1170,1155],{"class":107},[101,1172,1173],{"class":216},"\"hello world\"",[101,1175,1155],{"class":107},[101,1177,1178],{"class":111},"endl;\n",[101,1180,1182],{"class":103,"line":1181},4,[101,1183,1184],{"class":170},"\u002F\u002F反斜杠\n",[101,1186,1188,1190,1192,1195,1197],{"class":103,"line":1187},5,[101,1189,1152],{"class":111},[101,1191,1155],{"class":107},[101,1193,1194],{"class":216},"\"\u002F\u002F\"",[101,1196,1155],{"class":107},[101,1198,1178],{"class":111},[101,1200,1202],{"class":103,"line":1201},6,[101,1203,1204],{"class":170},"\u002F\u002F水平制表符\n",[101,1206,1208,1210,1212,1215,1218,1221,1223,1226],{"class":103,"line":1207},7,[101,1209,1152],{"class":111},[101,1211,1155],{"class":107},[101,1213,1214],{"class":216},"\"aaaa",[101,1216,1217],{"class":160},"\\t",[101,1219,1220],{"class":216},"helloworld\"",[101,1222,1155],{"class":107},[101,1224,1225],{"class":111},"endl;",[101,1227,1228],{"class":170}," \u002F\u002F输出窗口时有对齐效果\n",[72,1230,1232],{"id":1231},"_135字符串型","1.3.5字符串型",[10,1234,1235,1236,1238],{},"char 变量名",[101,1237],{},"=\"字符串值\"",[92,1240,1242],{"className":94,"code":1241,"language":96,"meta":20,"style":20},"\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",[98,1243,1244,1249,1254,1259,1264,1278,1291,1296,1302,1314],{"__ignoreMap":20},[101,1245,1246],{"class":103,"line":104},[101,1247,1248],{"class":170},"\u002F\u002Fc风格字符串\n",[101,1250,1251],{"class":103,"line":21},[101,1252,1253],{"class":170},"\u002F\u002F注意事项：\n",[101,1255,1256],{"class":103,"line":1166},[101,1257,1258],{"class":170},"\u002F\u002F1.char字符串名[]\n",[101,1260,1261],{"class":103,"line":1181},[101,1262,1263],{"class":170},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[101,1265,1266,1268,1271,1273,1275],{"class":103,"line":1187},[101,1267,208],{"class":107},[101,1269,1270],{"class":111}," str[]",[101,1272,157],{"class":107},[101,1274,1173],{"class":216},[101,1276,1277],{"class":111},";\n",[101,1279,1280,1282,1284,1287,1289],{"class":103,"line":1201},[101,1281,1152],{"class":111},[101,1283,1155],{"class":107},[101,1285,1286],{"class":111},"str",[101,1288,1155],{"class":107},[101,1290,1178],{"class":111},[101,1292,1293],{"class":103,"line":1207},[101,1294,1295],{"class":170},"\u002F\u002Fc++风格字符串\n",[101,1297,1299],{"class":103,"line":1298},8,[101,1300,1301],{"class":170},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[101,1303,1305,1308,1310,1312],{"class":103,"line":1304},9,[101,1306,1307],{"class":111},"string str2",[101,1309,157],{"class":107},[101,1311,1173],{"class":216},[101,1313,1277],{"class":111},[101,1315,1317,1319,1321,1324,1326],{"class":103,"line":1316},10,[101,1318,1152],{"class":111},[101,1320,1155],{"class":107},[101,1322,1323],{"class":111},"str2",[101,1325,1155],{"class":107},[101,1327,1178],{"class":111},[72,1329,1331],{"id":1330},"_136布尔类型bool","1.3.6布尔类型bool",[92,1333,1335],{"className":94,"code":1334,"language":96,"meta":20,"style":20},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[98,1336,1337,1352],{"__ignoreMap":20},[101,1338,1339,1342,1345,1347,1350],{"class":103,"line":104},[101,1340,1341],{"class":107},"bool",[101,1343,1344],{"class":111}," flag",[101,1346,157],{"class":107},[101,1348,1349],{"class":160},"true",[101,1351,1277],{"class":111},[101,1353,1354,1357,1360,1363,1365,1367],{"class":103,"line":21},[101,1355,1356],{"class":111},"cout",[101,1358,1359],{"class":107},"\u003C\u003Csizeof",[101,1361,1362],{"class":111},"(flag)",[101,1364,1155],{"class":107},[101,1366,1225],{"class":111},[101,1368,1369],{"class":170}," \u002F\u002F查看布尔占内存空间\n",[43,1371,1373],{"id":1372},"_14键盘输入cin","1.4键盘输入cin",[92,1375,1377],{"className":94,"code":1376,"language":96,"meta":20,"style":20},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[98,1378,1379,1392,1409,1420],{"__ignoreMap":20},[101,1380,1381,1383,1386,1388,1390],{"class":103,"line":104},[101,1382,115],{"class":107},[101,1384,1385],{"class":111}," a",[101,1387,157],{"class":107},[101,1389,303],{"class":160},[101,1391,1277],{"class":111},[101,1393,1394,1396,1398,1401,1403,1405,1407],{"class":103,"line":21},[101,1395,1356],{"class":111},[101,1397,1155],{"class":107},[101,1399,1400],{"class":216},"\"请给整型变量a赋值\"",[101,1402,1155],{"class":107},[101,1404,14],{"class":111},[101,1406,1155],{"class":107},[101,1408,1178],{"class":111},[101,1410,1411,1414,1417],{"class":103,"line":1166},[101,1412,1413],{"class":111},"cin ",[101,1415,1416],{"class":107},">>",[101,1418,1419],{"class":111}," a;\n",[101,1421,1422,1424,1426,1429,1432,1434,1436],{"class":103,"line":1181},[101,1423,1152],{"class":111},[101,1425,1155],{"class":107},[101,1427,1428],{"class":216}," \"整型变量a=\"",[101,1430,1431],{"class":107}," \u003C\u003C",[101,1433,14],{"class":111},[101,1435,1155],{"class":107},[101,1437,1178],{"class":111},[43,1439,1441],{"id":1440},"_15运算符","1.5运算符",[72,1443,1445],{"id":1444},"_151算术运算符","1.5.1算术运算符",[10,1447,1448,1452],{},[1449,1450],"img",{"alt":20,"src":1451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[55,1454,1455,1458,1461],{},[58,1456,1457],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[58,1459,1460],{},"两个小数不可以做取模运算",[58,1462,1463],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[72,1465,1467],{"id":1466},"_152赋值运算符","1.5.2赋值运算符",[10,1469,1470],{},[1449,1471],{"alt":20,"src":1472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[72,1474,1476],{"id":1475},"_153比较运算符","1.5.3比较运算符",[10,1478,1479],{},[1449,1480],{"alt":20,"src":1481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[72,1483,1485],{"id":1484},"_154逻辑运算符","1.5.4逻辑运算符",[10,1487,1488],{},[1449,1489],{"alt":20,"src":1490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[43,1492,1494],{"id":1493},"_16程序流程结构","1.6程序流程结构",[72,1496,1498],{"id":1497},"_161选择结构","1.6.1选择结构",[55,1500,1501],{},[58,1502,1503],{},"if语句\n单行、多行、多条件if语句",[92,1505,1507],{"className":94,"code":1506,"language":96,"meta":20,"style":20},"\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",[98,1508,1509,1514,1529,1534,1548,1553,1558,1567,1580,1584,1597,1602,1608,1613,1627,1632,1638,1659,1664,1678,1683,1712,1717,1734,1739,1744,1749,1763,1768],{"__ignoreMap":20},[101,1510,1511],{"class":103,"line":104},[101,1512,1513],{"class":170},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[101,1515,1516,1519,1522,1524,1527],{"class":103,"line":21},[101,1517,1518],{"class":107},"if",[101,1520,1521],{"class":111},"(score",[101,1523,1071],{"class":107},[101,1525,1526],{"class":160},"600",[101,1528,118],{"class":111},[101,1530,1531],{"class":103,"line":1166},[101,1532,1533],{"class":111},"{\n",[101,1535,1536,1539,1541,1544,1546],{"class":103,"line":1181},[101,1537,1538],{"class":111},"    cout",[101,1540,1155],{"class":107},[101,1542,1543],{"class":216},"'这是单行if语句'",[101,1545,1155],{"class":107},[101,1547,1178],{"class":111},[101,1549,1550],{"class":103,"line":1187},[101,1551,1552],{"class":111},"}\n",[101,1554,1555],{"class":103,"line":1201},[101,1556,1557],{"class":170},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[101,1559,1560,1562,1564],{"class":103,"line":1207},[101,1561,1413],{"class":111},[101,1563,1416],{"class":107},[101,1565,1566],{"class":111}," score\n",[101,1568,1569,1571,1573,1576,1578],{"class":103,"line":1298},[101,1570,1518],{"class":107},[101,1572,1521],{"class":111},[101,1574,1575],{"class":107},"\u003C=",[101,1577,1526],{"class":160},[101,1579,118],{"class":111},[101,1581,1582],{"class":103,"line":1304},[101,1583,1533],{"class":111},[101,1585,1586,1588,1590,1593,1595],{"class":103,"line":1316},[101,1587,1538],{"class":111},[101,1589,1416],{"class":107},[101,1591,1592],{"class":216},"\"小于等于600\"",[101,1594,1155],{"class":107},[101,1596,1178],{"class":111},[101,1598,1600],{"class":103,"line":1599},11,[101,1601,1552],{"class":111},[101,1603,1605],{"class":103,"line":1604},12,[101,1606,1607],{"class":107},"else\n",[101,1609,1611],{"class":103,"line":1610},13,[101,1612,1533],{"class":111},[101,1614,1616,1618,1620,1623,1625],{"class":103,"line":1615},14,[101,1617,1538],{"class":111},[101,1619,1416],{"class":107},[101,1621,1622],{"class":216},"\"大于600\"",[101,1624,1416],{"class":107},[101,1626,1178],{"class":111},[101,1628,1630],{"class":103,"line":1629},15,[101,1631,1552],{"class":111},[101,1633,1635],{"class":103,"line":1634},16,[101,1636,1637],{"class":170},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[101,1639,1641,1643,1646,1648,1650,1653,1655,1657],{"class":103,"line":1640},17,[101,1642,1518],{"class":107},[101,1644,1645],{"class":111}," (",[101,1647,303],{"class":160},[101,1649,1021],{"class":107},[101,1651,1652],{"class":111},"num",[101,1654,1021],{"class":107},[101,1656,422],{"class":160},[101,1658,118],{"class":111},[101,1660,1662],{"class":103,"line":1661},18,[101,1663,1533],{"class":111},[101,1665,1667,1669,1671,1674,1676],{"class":103,"line":1666},19,[101,1668,1538],{"class":111},[101,1670,1155],{"class":107},[101,1672,1673],{"class":216},"\"小于100\"",[101,1675,1155],{"class":107},[101,1677,1178],{"class":111},[101,1679,1681],{"class":103,"line":1680},20,[101,1682,1552],{"class":111},[101,1684,1686,1689,1692,1695,1698,1700,1703,1705,1707,1710],{"class":103,"line":1685},21,[101,1687,1688],{"class":107},"else",[101,1690,1691],{"class":107}," if",[101,1693,1694],{"class":111}," (nmu",[101,1696,1697],{"class":107},">=",[101,1699,422],{"class":160},[101,1701,1702],{"class":107},"&&",[101,1704,1652],{"class":111},[101,1706,1021],{"class":107},[101,1708,1709],{"class":160},"200",[101,1711,118],{"class":111},[101,1713,1715],{"class":103,"line":1714},22,[101,1716,1533],{"class":111},[101,1718,1720,1722,1724,1727,1729,1731],{"class":103,"line":1719},23,[101,1721,1538],{"class":111},[101,1723,1155],{"class":107},[101,1725,1726],{"class":216},"\"不小于100且小于200\"",[101,1728,1155],{"class":107},[101,1730,1225],{"class":111},[101,1732,1733],{"class":170}," \u002F\u002F可以无限else if,python中是elif：\n",[101,1735,1737],{"class":103,"line":1736},24,[101,1738,1552],{"class":111},[101,1740,1742],{"class":103,"line":1741},25,[101,1743,1607],{"class":107},[101,1745,1747],{"class":103,"line":1746},26,[101,1748,1533],{"class":111},[101,1750,1752,1754,1756,1759,1761],{"class":103,"line":1751},27,[101,1753,1538],{"class":111},[101,1755,1155],{"class":107},[101,1757,1758],{"class":216},"\"不小于200\"",[101,1760,1155],{"class":107},[101,1762,1178],{"class":111},[101,1764,1766],{"class":103,"line":1765},28,[101,1767,1552],{"class":111},[101,1769,1771],{"class":103,"line":1770},29,[101,1772,1773],{"class":170},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[55,1775,1776],{"start":21},[58,1777,1778],{},"三目运算符",[92,1780,1782],{"className":94,"code":1781,"language":96,"meta":20,"style":20},"\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",[98,1783,1784,1789,1794,1820,1842,1859,1864,1887,1902],{"__ignoreMap":20},[101,1785,1786],{"class":103,"line":104},[101,1787,1788],{"class":170},"\u002F\u002F创建三个变量a,b,c\n",[101,1790,1791],{"class":103,"line":21},[101,1792,1793],{"class":170},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[101,1795,1796,1798,1800,1802,1804,1807,1809,1811,1814,1816,1818],{"class":103,"line":1166},[101,1797,115],{"class":107},[101,1799,1385],{"class":111},[101,1801,157],{"class":107},[101,1803,811],{"class":160},[101,1805,1806],{"class":111},",b",[101,1808,157],{"class":107},[101,1810,557],{"class":160},[101,1812,1813],{"class":111},",c",[101,1815,157],{"class":107},[101,1817,303],{"class":160},[101,1819,1277],{"class":111},[101,1821,1822,1824,1826,1829,1831,1833,1835,1837,1839],{"class":103,"line":1181},[101,1823,399],{"class":111},[101,1825,157],{"class":107},[101,1827,1828],{"class":111},"(a",[101,1830,1071],{"class":107},[101,1832,374],{"class":111},[101,1834,1097],{"class":107},[101,1836,14],{"class":111},[101,1838,970],{"class":107},[101,1840,1841],{"class":111},"b)\n",[101,1843,1844,1846,1848,1851,1853,1855,1857],{"class":103,"line":1187},[101,1845,1356],{"class":111},[101,1847,1155],{"class":107},[101,1849,1850],{"class":216},"\"c=\"",[101,1852,1155],{"class":107},[101,1854,399],{"class":111},[101,1856,1155],{"class":107},[101,1858,1178],{"class":111},[101,1860,1861],{"class":103,"line":1201},[101,1862,1863],{"class":170},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[101,1865,1866,1868,1870,1872,1874,1876,1878,1881,1883,1885],{"class":103,"line":1207},[101,1867,1828],{"class":111},[101,1869,1071],{"class":107},[101,1871,374],{"class":111},[101,1873,1097],{"class":107},[101,1875,14],{"class":111},[101,1877,970],{"class":107},[101,1879,1880],{"class":111},"b)",[101,1882,157],{"class":107},[101,1884,422],{"class":160},[101,1886,1277],{"class":111},[101,1888,1889,1891,1893,1895,1897,1899],{"class":103,"line":1298},[101,1890,1356],{"class":111},[101,1892,1155],{"class":107},[101,1894,14],{"class":111},[101,1896,1155],{"class":107},[101,1898,1225],{"class":111},[101,1900,1901],{"class":170}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[101,1903,1904,1906,1908,1910,1912,1914],{"class":103,"line":1304},[101,1905,1356],{"class":111},[101,1907,1155],{"class":107},[101,1909,374],{"class":111},[101,1911,1155],{"class":107},[101,1913,1225],{"class":111},[101,1915,1916],{"class":170}," \u002F\u002F10   a>b,b还是原值\n",[55,1918,1919],{"start":1166},[58,1920,1921],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[92,1923,1925],{"className":94,"code":1924,"language":96,"meta":20,"style":20},"\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",[98,1926,1927,1932,1940,1954,1964,1968,1982,1995,2005,2013,2018,2043,2064,2086,2107,2129,2150,2170,2175],{"__ignoreMap":20},[101,1928,1929],{"class":103,"line":104},[101,1930,1931],{"class":170},"\u002F\u002F案例-电影打分\n",[101,1933,1934,1937],{"class":103,"line":21},[101,1935,1936],{"class":107},"#include",[101,1938,1939],{"class":216},"\u003Ciostream>\n",[101,1941,1942,1945,1948,1952],{"class":103,"line":1166},[101,1943,1944],{"class":107},"using",[101,1946,1947],{"class":107}," namespace",[101,1949,1951],{"class":1950},"sScJk"," std",[101,1953,1277],{"class":111},[101,1955,1956,1958,1961],{"class":103,"line":1181},[101,1957,115],{"class":107},[101,1959,1960],{"class":1950}," main",[101,1962,1963],{"class":111},"()\n",[101,1965,1966],{"class":103,"line":1187},[101,1967,1533],{"class":111},[101,1969,1970,1973,1976,1978,1980],{"class":103,"line":1201},[101,1971,1972],{"class":107},"    int",[101,1974,1975],{"class":111}," score",[101,1977,157],{"class":107},[101,1979,303],{"class":160},[101,1981,1277],{"class":111},[101,1983,1984,1986,1988,1991,1993],{"class":103,"line":1207},[101,1985,1538],{"class":111},[101,1987,1155],{"class":107},[101,1989,1990],{"class":216},"\"电影打分：\"",[101,1992,1155],{"class":107},[101,1994,1178],{"class":111},[101,1996,1997,2000,2002],{"class":103,"line":1298},[101,1998,1999],{"class":111},"    cin",[101,2001,1416],{"class":107},[101,2003,2004],{"class":111},"score;\n",[101,2006,2007,2010],{"class":103,"line":1304},[101,2008,2009],{"class":107},"    switch",[101,2011,2012],{"class":111},"(score)\n",[101,2014,2015],{"class":103,"line":1316},[101,2016,2017],{"class":111},"    {\n",[101,2019,2020,2023,2026,2029,2031,2034,2036,2038,2041],{"class":103,"line":1599},[101,2021,2022],{"class":107},"        case",[101,2024,2025],{"class":160}," 10",[101,2027,2028],{"class":111},":cout",[101,2030,1155],{"class":107},[101,2032,2033],{"class":216},"\"经典\"",[101,2035,1155],{"class":107},[101,2037,1225],{"class":111},[101,2039,2040],{"class":107},"break",[101,2042,1277],{"class":111},[101,2044,2045,2047,2050,2052,2054,2056,2058,2060,2062],{"class":103,"line":1604},[101,2046,2022],{"class":107},[101,2048,2049],{"class":160}," 9",[101,2051,2028],{"class":111},[101,2053,1155],{"class":107},[101,2055,2033],{"class":216},[101,2057,1155],{"class":107},[101,2059,1225],{"class":111},[101,2061,2040],{"class":107},[101,2063,1277],{"class":111},[101,2065,2066,2068,2071,2073,2075,2078,2080,2082,2084],{"class":103,"line":1610},[101,2067,2022],{"class":107},[101,2069,2070],{"class":160}," 8",[101,2072,2028],{"class":111},[101,2074,1155],{"class":107},[101,2076,2077],{"class":216},"\"非常好\"",[101,2079,1155],{"class":107},[101,2081,1225],{"class":111},[101,2083,2040],{"class":107},[101,2085,1277],{"class":111},[101,2087,2088,2090,2093,2095,2097,2099,2101,2103,2105],{"class":103,"line":1615},[101,2089,2022],{"class":107},[101,2091,2092],{"class":160}," 7",[101,2094,2028],{"class":111},[101,2096,1155],{"class":107},[101,2098,2077],{"class":216},[101,2100,1155],{"class":107},[101,2102,1225],{"class":111},[101,2104,2040],{"class":107},[101,2106,1277],{"class":111},[101,2108,2109,2111,2114,2116,2118,2121,2123,2125,2127],{"class":103,"line":1629},[101,2110,2022],{"class":107},[101,2112,2113],{"class":160}," 6",[101,2115,2028],{"class":111},[101,2117,1155],{"class":107},[101,2119,2120],{"class":216},"\"一般\"",[101,2122,1155],{"class":107},[101,2124,1225],{"class":111},[101,2126,2040],{"class":107},[101,2128,1277],{"class":111},[101,2130,2131,2133,2136,2138,2140,2142,2144,2146,2148],{"class":103,"line":1634},[101,2132,2022],{"class":107},[101,2134,2135],{"class":160}," 5",[101,2137,2028],{"class":111},[101,2139,1155],{"class":107},[101,2141,2120],{"class":216},[101,2143,1155],{"class":107},[101,2145,1225],{"class":111},[101,2147,2040],{"class":107},[101,2149,1277],{"class":111},[101,2151,2152,2155,2157,2159,2162,2164,2166,2168],{"class":103,"line":1640},[101,2153,2154],{"class":107},"        default",[101,2156,2028],{"class":111},[101,2158,1155],{"class":107},[101,2160,2161],{"class":216},"\"烂片\"",[101,2163,1155],{"class":107},[101,2165,1225],{"class":111},[101,2167,2040],{"class":107},[101,2169,1277],{"class":111},[101,2171,2172],{"class":103,"line":1661},[101,2173,2174],{"class":111},"    }\n",[101,2176,2177],{"class":103,"line":1666},[101,2178,1552],{"class":111},[10,2180,2181],{},"if和switch区别：",[1118,2183,2184,2187],{},[58,2185,2186],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[58,2188,2189],{},"switch优点：结构清晰，执行效率高",[72,2191,2193],{"id":2192},"_162循环结构","1.6.2循环结构",[55,2195,2196],{},[58,2197,2198],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[92,2200,2202],{"className":94,"code":2201,"language":96,"meta":20,"style":20},"\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",[98,2203,2204,2209,2217,2221,2234,2248,2252,2272,2282,2286,2298],{"__ignoreMap":20},[101,2205,2206],{"class":103,"line":104},[101,2207,2208],{"class":170},"\u002F\u002F打印0-9数字\n",[101,2210,2211,2213,2215],{"class":103,"line":21},[101,2212,115],{"class":107},[101,2214,1960],{"class":1950},[101,2216,1963],{"class":111},[101,2218,2219],{"class":103,"line":1166},[101,2220,1533],{"class":111},[101,2222,2223,2225,2228,2230,2232],{"class":103,"line":1181},[101,2224,1972],{"class":107},[101,2226,2227],{"class":111}," num",[101,2229,157],{"class":107},[101,2231,303],{"class":160},[101,2233,1277],{"class":111},[101,2235,2236,2239,2242,2244,2246],{"class":103,"line":1187},[101,2237,2238],{"class":107},"    while",[101,2240,2241],{"class":111},"(num",[101,2243,1021],{"class":107},[101,2245,557],{"class":160},[101,2247,118],{"class":111},[101,2249,2250],{"class":103,"line":1201},[101,2251,2017],{"class":111},[101,2253,2254,2257,2260,2262,2264,2266,2269],{"class":103,"line":1207},[101,2255,2256],{"class":1950},"       std",[101,2258,2259],{"class":111},"::cout",[101,2261,1155],{"class":107},[101,2263,1652],{"class":111},[101,2265,1155],{"class":107},[101,2267,2268],{"class":1950},"std",[101,2270,2271],{"class":111},"::endl;\n",[101,2273,2274,2277,2280],{"class":103,"line":1298},[101,2275,2276],{"class":111},"        num",[101,2278,2279],{"class":107},"++",[101,2281,1277],{"class":111},[101,2283,2284],{"class":103,"line":1304},[101,2285,2174],{"class":111},[101,2287,2288,2291,2293,2296],{"class":103,"line":1316},[101,2289,2290],{"class":1950},"    system",[101,2292,112],{"class":111},[101,2294,2295],{"class":216},"\"pause\"",[101,2297,118],{"class":111},[101,2299,2300],{"class":103,"line":1599},[101,2301,1552],{"class":111},[10,2303,2304],{},"注意：写好循环条件，避免死循环情况",[92,2306,2308],{"className":94,"code":2307,"language":96,"meta":20,"style":20},"\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",[98,2309,2310,2315,2322,2329,2339,2347,2351,2356,2383,2388,2393,2401,2428,2433,2438,2451,2461,2465,2475,2480,2493,2498,2512,2517,2532,2536,2549,2553,2558,2562,2576,2584,2589,2595,2601,2606],{"__ignoreMap":20},[101,2311,2312],{"class":103,"line":104},[101,2313,2314],{"class":170},"\u002F\u002F循环结构-猜数字\n",[101,2316,2317,2319],{"class":103,"line":21},[101,2318,1936],{"class":107},[101,2320,2321],{"class":216}," \u003Ciostream>\n",[101,2323,2324,2326],{"class":103,"line":1166},[101,2325,1936],{"class":107},[101,2327,2328],{"class":216}," \u003Cctime>\n",[101,2330,2331,2333,2335,2337],{"class":103,"line":1181},[101,2332,1944],{"class":107},[101,2334,1947],{"class":107},[101,2336,1951],{"class":1950},[101,2338,1277],{"class":111},[101,2340,2341,2343,2345],{"class":103,"line":1187},[101,2342,115],{"class":107},[101,2344,1960],{"class":1950},[101,2346,1963],{"class":111},[101,2348,2349],{"class":103,"line":1201},[101,2350,1533],{"class":111},[101,2352,2353],{"class":103,"line":1207},[101,2354,2355],{"class":170},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[101,2357,2358,2361,2364,2367,2370,2372,2375,2377,2380],{"class":103,"line":1298},[101,2359,2360],{"class":1950},"    srand",[101,2362,2363],{"class":111},"((",[101,2365,2366],{"class":107},"unsigned",[101,2368,2369],{"class":107}," int",[101,2371,540],{"class":111},[101,2373,2374],{"class":1950},"time",[101,2376,112],{"class":111},[101,2378,2379],{"class":160},"NULL",[101,2381,2382],{"class":111},"));\n",[101,2384,2385],{"class":103,"line":1304},[101,2386,2387],{"emptyLinePlaceholder":27},"\n",[101,2389,2390],{"class":103,"line":1316},[101,2391,2392],{"class":170},"    \u002F\u002F1.系统生成随机数\n",[101,2394,2395,2398],{"class":103,"line":1599},[101,2396,2397],{"class":170},"    \u002F\u002Frand()%100",[101,2399,2400],{"class":170}," \u002F\u002F生成0-99的随机数\n",[101,2402,2403,2405,2407,2409,2412,2415,2417,2419,2421,2423,2425],{"class":103,"line":1604},[101,2404,1972],{"class":107},[101,2406,2227],{"class":111},[101,2408,157],{"class":107},[101,2410,2411],{"class":1950},"rand",[101,2413,2414],{"class":111},"()",[101,2416,439],{"class":107},[101,2418,422],{"class":160},[101,2420,592],{"class":107},[101,2422,329],{"class":160},[101,2424,167],{"class":111},[101,2426,2427],{"class":170}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[101,2429,2430],{"class":103,"line":1610},[101,2431,2432],{"class":170},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[101,2434,2435],{"class":103,"line":1615},[101,2436,2437],{"class":170},"    \u002F\u002F2.玩家猜测\n",[101,2439,2440,2442,2445,2447,2449],{"class":103,"line":1629},[101,2441,1972],{"class":107},[101,2443,2444],{"class":111}," val",[101,2446,157],{"class":107},[101,2448,303],{"class":160},[101,2450,1277],{"class":111},[101,2452,2453,2455,2457,2459],{"class":103,"line":1634},[101,2454,2238],{"class":107},[101,2456,1645],{"class":111},[101,2458,329],{"class":160},[101,2460,118],{"class":111},[101,2462,2463],{"class":103,"line":1640},[101,2464,2017],{"class":111},[101,2466,2467,2470,2472],{"class":103,"line":1661},[101,2468,2469],{"class":111},"        cin",[101,2471,1416],{"class":107},[101,2473,2474],{"class":111},"val;\n",[101,2476,2477],{"class":103,"line":1666},[101,2478,2479],{"class":170},"        \u002F\u002F3.判断玩家猜测\n",[101,2481,2482,2485,2488,2490],{"class":103,"line":1680},[101,2483,2484],{"class":107},"        if",[101,2486,2487],{"class":111},"(val",[101,2489,1021],{"class":107},[101,2491,2492],{"class":111},"num) \n",[101,2494,2495],{"class":103,"line":1685},[101,2496,2497],{"class":111},"        {\n",[101,2499,2500,2503,2505,2508,2510],{"class":103,"line":1714},[101,2501,2502],{"class":111},"            cout",[101,2504,1155],{"class":107},[101,2506,2507],{"class":216},"\"猜小了！\"",[101,2509,1155],{"class":107},[101,2511,1178],{"class":111},[101,2513,2514],{"class":103,"line":1719},[101,2515,2516],{"class":111},"        }\n",[101,2518,2519,2522,2524,2527,2529],{"class":103,"line":1736},[101,2520,2521],{"class":107},"        else",[101,2523,1691],{"class":107},[101,2525,2526],{"class":111}," (val",[101,2528,1071],{"class":107},[101,2530,2531],{"class":111},"num)\n",[101,2533,2534],{"class":103,"line":1741},[101,2535,2497],{"class":111},[101,2537,2538,2540,2542,2545,2547],{"class":103,"line":1746},[101,2539,2502],{"class":111},[101,2541,1155],{"class":107},[101,2543,2544],{"class":216},"\"猜大了！\"",[101,2546,1155],{"class":107},[101,2548,1178],{"class":111},[101,2550,2551],{"class":103,"line":1751},[101,2552,2516],{"class":111},[101,2554,2555],{"class":103,"line":1765},[101,2556,2557],{"class":107},"        else\n",[101,2559,2560],{"class":103,"line":1770},[101,2561,2497],{"class":111},[101,2563,2565,2567,2569,2572,2574],{"class":103,"line":2564},30,[101,2566,2502],{"class":111},[101,2568,1155],{"class":107},[101,2570,2571],{"class":216},"\"猜对了！\"",[101,2573,1155],{"class":107},[101,2575,1178],{"class":111},[101,2577,2579,2582],{"class":103,"line":2578},31,[101,2580,2581],{"class":107},"            break",[101,2583,1277],{"class":111},[101,2585,2587],{"class":103,"line":2586},32,[101,2588,2516],{"class":111},[101,2590,2592],{"class":103,"line":2591},33,[101,2593,2594],{"class":170},"        \u002F\u002F猜对 退出游戏\n",[101,2596,2598],{"class":103,"line":2597},34,[101,2599,2600],{"class":170},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[101,2602,2604],{"class":103,"line":2603},35,[101,2605,2174],{"class":111},[101,2607,2609],{"class":103,"line":2608},36,[101,2610,1552],{"class":111},[55,2612,2613],{"start":21},[58,2614,2615,2616,2619],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[261,2617,2618],{},"do...while会先执行一次循环语句","，在判断循环语句",[92,2621,2623],{"className":94,"code":2622,"language":96,"meta":20,"style":20},"\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",[98,2624,2625,2630,2638,2642,2654,2662,2666,2683,2690,2694,2707,2717],{"__ignoreMap":20},[101,2626,2627],{"class":103,"line":104},[101,2628,2629],{"class":170},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[101,2631,2632,2634,2636],{"class":103,"line":21},[101,2633,115],{"class":107},[101,2635,1960],{"class":1950},[101,2637,1963],{"class":111},[101,2639,2640],{"class":103,"line":1166},[101,2641,1533],{"class":111},[101,2643,2644,2646,2648,2650,2652],{"class":103,"line":1181},[101,2645,1972],{"class":107},[101,2647,2227],{"class":111},[101,2649,157],{"class":107},[101,2651,303],{"class":160},[101,2653,1277],{"class":111},[101,2655,2656,2659],{"class":103,"line":1187},[101,2657,2658],{"class":107},"    do",[101,2660,2661],{"class":111}," \n",[101,2663,2664],{"class":103,"line":1201},[101,2665,2017],{"class":111},[101,2667,2668,2671,2673,2675,2677,2679,2681],{"class":103,"line":1207},[101,2669,2670],{"class":1950},"        std",[101,2672,2259],{"class":111},[101,2674,1155],{"class":107},[101,2676,1652],{"class":111},[101,2678,1155],{"class":107},[101,2680,2268],{"class":1950},[101,2682,2271],{"class":111},[101,2684,2685,2687],{"class":103,"line":1298},[101,2686,2276],{"class":111},[101,2688,2689],{"class":107},"++\n",[101,2691,2692],{"class":103,"line":1304},[101,2693,2174],{"class":111},[101,2695,2696,2698,2700,2702,2704],{"class":103,"line":1316},[101,2697,2238],{"class":107},[101,2699,2241],{"class":111},[101,2701,1021],{"class":107},[101,2703,557],{"class":160},[101,2705,2706],{"class":111},");\n",[101,2708,2709,2711,2713,2715],{"class":103,"line":1599},[101,2710,2290],{"class":1950},[101,2712,112],{"class":111},[101,2714,2295],{"class":216},[101,2716,2706],{"class":111},[101,2718,2719],{"class":103,"line":1604},[101,2720,1552],{"class":111},[10,2722,2723],{},"案例-水仙花数",[10,2725,2726],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[10,2728,2729],{},"例如：1^3+5^3+3^3=153",[10,2731,2732],{},"请用do...while语句，求出所有3位数的水仙花数",[92,2734,2736],{"className":94,"code":2735,"language":96,"meta":20,"style":20},"#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",[98,2737,2738,2744,2754,2762,2766,2771,2783,2789,2793,2798,2814,2830,2846,2861,2880,2895,2943,2947,2959,2963,2971,2975,2989],{"__ignoreMap":20},[101,2739,2740,2742],{"class":103,"line":104},[101,2741,1936],{"class":107},[101,2743,2321],{"class":216},[101,2745,2746,2748,2750,2752],{"class":103,"line":21},[101,2747,1944],{"class":107},[101,2749,1947],{"class":107},[101,2751,1951],{"class":1950},[101,2753,1277],{"class":111},[101,2755,2756,2758,2760],{"class":103,"line":1166},[101,2757,115],{"class":107},[101,2759,1960],{"class":1950},[101,2761,1963],{"class":111},[101,2763,2764],{"class":103,"line":1181},[101,2765,1533],{"class":111},[101,2767,2768],{"class":103,"line":1187},[101,2769,2770],{"class":170},"    \u002F\u002F1.先打印所有三位数字\n",[101,2772,2773,2775,2777,2779,2781],{"class":103,"line":1201},[101,2774,1972],{"class":107},[101,2776,2227],{"class":111},[101,2778,157],{"class":107},[101,2780,422],{"class":160},[101,2782,1277],{"class":111},[101,2784,2785,2787],{"class":103,"line":1207},[101,2786,2658],{"class":107},[101,2788,2661],{"class":111},[101,2790,2791],{"class":103,"line":1298},[101,2792,2017],{"class":111},[101,2794,2795],{"class":103,"line":1304},[101,2796,2797],{"class":170},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[101,2799,2800,2803,2805,2807,2809,2811],{"class":103,"line":1316},[101,2801,2802],{"class":107},"        int",[101,2804,1385],{"class":111},[101,2806,157],{"class":107},[101,2808,303],{"class":160},[101,2810,167],{"class":111},[101,2812,2813],{"class":170}," \u002F\u002F个位\n",[101,2815,2816,2818,2821,2823,2825,2827],{"class":103,"line":1599},[101,2817,2802],{"class":107},[101,2819,2820],{"class":111}," b",[101,2822,157],{"class":107},[101,2824,303],{"class":160},[101,2826,167],{"class":111},[101,2828,2829],{"class":170}," \u002F\u002F十位\n",[101,2831,2832,2834,2837,2839,2841,2843],{"class":103,"line":1604},[101,2833,2802],{"class":107},[101,2835,2836],{"class":111}," c",[101,2838,157],{"class":107},[101,2840,303],{"class":160},[101,2842,167],{"class":111},[101,2844,2845],{"class":170}," \u002F\u002F百位\n",[101,2847,2848,2851,2853,2855,2857,2859],{"class":103,"line":1610},[101,2849,2850],{"class":111},"        a",[101,2852,157],{"class":107},[101,2854,1652],{"class":111},[101,2856,439],{"class":107},[101,2858,557],{"class":160},[101,2860,1277],{"class":111},[101,2862,2863,2866,2868,2870,2872,2874,2876,2878],{"class":103,"line":1615},[101,2864,2865],{"class":111},"        b",[101,2867,157],{"class":107},[101,2869,1652],{"class":111},[101,2871,695],{"class":107},[101,2873,557],{"class":160},[101,2875,439],{"class":107},[101,2877,557],{"class":160},[101,2879,1277],{"class":111},[101,2881,2882,2885,2887,2889,2891,2893],{"class":103,"line":1629},[101,2883,2884],{"class":111},"        c",[101,2886,157],{"class":107},[101,2888,1652],{"class":111},[101,2890,695],{"class":107},[101,2892,422],{"class":160},[101,2894,1277],{"class":111},[101,2896,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2934,2937,2940],{"class":103,"line":1634},[101,2898,2484],{"class":107},[101,2900,1828],{"class":111},[101,2902,566],{"class":107},[101,2904,14],{"class":111},[101,2906,566],{"class":107},[101,2908,14],{"class":111},[101,2910,592],{"class":107},[101,2912,374],{"class":111},[101,2914,566],{"class":107},[101,2916,374],{"class":111},[101,2918,566],{"class":107},[101,2920,374],{"class":111},[101,2922,592],{"class":107},[101,2924,399],{"class":111},[101,2926,566],{"class":107},[101,2928,399],{"class":111},[101,2930,566],{"class":107},[101,2932,2933],{"class":111},"c ",[101,2935,2936],{"class":107},"==",[101,2938,2939],{"class":111}," num)",[101,2941,2942],{"class":170}," \u002F\u002F如果是水仙花数，才打印\n",[101,2944,2945],{"class":103,"line":1640},[101,2946,2497],{"class":111},[101,2948,2949,2951,2953,2955,2957],{"class":103,"line":1661},[101,2950,2502],{"class":111},[101,2952,1155],{"class":107},[101,2954,1652],{"class":111},[101,2956,1155],{"class":107},[101,2958,1178],{"class":111},[101,2960,2961],{"class":103,"line":1666},[101,2962,2516],{"class":111},[101,2964,2965,2967,2969],{"class":103,"line":1680},[101,2966,2276],{"class":111},[101,2968,2279],{"class":107},[101,2970,1277],{"class":111},[101,2972,2973],{"class":103,"line":1685},[101,2974,2174],{"class":111},[101,2976,2977,2979,2982,2984,2987],{"class":103,"line":1714},[101,2978,2238],{"class":107},[101,2980,2981],{"class":111}," (num ",[101,2983,1021],{"class":107},[101,2985,2986],{"class":160}," 1000",[101,2988,2706],{"class":111},[101,2990,2991],{"class":103,"line":1719},[101,2992,1552],{"class":111},[55,2994,2995],{"start":1166},[58,2996,2997],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[92,2999,3001],{"className":94,"code":3000,"language":96,"meta":20,"style":20},"\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",[98,3002,3003,3008,3037,3041,3053,3057,3062,3073,3080,3084,3098,3102,3109,3113,3125,3134],{"__ignoreMap":20},[101,3004,3005],{"class":103,"line":104},[101,3006,3007],{"class":170},"\u002F\u002F从数字0-9打印\n",[101,3009,3010,3013,3015,3017,3020,3022,3024,3027,3029,3031,3033,3035],{"class":103,"line":21},[101,3011,3012],{"class":107},"for",[101,3014,112],{"class":111},[101,3016,115],{"class":107},[101,3018,3019],{"class":111}," i",[101,3021,157],{"class":107},[101,3023,303],{"class":160},[101,3025,3026],{"class":111},";i",[101,3028,1021],{"class":107},[101,3030,557],{"class":160},[101,3032,3026],{"class":111},[101,3034,2279],{"class":107},[101,3036,118],{"class":111},[101,3038,3039],{"class":103,"line":1166},[101,3040,1533],{"class":111},[101,3042,3043,3045,3047,3049,3051],{"class":103,"line":1181},[101,3044,1538],{"class":111},[101,3046,1155],{"class":107},[101,3048,552],{"class":111},[101,3050,1155],{"class":107},[101,3052,1178],{"class":111},[101,3054,3055],{"class":103,"line":1187},[101,3056,1552],{"class":111},[101,3058,3059],{"class":103,"line":1201},[101,3060,3061],{"class":170},"\u002F\u002F上式可以进行拆分\n",[101,3063,3064,3066,3068,3070],{"class":103,"line":1207},[101,3065,115],{"class":107},[101,3067,3019],{"class":111},[101,3069,157],{"class":107},[101,3071,3072],{"class":160},"0\n",[101,3074,3075,3077],{"class":103,"line":1298},[101,3076,3012],{"class":107},[101,3078,3079],{"class":111},"(;;;)\n",[101,3081,3082],{"class":103,"line":1304},[101,3083,1533],{"class":111},[101,3085,3086,3089,3092,3094,3096],{"class":103,"line":1316},[101,3087,3088],{"class":107},"    if",[101,3090,3091],{"class":111},"(i",[101,3093,1697],{"class":107},[101,3095,557],{"class":160},[101,3097,118],{"class":111},[101,3099,3100],{"class":103,"line":1599},[101,3101,2017],{"class":111},[101,3103,3104,3107],{"class":103,"line":1604},[101,3105,3106],{"class":107},"        break",[101,3108,1277],{"class":111},[101,3110,3111],{"class":103,"line":1610},[101,3112,2174],{"class":111},[101,3114,3115,3117,3119,3121,3123],{"class":103,"line":1615},[101,3116,1538],{"class":111},[101,3118,1155],{"class":107},[101,3120,552],{"class":111},[101,3122,1155],{"class":107},[101,3124,1178],{"class":111},[101,3126,3127,3130,3132],{"class":103,"line":1629},[101,3128,3129],{"class":111},"    i",[101,3131,2279],{"class":107},[101,3133,1277],{"class":111},[101,3135,3136],{"class":103,"line":1634},[101,3137,1552],{"class":111},[10,3139,3140],{},"小练习",[92,3142,3144],{"className":94,"code":3143,"language":96,"meta":20,"style":20},"#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",[98,3145,3146,3152,3162,3170,3174,3179,3184,3212,3216,3221,3226,3267,3271,3284,3288,3292,3296,3308,3312,3316],{"__ignoreMap":20},[101,3147,3148,3150],{"class":103,"line":104},[101,3149,1936],{"class":107},[101,3151,1939],{"class":216},[101,3153,3154,3156,3158,3160],{"class":103,"line":21},[101,3155,1944],{"class":107},[101,3157,1947],{"class":107},[101,3159,1951],{"class":1950},[101,3161,1277],{"class":111},[101,3163,3164,3166,3168],{"class":103,"line":1166},[101,3165,115],{"class":107},[101,3167,1960],{"class":1950},[101,3169,1963],{"class":111},[101,3171,3172],{"class":103,"line":1181},[101,3173,1533],{"class":111},[101,3175,3176],{"class":103,"line":1187},[101,3177,3178],{"class":170},"    \u002F\u002F敲桌子案例\n",[101,3180,3181],{"class":103,"line":1201},[101,3182,3183],{"class":170},"    \u002F\u002F1.先输出1-100的数字\n",[101,3185,3186,3189,3191,3193,3195,3197,3199,3202,3204,3206,3208,3210],{"class":103,"line":1207},[101,3187,3188],{"class":107},"    for",[101,3190,112],{"class":111},[101,3192,115],{"class":107},[101,3194,3019],{"class":111},[101,3196,157],{"class":107},[101,3198,329],{"class":160},[101,3200,3201],{"class":111},"; i",[101,3203,1575],{"class":107},[101,3205,422],{"class":160},[101,3207,3201],{"class":111},[101,3209,2279],{"class":107},[101,3211,118],{"class":111},[101,3213,3214],{"class":103,"line":1298},[101,3215,2017],{"class":111},[101,3217,3218],{"class":103,"line":1304},[101,3219,3220],{"class":170},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[101,3222,3223],{"class":103,"line":1316},[101,3224,3225],{"class":170},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[101,3227,3228,3230,3232,3234,3236,3238,3240,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265],{"class":103,"line":1599},[101,3229,2484],{"class":107},[101,3231,3091],{"class":111},[101,3233,439],{"class":107},[101,3235,480],{"class":160},[101,3237,2936],{"class":107},[101,3239,303],{"class":160},[101,3241,3242],{"class":107}," ||",[101,3244,3019],{"class":111},[101,3246,439],{"class":107},[101,3248,557],{"class":160},[101,3250,2936],{"class":107},[101,3252,480],{"class":160},[101,3254,3242],{"class":107},[101,3256,3019],{"class":111},[101,3258,695],{"class":107},[101,3260,557],{"class":160},[101,3262,2936],{"class":107},[101,3264,480],{"class":160},[101,3266,118],{"class":111},[101,3268,3269],{"class":103,"line":1604},[101,3270,2497],{"class":111},[101,3272,3273,3275,3277,3280,3282],{"class":103,"line":1610},[101,3274,2502],{"class":111},[101,3276,1155],{"class":107},[101,3278,3279],{"class":216},"\"敲桌子\"",[101,3281,1155],{"class":107},[101,3283,1178],{"class":111},[101,3285,3286],{"class":103,"line":1615},[101,3287,2516],{"class":111},[101,3289,3290],{"class":103,"line":1629},[101,3291,2557],{"class":107},[101,3293,3294],{"class":103,"line":1634},[101,3295,2497],{"class":111},[101,3297,3298,3300,3302,3304,3306],{"class":103,"line":1640},[101,3299,2502],{"class":111},[101,3301,1155],{"class":107},[101,3303,552],{"class":111},[101,3305,1155],{"class":107},[101,3307,1178],{"class":111},[101,3309,3310],{"class":103,"line":1661},[101,3311,2516],{"class":111},[101,3313,3314],{"class":103,"line":1666},[101,3315,2174],{"class":111},[101,3317,3318],{"class":103,"line":1680},[101,3319,1552],{"class":111},[10,3321,3322],{},"嵌套实现星图",[92,3324,3326],{"className":94,"code":3325,"language":96,"meta":20,"style":20},"#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",[98,3327,3328,3334,3344,3352,3356,3382,3386,3415,3419,3430,3434,3443,3447],{"__ignoreMap":20},[101,3329,3330,3332],{"class":103,"line":104},[101,3331,1936],{"class":107},[101,3333,1939],{"class":216},[101,3335,3336,3338,3340,3342],{"class":103,"line":21},[101,3337,1944],{"class":107},[101,3339,1947],{"class":107},[101,3341,1951],{"class":1950},[101,3343,1277],{"class":111},[101,3345,3346,3348,3350],{"class":103,"line":1166},[101,3347,115],{"class":107},[101,3349,1960],{"class":1950},[101,3351,1963],{"class":111},[101,3353,3354],{"class":103,"line":1181},[101,3355,1533],{"class":111},[101,3357,3358,3360,3362,3364,3366,3368,3370,3372,3374,3376,3378,3380],{"class":103,"line":1187},[101,3359,3188],{"class":107},[101,3361,1645],{"class":111},[101,3363,115],{"class":107},[101,3365,3019],{"class":111},[101,3367,157],{"class":107},[101,3369,303],{"class":160},[101,3371,3026],{"class":111},[101,3373,1021],{"class":107},[101,3375,557],{"class":160},[101,3377,3026],{"class":111},[101,3379,2279],{"class":107},[101,3381,118],{"class":111},[101,3383,3384],{"class":103,"line":1201},[101,3385,2017],{"class":111},[101,3387,3388,3391,3393,3395,3398,3400,3402,3405,3407,3409,3411,3413],{"class":103,"line":1207},[101,3389,3390],{"class":107},"        for",[101,3392,1645],{"class":111},[101,3394,115],{"class":107},[101,3396,3397],{"class":111}," j",[101,3399,157],{"class":107},[101,3401,303],{"class":160},[101,3403,3404],{"class":111},";j",[101,3406,1021],{"class":107},[101,3408,557],{"class":160},[101,3410,3404],{"class":111},[101,3412,2279],{"class":107},[101,3414,118],{"class":111},[101,3416,3417],{"class":103,"line":1298},[101,3418,2497],{"class":111},[101,3420,3421,3423,3425,3428],{"class":103,"line":1304},[101,3422,2502],{"class":111},[101,3424,1155],{"class":107},[101,3426,3427],{"class":216},"\"*\"",[101,3429,1277],{"class":111},[101,3431,3432],{"class":103,"line":1316},[101,3433,2516],{"class":111},[101,3435,3436,3439,3441],{"class":103,"line":1599},[101,3437,3438],{"class":111},"        cout",[101,3440,1155],{"class":107},[101,3442,1178],{"class":111},[101,3444,3445],{"class":103,"line":1604},[101,3446,2174],{"class":111},[101,3448,3449],{"class":103,"line":1610},[101,3450,1552],{"class":111},[10,3452,3453],{},"乘法口诀表",[92,3455,3457],{"className":94,"code":3456,"language":96,"meta":20,"style":20},"#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",[98,3458,3459,3465,3475,3483,3487,3513,3517,3542,3546,3586,3590,3598,3602],{"__ignoreMap":20},[101,3460,3461,3463],{"class":103,"line":104},[101,3462,1936],{"class":107},[101,3464,2321],{"class":216},[101,3466,3467,3469,3471,3473],{"class":103,"line":21},[101,3468,1944],{"class":107},[101,3470,1947],{"class":107},[101,3472,1951],{"class":1950},[101,3474,1277],{"class":111},[101,3476,3477,3479,3481],{"class":103,"line":1166},[101,3478,115],{"class":107},[101,3480,1960],{"class":1950},[101,3482,1963],{"class":111},[101,3484,3485],{"class":103,"line":1181},[101,3486,1533],{"class":111},[101,3488,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511],{"class":103,"line":1187},[101,3490,3188],{"class":107},[101,3492,112],{"class":111},[101,3494,115],{"class":107},[101,3496,3019],{"class":111},[101,3498,157],{"class":107},[101,3500,329],{"class":160},[101,3502,3026],{"class":111},[101,3504,1021],{"class":107},[101,3506,557],{"class":160},[101,3508,3026],{"class":111},[101,3510,2279],{"class":107},[101,3512,118],{"class":111},[101,3514,3515],{"class":103,"line":1201},[101,3516,2017],{"class":111},[101,3518,3519,3521,3523,3525,3527,3529,3531,3533,3535,3538,3540],{"class":103,"line":1207},[101,3520,3390],{"class":107},[101,3522,112],{"class":111},[101,3524,115],{"class":107},[101,3526,3397],{"class":111},[101,3528,157],{"class":107},[101,3530,329],{"class":160},[101,3532,3404],{"class":111},[101,3534,1575],{"class":107},[101,3536,3537],{"class":111},"i;j",[101,3539,2279],{"class":107},[101,3541,118],{"class":111},[101,3543,3544],{"class":103,"line":1298},[101,3545,2497],{"class":111},[101,3547,3548,3550,3552,3554,3556,3558,3560,3562,3564,3567,3569,3571,3573,3575,3577,3580,3582,3584],{"class":103,"line":1304},[101,3549,2502],{"class":111},[101,3551,1155],{"class":107},[101,3553,578],{"class":111},[101,3555,1155],{"class":107},[101,3557,3427],{"class":216},[101,3559,1155],{"class":107},[101,3561,552],{"class":111},[101,3563,1155],{"class":107},[101,3565,3566],{"class":216},"\"=\"",[101,3568,1155],{"class":107},[101,3570,552],{"class":111},[101,3572,566],{"class":107},[101,3574,578],{"class":111},[101,3576,1155],{"class":107},[101,3578,3579],{"class":216},"'",[101,3581,1217],{"class":160},[101,3583,3579],{"class":216},[101,3585,1277],{"class":111},[101,3587,3588],{"class":103,"line":1316},[101,3589,2516],{"class":111},[101,3591,3592,3594,3596],{"class":103,"line":1599},[101,3593,3438],{"class":111},[101,3595,1155],{"class":107},[101,3597,1178],{"class":111},[101,3599,3600],{"class":103,"line":1604},[101,3601,2174],{"class":111},[101,3603,3604],{"class":103,"line":1610},[101,3605,1552],{"class":111},[72,3607,3609],{"id":3608},"_163跳出语句","1.6.3跳出语句",[55,3611,3612],{},[58,3613,3614],{},"break语句\n作用：用于跳出选择结构或者循环结构",[10,3616,3617],{},"break使用时机：",[1118,3619,3620,3623,3626],{},[58,3621,3622],{},"出现在switch条件语句中，作用是终止case并跳出switch",[58,3624,3625],{},"出现在循环结构中，作用是跳出当前的循环结构",[58,3627,3628],{},"出现在嵌套循环中，跳出最近的内层循环语句",[55,3630,3631,3634],{"start":21},[58,3632,3633],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[58,3635,3636],{},"goto语句\n语法：goto 标记;",[10,3638,3639],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[92,3641,3643],{"className":94,"code":3642,"language":96,"meta":20,"style":20},"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",[98,3644,3645,3653,3657,3670,3680,3693,3706,3719,3727,3743],{"__ignoreMap":20},[101,3646,3647,3649,3651],{"class":103,"line":104},[101,3648,115],{"class":107},[101,3650,1960],{"class":1950},[101,3652,1963],{"class":111},[101,3654,3655],{"class":103,"line":21},[101,3656,1533],{"class":111},[101,3658,3659,3661,3663,3666,3668],{"class":103,"line":1166},[101,3660,1538],{"class":111},[101,3662,1155],{"class":107},[101,3664,3665],{"class":216},"\"1\"",[101,3667,1155],{"class":107},[101,3669,1178],{"class":111},[101,3671,3672,3675,3678],{"class":103,"line":1181},[101,3673,3674],{"class":107},"    goto",[101,3676,3677],{"class":1950}," FLAG",[101,3679,1277],{"class":111},[101,3681,3682,3684,3686,3689,3691],{"class":103,"line":1187},[101,3683,1538],{"class":111},[101,3685,1155],{"class":107},[101,3687,3688],{"class":216},"\"2\"",[101,3690,1155],{"class":107},[101,3692,1178],{"class":111},[101,3694,3695,3697,3699,3702,3704],{"class":103,"line":1201},[101,3696,1538],{"class":111},[101,3698,1155],{"class":107},[101,3700,3701],{"class":216},"\"3\"",[101,3703,1155],{"class":107},[101,3705,1178],{"class":111},[101,3707,3708,3710,3712,3715,3717],{"class":103,"line":1207},[101,3709,1538],{"class":111},[101,3711,1155],{"class":107},[101,3713,3714],{"class":216},"\"4\"",[101,3716,1155],{"class":107},[101,3718,1178],{"class":111},[101,3720,3721,3724],{"class":103,"line":1298},[101,3722,3723],{"class":1950},"    FLAG",[101,3725,3726],{"class":111},":\n",[101,3728,3729,3731,3733,3736,3738,3740],{"class":103,"line":1304},[101,3730,1538],{"class":111},[101,3732,1155],{"class":107},[101,3734,3735],{"class":216},"\"5\"",[101,3737,1155],{"class":107},[101,3739,1225],{"class":111},[101,3741,3742],{"class":170},"\u002F\u002F跳过了2,3,4,直接到5\n",[101,3744,3745],{"class":103,"line":1316},[101,3746,1552],{"class":111},[43,3748,3750],{"id":3749},"_17数组","1.7数组",[72,3752,3754],{"id":3753},"_171一维数组","1.7.1一维数组",[55,3756,3757],{},[58,3758,3759],{},"一维数组定义方式",[249,3761,3762,3772],{},[252,3763,3764],{},[255,3765,3766,3769],{},[258,3767,3768],{},"方式",[258,3770,3771],{},"注意事项",[296,3773,3774,3788,3798],{},[255,3775,3776,3782],{},[301,3777,3778,3779,167],{},"数据类型 数组名",[101,3780,3781],{},"数组长度",[301,3783,3784,3785,3787],{},"这种方式是先定义再arr",[101,3786,552],{},"赋值",[255,3789,3790,3795],{},[301,3791,3778,3792,3794],{},[101,3793,3781],{},"={值1,值2....};",[301,3796,3797],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[255,3799,3800,3804],{},[301,3801,3778,3802,3794],{},[101,3803],{},[301,3805,3806,3807,3809],{},"int arr",[101,3808],{},";这是不正确的，按照这样的方式定义必须有初始长度",[55,3811,3812],{"start":21},[58,3813,3814],{},"一维数组数组名\n用途：",[1118,3816,3817],{},[58,3818,3819],{},"1.可以统计整个数组在内存中的长度：",[92,3821,3823],{"className":94,"code":3822,"language":96,"meta":20,"style":20},"sizeof(arr);\nsizeof(arr[0]);\n",[98,3824,3825,3832],{"__ignoreMap":20},[101,3826,3827,3829],{"class":103,"line":104},[101,3828,108],{"class":107},[101,3830,3831],{"class":111},"(arr);\n",[101,3833,3834,3836,3839,3841],{"class":103,"line":21},[101,3835,108],{"class":107},[101,3837,3838],{"class":111},"(arr[",[101,3840,303],{"class":160},[101,3842,3843],{"class":111},"]);\n",[1118,3845,3846],{},[58,3847,3848],{},"2.可以获取数组在内存中的首地址:",[92,3850,3852],{"className":94,"code":3851,"language":96,"meta":20,"style":20},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[98,3853,3854,3859,3872,3877],{"__ignoreMap":20},[101,3855,3856],{"class":103,"line":104},[101,3857,3858],{"class":170},"\u002F\u002F查看16进制的首地址\n",[101,3860,3861,3863,3865,3868,3870],{"class":103,"line":21},[101,3862,1356],{"class":111},[101,3864,1155],{"class":107},[101,3866,3867],{"class":111},"arr",[101,3869,1155],{"class":107},[101,3871,1178],{"class":111},[101,3873,3874],{"class":103,"line":1166},[101,3875,3876],{"class":170},"\u002F\u002F看10进制数\n",[101,3878,3879,3881,3883,3885,3887,3889,3891,3894,3896,3898,3900],{"class":103,"line":1181},[101,3880,1356],{"class":111},[101,3882,1155],{"class":107},[101,3884,112],{"class":111},[101,3886,115],{"class":107},[101,3888,540],{"class":111},[101,3890,464],{"class":107},[101,3892,3893],{"class":111},"arr[",[101,3895,303],{"class":160},[101,3897,1051],{"class":111},[101,3899,1155],{"class":107},[101,3901,1178],{"class":111},[10,3903,3904],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1118,3906,3907],{},[58,3908,3909],{},"1️⃣五只小猪称体重",[92,3911,3913],{"className":94,"code":3912,"language":96,"meta":20,"style":20},"#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",[98,3914,3915,3921,3931,3939,3943,3983,3996,4022,4026,4038,4042,4052,4056,4060,4073,4083],{"__ignoreMap":20},[101,3916,3917,3919],{"class":103,"line":104},[101,3918,1936],{"class":107},[101,3920,1939],{"class":216},[101,3922,3923,3925,3927,3929],{"class":103,"line":21},[101,3924,1944],{"class":107},[101,3926,1947],{"class":107},[101,3928,1951],{"class":1950},[101,3930,1277],{"class":111},[101,3932,3933,3935,3937],{"class":103,"line":1166},[101,3934,115],{"class":107},[101,3936,1960],{"class":1950},[101,3938,1963],{"class":111},[101,3940,3941],{"class":103,"line":1181},[101,3942,1533],{"class":111},[101,3944,3945,3947,3950,3952,3954,3956,3958,3961,3963,3966,3968,3970,3972,3975,3977,3980],{"class":103,"line":1187},[101,3946,1972],{"class":107},[101,3948,3949],{"class":111}," arr[",[101,3951,430],{"class":160},[101,3953,1051],{"class":111},[101,3955,157],{"class":107},[101,3957,1007],{"class":111},[101,3959,3960],{"class":160},"300",[101,3962,489],{"class":111},[101,3964,3965],{"class":160},"350",[101,3967,489],{"class":111},[101,3969,1709],{"class":160},[101,3971,489],{"class":111},[101,3973,3974],{"class":160},"400",[101,3976,489],{"class":111},[101,3978,3979],{"class":160},"250",[101,3981,3982],{"class":111},"};\n",[101,3984,3985,3987,3990,3992,3994],{"class":103,"line":1201},[101,3986,1972],{"class":107},[101,3988,3989],{"class":111}," tmp",[101,3991,157],{"class":107},[101,3993,303],{"class":160},[101,3995,1277],{"class":111},[101,3997,3998,4000,4002,4004,4006,4008,4010,4012,4014,4016,4018,4020],{"class":103,"line":1207},[101,3999,3188],{"class":107},[101,4001,1645],{"class":111},[101,4003,115],{"class":107},[101,4005,3019],{"class":111},[101,4007,157],{"class":107},[101,4009,303],{"class":160},[101,4011,3026],{"class":111},[101,4013,1021],{"class":107},[101,4015,430],{"class":160},[101,4017,3026],{"class":111},[101,4019,2279],{"class":107},[101,4021,118],{"class":111},[101,4023,4024],{"class":103,"line":1298},[101,4025,2017],{"class":111},[101,4027,4028,4030,4033,4035],{"class":103,"line":1304},[101,4029,2484],{"class":107},[101,4031,4032],{"class":111},"(tmp",[101,4034,1021],{"class":107},[101,4036,4037],{"class":111},"arr[i])\n",[101,4039,4040],{"class":103,"line":1316},[101,4041,2497],{"class":111},[101,4043,4044,4047,4049],{"class":103,"line":1599},[101,4045,4046],{"class":111},"            tmp",[101,4048,157],{"class":107},[101,4050,4051],{"class":111},"arr[i];\n",[101,4053,4054],{"class":103,"line":1604},[101,4055,2516],{"class":111},[101,4057,4058],{"class":103,"line":1610},[101,4059,2174],{"class":111},[101,4061,4062,4064,4066,4069,4071],{"class":103,"line":1615},[101,4063,1538],{"class":111},[101,4065,1155],{"class":107},[101,4067,4068],{"class":111},"tmp",[101,4070,1155],{"class":107},[101,4072,1178],{"class":111},[101,4074,4075,4078,4081],{"class":103,"line":1629},[101,4076,4077],{"class":107},"    return",[101,4079,4080],{"class":160}," 0",[101,4082,1277],{"class":111},[101,4084,4085],{"class":103,"line":1634},[101,4086,1552],{"class":111},[1118,4088,4089],{},[58,4090,4091],{},"2️⃣数组元素逆置",[92,4093,4095],{"className":94,"code":4094,"language":96,"meta":20,"style":20},"\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",[98,4096,4097,4102,4108,4118,4126,4130,4165,4181,4213,4226,4231,4236,4248,4258,4268,4273,4282,4292,4297,4302,4329,4333,4349,4353,4364,4373],{"__ignoreMap":20},[101,4098,4099],{"class":103,"line":104},[101,4100,4101],{"class":170},"\u002F\u002F元素逆置\n",[101,4103,4104,4106],{"class":103,"line":21},[101,4105,1936],{"class":107},[101,4107,1939],{"class":216},[101,4109,4110,4112,4114,4116],{"class":103,"line":1166},[101,4111,1944],{"class":107},[101,4113,1947],{"class":107},[101,4115,1951],{"class":1950},[101,4117,1277],{"class":111},[101,4119,4120,4122,4124],{"class":103,"line":1181},[101,4121,115],{"class":107},[101,4123,1960],{"class":1950},[101,4125,1963],{"class":111},[101,4127,4128],{"class":103,"line":1187},[101,4129,1533],{"class":111},[101,4131,4132,4135,4137,4139,4141,4143,4145,4147,4149,4151,4153,4155,4157,4159,4161,4163],{"class":103,"line":1201},[101,4133,4134],{"class":107},"   int",[101,4136,3949],{"class":111},[101,4138,430],{"class":160},[101,4140,1051],{"class":111},[101,4142,157],{"class":107},[101,4144,1007],{"class":111},[101,4146,329],{"class":160},[101,4148,489],{"class":111},[101,4150,189],{"class":160},[101,4152,489],{"class":111},[101,4154,183],{"class":160},[101,4156,489],{"class":111},[101,4158,404],{"class":160},[101,4160,489],{"class":111},[101,4162,430],{"class":160},[101,4164,3982],{"class":111},[101,4166,4167,4169,4172,4174,4176,4178],{"class":103,"line":1207},[101,4168,4134],{"class":107},[101,4170,4171],{"class":111}," start",[101,4173,157],{"class":107},[101,4175,303],{"class":160},[101,4177,167],{"class":111},[101,4179,4180],{"class":170},"\u002F\u002F起始下标\n",[101,4182,4183,4185,4188,4191,4194,4197,4199,4201,4204,4206,4208,4210],{"class":103,"line":1298},[101,4184,4134],{"class":107},[101,4186,4187],{"class":111}," end",[101,4189,4190],{"class":107},"=sizeof",[101,4192,4193],{"class":111},"(arr)",[101,4195,4196],{"class":107},"\u002Fsizeof",[101,4198,3838],{"class":111},[101,4200,303],{"class":160},[101,4202,4203],{"class":111},"])",[101,4205,643],{"class":107},[101,4207,329],{"class":160},[101,4209,167],{"class":111},[101,4211,4212],{"class":170},"\u002F\u002F结束下标\n",[101,4214,4215,4218,4221,4223],{"class":103,"line":1304},[101,4216,4217],{"class":107},"   while",[101,4219,4220],{"class":111}," (start",[101,4222,1021],{"class":107},[101,4224,4225],{"class":111},"end)\n",[101,4227,4228],{"class":103,"line":1316},[101,4229,4230],{"class":111},"   {\n",[101,4232,4233],{"class":103,"line":1599},[101,4234,4235],{"class":170},"    \u002F\u002F实现元素互换代码\n",[101,4237,4238,4240,4243,4245],{"class":103,"line":1604},[101,4239,1972],{"class":107},[101,4241,4242],{"class":111}," temp",[101,4244,157],{"class":107},[101,4246,4247],{"class":111},"arr[start];\n",[101,4249,4250,4253,4255],{"class":103,"line":1610},[101,4251,4252],{"class":111},"    arr[start]",[101,4254,157],{"class":107},[101,4256,4257],{"class":111},"arr[end];\n",[101,4259,4260,4263,4265],{"class":103,"line":1615},[101,4261,4262],{"class":111},"    arr[end]",[101,4264,157],{"class":107},[101,4266,4267],{"class":111},"temp;\n",[101,4269,4270],{"class":103,"line":1629},[101,4271,4272],{"class":170},"    \u002F\u002F下标更新\n",[101,4274,4275,4278,4280],{"class":103,"line":1634},[101,4276,4277],{"class":111},"    start",[101,4279,2279],{"class":107},[101,4281,1277],{"class":111},[101,4283,4284,4287,4290],{"class":103,"line":1640},[101,4285,4286],{"class":111},"    end",[101,4288,4289],{"class":107},"--",[101,4291,1277],{"class":111},[101,4293,4294],{"class":103,"line":1661},[101,4295,4296],{"class":111},"   }\n",[101,4298,4299],{"class":103,"line":1666},[101,4300,4301],{"class":170},"   \u002F\u002F输出逆置后的数组\n",[101,4303,4304,4307,4309,4311,4313,4315,4317,4319,4321,4323,4325,4327],{"class":103,"line":1680},[101,4305,4306],{"class":107},"   for",[101,4308,1645],{"class":111},[101,4310,115],{"class":107},[101,4312,3019],{"class":111},[101,4314,157],{"class":107},[101,4316,303],{"class":160},[101,4318,3026],{"class":111},[101,4320,1021],{"class":107},[101,4322,430],{"class":160},[101,4324,3026],{"class":111},[101,4326,2279],{"class":107},[101,4328,118],{"class":111},[101,4330,4331],{"class":103,"line":1685},[101,4332,4230],{"class":111},[101,4334,4335,4337,4339,4342,4344,4347],{"class":103,"line":1714},[101,4336,1538],{"class":111},[101,4338,1155],{"class":107},[101,4340,4341],{"class":111},"arr[i]",[101,4343,1155],{"class":107},[101,4345,4346],{"class":216},"\" \"",[101,4348,1277],{"class":111},[101,4350,4351],{"class":103,"line":1719},[101,4352,4296],{"class":111},[101,4354,4355,4358,4360,4362],{"class":103,"line":1736},[101,4356,4357],{"class":1950},"   system",[101,4359,112],{"class":111},[101,4361,2295],{"class":216},[101,4363,2706],{"class":111},[101,4365,4366,4369,4371],{"class":103,"line":1741},[101,4367,4368],{"class":107},"   return",[101,4370,4080],{"class":160},[101,4372,1277],{"class":111},[101,4374,4375],{"class":103,"line":1746},[101,4376,1552],{"class":111},[1118,4378,4379],{},[58,4380,4381],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[92,4383,4385],{"className":94,"code":4384,"language":96,"meta":20,"style":20},"\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",[98,4386,4387,4392,4398,4408,4416,4420,4472,4485,4511,4515,4529,4533,4538,4543,4573,4577,4582,4616,4620,4625,4645,4650,4662,4678,4693,4698,4702,4706,4719,4745,4749,4763,4767,4775],{"__ignoreMap":20},[101,4388,4389],{"class":103,"line":104},[101,4390,4391],{"class":170},"\u002F\u002F冒泡排序,升序\n",[101,4393,4394,4396],{"class":103,"line":21},[101,4395,1936],{"class":107},[101,4397,1939],{"class":216},[101,4399,4400,4402,4404,4406],{"class":103,"line":1166},[101,4401,1944],{"class":107},[101,4403,1947],{"class":107},[101,4405,1951],{"class":1950},[101,4407,1277],{"class":111},[101,4409,4410,4412,4414],{"class":103,"line":1181},[101,4411,115],{"class":107},[101,4413,1960],{"class":1950},[101,4415,1963],{"class":111},[101,4417,4418],{"class":103,"line":1187},[101,4419,1533],{"class":111},[101,4421,4422,4424,4426,4428,4431,4433,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462,4464,4466,4468,4470],{"class":103,"line":1201},[101,4423,1972],{"class":107},[101,4425,3949],{"class":111},[101,4427,531],{"class":160},[101,4429,4430],{"class":111},"] ",[101,4432,157],{"class":107},[101,4434,4435],{"class":111}," {",[101,4437,404],{"class":160},[101,4439,489],{"class":111},[101,4441,189],{"class":160},[101,4443,489],{"class":111},[101,4445,506],{"class":160},[101,4447,489],{"class":111},[101,4449,303],{"class":160},[101,4451,489],{"class":111},[101,4453,430],{"class":160},[101,4455,489],{"class":111},[101,4457,480],{"class":160},[101,4459,489],{"class":111},[101,4461,329],{"class":160},[101,4463,489],{"class":111},[101,4465,183],{"class":160},[101,4467,489],{"class":111},[101,4469,531],{"class":160},[101,4471,3982],{"class":111},[101,4473,4474,4476,4478,4481,4483],{"class":103,"line":1207},[101,4475,1538],{"class":111},[101,4477,1155],{"class":107},[101,4479,4480],{"class":216},"\"排序前：\"",[101,4482,1155],{"class":107},[101,4484,1178],{"class":111},[101,4486,4487,4489,4491,4493,4495,4497,4499,4501,4503,4505,4507,4509],{"class":103,"line":1298},[101,4488,3188],{"class":107},[101,4490,1645],{"class":111},[101,4492,115],{"class":107},[101,4494,3019],{"class":111},[101,4496,157],{"class":107},[101,4498,303],{"class":160},[101,4500,3026],{"class":111},[101,4502,1021],{"class":107},[101,4504,531],{"class":160},[101,4506,3026],{"class":111},[101,4508,2279],{"class":107},[101,4510,118],{"class":111},[101,4512,4513],{"class":103,"line":1304},[101,4514,2017],{"class":111},[101,4516,4517,4519,4521,4523,4525,4527],{"class":103,"line":1316},[101,4518,3438],{"class":111},[101,4520,1155],{"class":107},[101,4522,4341],{"class":111},[101,4524,1155],{"class":107},[101,4526,4346],{"class":216},[101,4528,1277],{"class":111},[101,4530,4531],{"class":103,"line":1599},[101,4532,2174],{"class":111},[101,4534,4535],{"class":103,"line":1604},[101,4536,4537],{"class":170},"    \u002F\u002F开始冒泡排序\n",[101,4539,4540],{"class":103,"line":1610},[101,4541,4542],{"class":170},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[101,4544,4545,4547,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571],{"class":103,"line":1615},[101,4546,3188],{"class":107},[101,4548,1645],{"class":111},[101,4550,115],{"class":107},[101,4552,3019],{"class":111},[101,4554,157],{"class":107},[101,4556,303],{"class":160},[101,4558,3026],{"class":111},[101,4560,1021],{"class":107},[101,4562,531],{"class":160},[101,4564,643],{"class":107},[101,4566,329],{"class":160},[101,4568,3026],{"class":111},[101,4570,2279],{"class":107},[101,4572,118],{"class":111},[101,4574,4575],{"class":103,"line":1629},[101,4576,2017],{"class":111},[101,4578,4579],{"class":103,"line":1634},[101,4580,4581],{"class":170},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[101,4583,4584,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614],{"class":103,"line":1640},[101,4585,3390],{"class":107},[101,4587,1645],{"class":111},[101,4589,115],{"class":107},[101,4591,3397],{"class":111},[101,4593,157],{"class":107},[101,4595,303],{"class":160},[101,4597,3404],{"class":111},[101,4599,1021],{"class":107},[101,4601,531],{"class":160},[101,4603,643],{"class":107},[101,4605,552],{"class":111},[101,4607,643],{"class":107},[101,4609,329],{"class":160},[101,4611,3404],{"class":111},[101,4613,2279],{"class":107},[101,4615,118],{"class":111},[101,4617,4618],{"class":103,"line":1661},[101,4619,2497],{"class":111},[101,4621,4622],{"class":103,"line":1666},[101,4623,4624],{"class":170},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[101,4626,4627,4630,4633,4635,4638,4640,4642],{"class":103,"line":1680},[101,4628,4629],{"class":107},"            if",[101,4631,4632],{"class":111},"(arr[j]",[101,4634,1071],{"class":107},[101,4636,4637],{"class":111},"arr[j",[101,4639,592],{"class":107},[101,4641,329],{"class":160},[101,4643,4644],{"class":111},"])\n",[101,4646,4647],{"class":103,"line":1685},[101,4648,4649],{"class":111},"            {\n",[101,4651,4652,4655,4657,4659],{"class":103,"line":1714},[101,4653,4654],{"class":107},"                int",[101,4656,4242],{"class":111},[101,4658,157],{"class":107},[101,4660,4661],{"class":111},"arr[j];\n",[101,4663,4664,4667,4669,4671,4673,4675],{"class":103,"line":1719},[101,4665,4666],{"class":111},"                arr[j]",[101,4668,157],{"class":107},[101,4670,4637],{"class":111},[101,4672,592],{"class":107},[101,4674,329],{"class":160},[101,4676,4677],{"class":111},"];\n",[101,4679,4680,4683,4685,4687,4689,4691],{"class":103,"line":1736},[101,4681,4682],{"class":111},"                arr[j",[101,4684,592],{"class":107},[101,4686,329],{"class":160},[101,4688,1051],{"class":111},[101,4690,157],{"class":107},[101,4692,4267],{"class":111},[101,4694,4695],{"class":103,"line":1741},[101,4696,4697],{"class":111},"            }\n",[101,4699,4700],{"class":103,"line":1746},[101,4701,2516],{"class":111},[101,4703,4704],{"class":103,"line":1751},[101,4705,2174],{"class":111},[101,4707,4708,4710,4712,4715,4717],{"class":103,"line":1765},[101,4709,1538],{"class":111},[101,4711,1155],{"class":107},[101,4713,4714],{"class":216},"\"排序后：\"",[101,4716,1155],{"class":107},[101,4718,1178],{"class":111},[101,4720,4721,4723,4725,4727,4729,4731,4733,4735,4737,4739,4741,4743],{"class":103,"line":1770},[101,4722,3188],{"class":107},[101,4724,1645],{"class":111},[101,4726,115],{"class":107},[101,4728,3019],{"class":111},[101,4730,157],{"class":107},[101,4732,303],{"class":160},[101,4734,3026],{"class":111},[101,4736,1021],{"class":107},[101,4738,531],{"class":160},[101,4740,3026],{"class":111},[101,4742,2279],{"class":107},[101,4744,118],{"class":111},[101,4746,4747],{"class":103,"line":2564},[101,4748,2017],{"class":111},[101,4750,4751,4753,4755,4757,4759,4761],{"class":103,"line":2578},[101,4752,3438],{"class":111},[101,4754,1155],{"class":107},[101,4756,4341],{"class":111},[101,4758,1155],{"class":107},[101,4760,4346],{"class":216},[101,4762,1277],{"class":111},[101,4764,4765],{"class":103,"line":2586},[101,4766,2174],{"class":111},[101,4768,4769,4771,4773],{"class":103,"line":2591},[101,4770,4077],{"class":107},[101,4772,4080],{"class":160},[101,4774,1277],{"class":111},[101,4776,4777],{"class":103,"line":2597},[101,4778,1552],{"class":111},[72,4780,4782],{"id":4781},"_172二维数组","1.7.2二维数组",[55,4784,4785],{},[58,4786,4787],{},"二维数组的四种定义方式",[249,4789,4790,4799],{},[252,4791,4792],{},[255,4793,4794,4797],{},[258,4795,4796],{},"序号",[258,4798,3768],{},[296,4800,4801,4811,4820,4829,4838],{},[255,4802,4803,4805],{},[301,4804,329],{},[301,4806,4807,4808,167],{},"数据类型 数组名[行数]",[101,4809,4810],{},"列数",[255,4812,4813,4815],{},[301,4814,189],{},[301,4816,4807,4817,4819],{},[101,4818,4810],{},"={ {数据1,数据2}，{数据3，数据4}... }",[255,4821,4822,4824],{},[301,4823,183],{},[301,4825,4807,4826,4828],{},[101,4827,4810],{},"={数据1,数据2,数据3...}",[255,4830,4831,4833],{},[301,4832,404],{},[301,4834,4835,4836,4828],{},"数据类型 数组名[]",[101,4837,4810],{},[255,4839,4840,4843],{},[301,4841,4842],{},"注意：不能只省略列数",[301,4844],{},[55,4846,4847],{"start":21},[58,4848,4849],{},"二维数组数组名",[1118,4851,4852,4855],{},[58,4853,4854],{},"1.查看二维数组所占内存空间",[58,4856,4857],{},"2.获取二维数组首地址",[10,4859,4860],{},"已知二维数组，求二维数组的行数与列数",[92,4862,4864],{"className":94,"code":4863,"language":96,"meta":20,"style":20},"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",[98,4865,4866,4874,4878,4896,4900,4918,4934,4939,4964,4997],{"__ignoreMap":20},[101,4867,4868,4870,4872],{"class":103,"line":104},[101,4869,115],{"class":107},[101,4871,1960],{"class":1950},[101,4873,1963],{"class":111},[101,4875,4876],{"class":103,"line":21},[101,4877,1533],{"class":111},[101,4879,4880,4882,4884,4886,4889,4891,4893],{"class":103,"line":1166},[101,4881,1972],{"class":107},[101,4883,3949],{"class":111},[101,4885,189],{"class":160},[101,4887,4888],{"class":111},"][",[101,4890,183],{"class":160},[101,4892,1051],{"class":111},[101,4894,4895],{"class":107},"=\n",[101,4897,4898],{"class":103,"line":1181},[101,4899,2017],{"class":111},[101,4901,4902,4905,4907,4909,4911,4913,4915],{"class":103,"line":1187},[101,4903,4904],{"class":111},"        {",[101,4906,329],{"class":160},[101,4908,489],{"class":111},[101,4910,189],{"class":160},[101,4912,489],{"class":111},[101,4914,183],{"class":160},[101,4916,4917],{"class":111},"},\n",[101,4919,4920,4922,4924,4926,4928,4930,4932],{"class":103,"line":1201},[101,4921,4904],{"class":111},[101,4923,404],{"class":160},[101,4925,489],{"class":111},[101,4927,430],{"class":160},[101,4929,489],{"class":111},[101,4931,455],{"class":160},[101,4933,1552],{"class":111},[101,4935,4936],{"class":103,"line":1207},[101,4937,4938],{"class":111},"    };\n",[101,4940,4941,4943,4945,4948,4950,4952,4954,4956,4958,4960,4962],{"class":103,"line":1298},[101,4942,1538],{"class":111},[101,4944,1155],{"class":107},[101,4946,4947],{"class":216},"\"二维数组的行数\"",[101,4949,1359],{"class":107},[101,4951,4193],{"class":111},[101,4953,4196],{"class":107},[101,4955,3838],{"class":111},[101,4957,303],{"class":160},[101,4959,4203],{"class":111},[101,4961,1155],{"class":107},[101,4963,1178],{"class":111},[101,4965,4966,4968,4970,4973,4975,4977,4979,4981,4983,4985,4987,4989,4991,4993,4995],{"class":103,"line":1304},[101,4967,1538],{"class":111},[101,4969,1155],{"class":107},[101,4971,4972],{"class":216},"\"二维数组的列数\"",[101,4974,1359],{"class":107},[101,4976,3838],{"class":111},[101,4978,303],{"class":160},[101,4980,4203],{"class":111},[101,4982,4196],{"class":107},[101,4984,3838],{"class":111},[101,4986,303],{"class":160},[101,4988,4888],{"class":111},[101,4990,303],{"class":160},[101,4992,4203],{"class":111},[101,4994,1155],{"class":107},[101,4996,1178],{"class":111},[101,4998,4999],{"class":103,"line":1316},[101,5000,1552],{"class":111},[10,5002,5003],{},"查看二维数组首地址",[92,5005,5007],{"className":94,"code":5006,"language":96,"meta":20,"style":20},"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",[98,5008,5009,5026,5052,5077],{"__ignoreMap":20},[101,5010,5011,5013,5015,5018,5020,5022,5024],{"class":103,"line":104},[101,5012,1356],{"class":111},[101,5014,1155],{"class":107},[101,5016,5017],{"class":216},"\"二维数组首地址：\"",[101,5019,1155],{"class":107},[101,5021,3867],{"class":111},[101,5023,1155],{"class":107},[101,5025,1178],{"class":111},[101,5027,5028,5030,5032,5035,5037,5039,5041,5044,5046,5048,5050],{"class":103,"line":21},[101,5029,1356],{"class":111},[101,5031,1155],{"class":107},[101,5033,5034],{"class":216},"\"二维数组第一行的首地址：\"",[101,5036,1155],{"class":107},[101,5038,112],{"class":111},[101,5040,115],{"class":107},[101,5042,5043],{"class":111},")arr[",[101,5045,303],{"class":160},[101,5047,1051],{"class":111},[101,5049,1155],{"class":107},[101,5051,1178],{"class":111},[101,5053,5054,5056,5058,5061,5063,5065,5067,5069,5071,5073,5075],{"class":103,"line":1166},[101,5055,1356],{"class":111},[101,5057,1155],{"class":107},[101,5059,5060],{"class":216},"\"二维数组第二行的首地址：\"",[101,5062,1155],{"class":107},[101,5064,112],{"class":111},[101,5066,115],{"class":107},[101,5068,5043],{"class":111},[101,5070,329],{"class":160},[101,5072,1051],{"class":111},[101,5074,1155],{"class":107},[101,5076,1178],{"class":111},[101,5078,5079,5081,5083,5086,5088,5090,5092,5094,5096,5098,5100,5102,5104,5106,5108,5110],{"class":103,"line":1181},[101,5080,1356],{"class":111},[101,5082,1155],{"class":107},[101,5084,5085],{"class":216},"\"二维数组第一个元素的首地址:\"",[101,5087,1155],{"class":107},[101,5089,112],{"class":111},[101,5091,115],{"class":107},[101,5093,540],{"class":111},[101,5095,464],{"class":107},[101,5097,3893],{"class":111},[101,5099,303],{"class":160},[101,5101,4888],{"class":111},[101,5103,303],{"class":160},[101,5105,1051],{"class":111},[101,5107,1155],{"class":107},[101,5109,1225],{"class":111},[101,5111,5112],{"class":170},"\u002F\u002F对于数，要加取址符\n",[5114,5115,5116],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":20,"searchDepth":21,"depth":21,"links":5118},[5119,5120,5121,5129,5130,5136,5141],{"id":45,"depth":21,"text":46},{"id":52,"depth":21,"text":53},{"id":69,"depth":21,"text":70,"children":5122},[5123,5124,5125,5126,5127,5128],{"id":74,"depth":1166,"text":75},{"id":128,"depth":1166,"text":129},{"id":197,"depth":1166,"text":198},{"id":1136,"depth":1166,"text":1137},{"id":1231,"depth":1166,"text":1232},{"id":1330,"depth":1166,"text":1331},{"id":1372,"depth":21,"text":1373},{"id":1440,"depth":21,"text":1441,"children":5131},[5132,5133,5134,5135],{"id":1444,"depth":1166,"text":1445},{"id":1466,"depth":1166,"text":1467},{"id":1475,"depth":1166,"text":1476},{"id":1484,"depth":1166,"text":1485},{"id":1493,"depth":21,"text":1494,"children":5137},[5138,5139,5140],{"id":1497,"depth":1166,"text":1498},{"id":2192,"depth":1166,"text":2193},{"id":3608,"depth":1166,"text":3609},{"id":3749,"depth":21,"text":3750,"children":5142},[5143,5144],{"id":3753,"depth":1166,"text":3754},{"id":4781,"depth":1166,"text":4782},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":35,"description":20},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5151,"title":5152,"body":5153,"description":20,"extension":24,"meta":6253,"navigation":27,"path":6254,"seo":6255,"stem":6256,"__hash__":6257},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5154,"toc":6245},[5155,5158,5162,5170,5178,5181,5247,5251,5254,5330,5334,5337,5340,5343,5556,5560,5565,5629,5634,5701,5706,5797,5800,5905,5909,5912,5918,6062,6066,6069,6083,6086,6131,6134,6242],[39,5156,5152],{"id":5157},"_2函数",[43,5159,5161],{"id":5160},"_21函数概述","2.1函数概述",[55,5163,5164,5167],{},[58,5165,5166],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[58,5168,5169],{},"语法：",[92,5171,5176],{"className":5172,"code":5174,"language":5175,"meta":20},[5173],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[98,5177,5174],{"__ignoreMap":20},[10,5179,5180],{},"小案例",[92,5182,5184],{"className":94,"code":5183,"language":96,"meta":20,"style":20},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[98,5185,5186,5191,5215,5219,5236,5243],{"__ignoreMap":20},[101,5187,5188],{"class":103,"line":104},[101,5189,5190],{"class":170},"\u002F\u002Fnum1,num2形参\n",[101,5192,5193,5195,5198,5200,5202,5206,5208,5210,5213],{"class":103,"line":21},[101,5194,115],{"class":107},[101,5196,5197],{"class":1950}," add",[101,5199,112],{"class":111},[101,5201,115],{"class":107},[101,5203,5205],{"class":5204},"s4XuR"," num1",[101,5207,489],{"class":111},[101,5209,115],{"class":107},[101,5211,5212],{"class":5204}," num2",[101,5214,118],{"class":111},[101,5216,5217],{"class":103,"line":1166},[101,5218,1533],{"class":111},[101,5220,5221,5223,5226,5228,5231,5233],{"class":103,"line":1181},[101,5222,1972],{"class":107},[101,5224,5225],{"class":111}," sum",[101,5227,157],{"class":107},[101,5229,5230],{"class":111},"num1",[101,5232,592],{"class":107},[101,5234,5235],{"class":111},"num2;\n",[101,5237,5238,5240],{"class":103,"line":1187},[101,5239,4077],{"class":107},[101,5241,5242],{"class":111}," sum;\n",[101,5244,5245],{"class":103,"line":1201},[101,5246,1552],{"class":111},[43,5248,5250],{"id":5249},"_22函数调用","2.2函数调用",[10,5252,5253],{},"调用刚刚写的求和函数",[92,5255,5257],{"className":94,"code":5256,"language":96,"meta":20,"style":20},"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",[98,5258,5259,5267,5271,5276,5288,5300,5309,5314,5326],{"__ignoreMap":20},[101,5260,5261,5263,5265],{"class":103,"line":104},[101,5262,115],{"class":107},[101,5264,1960],{"class":1950},[101,5266,1963],{"class":111},[101,5268,5269],{"class":103,"line":21},[101,5270,1533],{"class":111},[101,5272,5273],{"class":103,"line":1166},[101,5274,5275],{"class":170},"    \u002F\u002Fa,b实参\n",[101,5277,5278,5280,5282,5284,5286],{"class":103,"line":1181},[101,5279,1972],{"class":107},[101,5281,1385],{"class":111},[101,5283,157],{"class":107},[101,5285,303],{"class":160},[101,5287,1277],{"class":111},[101,5289,5290,5292,5294,5296,5298],{"class":103,"line":1187},[101,5291,1972],{"class":107},[101,5293,2820],{"class":111},[101,5295,157],{"class":107},[101,5297,303],{"class":160},[101,5299,1277],{"class":111},[101,5301,5302,5304,5306],{"class":103,"line":1201},[101,5303,1999],{"class":111},[101,5305,1416],{"class":107},[101,5307,5308],{"class":111},"a,b;\n",[101,5310,5311],{"class":103,"line":1207},[101,5312,5313],{"class":170},"    \u002F\u002F调用函数时，实参值传给了形参\n",[101,5315,5316,5318,5320,5323],{"class":103,"line":1298},[101,5317,1538],{"class":111},[101,5319,1155],{"class":107},[101,5321,5322],{"class":1950},"add",[101,5324,5325],{"class":111},"(a,b);\n",[101,5327,5328],{"class":103,"line":1304},[101,5329,1552],{"class":111},[43,5331,5333],{"id":5332},"_23值传递","2.3值传递",[10,5335,5336],{},"值传递就是函数调用时实参将数值传给形参",[10,5338,5339],{},"值传递时，如果形参发生任何改变，不会影响实参",[10,5341,5342],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[92,5344,5346],{"className":94,"code":5345,"language":96,"meta":20,"style":20},"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",[98,5347,5348,5370,5374,5387,5404,5422,5433,5442,5451,5464,5480,5496,5505,5509,5517,5521,5533,5545,5552],{"__ignoreMap":20},[101,5349,5350,5353,5356,5358,5360,5362,5364,5366,5368],{"class":103,"line":104},[101,5351,5352],{"class":107},"void",[101,5354,5355],{"class":1950}," swap",[101,5357,112],{"class":111},[101,5359,115],{"class":107},[101,5361,5205],{"class":5204},[101,5363,489],{"class":111},[101,5365,115],{"class":107},[101,5367,5212],{"class":5204},[101,5369,118],{"class":111},[101,5371,5372],{"class":103,"line":21},[101,5373,1533],{"class":111},[101,5375,5376,5378,5380,5383,5385],{"class":103,"line":1166},[101,5377,1538],{"class":111},[101,5379,1155],{"class":107},[101,5381,5382],{"class":216},"\"交换前：\"",[101,5384,1155],{"class":107},[101,5386,1178],{"class":111},[101,5388,5389,5391,5393,5396,5398,5400,5402],{"class":103,"line":1181},[101,5390,1538],{"class":111},[101,5392,1155],{"class":107},[101,5394,5395],{"class":216},"\"num1=\"",[101,5397,1155],{"class":107},[101,5399,5230],{"class":111},[101,5401,1155],{"class":107},[101,5403,1178],{"class":111},[101,5405,5406,5408,5410,5413,5415,5418,5420],{"class":103,"line":1187},[101,5407,1538],{"class":111},[101,5409,1155],{"class":107},[101,5411,5412],{"class":216},"\"num2=\"",[101,5414,1155],{"class":107},[101,5416,5417],{"class":111},"num2",[101,5419,1155],{"class":107},[101,5421,1178],{"class":111},[101,5423,5424,5426,5428,5430],{"class":103,"line":1201},[101,5425,1972],{"class":107},[101,5427,4242],{"class":111},[101,5429,157],{"class":107},[101,5431,5432],{"class":111},"num1;\n",[101,5434,5435,5438,5440],{"class":103,"line":1207},[101,5436,5437],{"class":111},"    num1",[101,5439,157],{"class":107},[101,5441,5235],{"class":111},[101,5443,5444,5447,5449],{"class":103,"line":1298},[101,5445,5446],{"class":111},"    num2",[101,5448,157],{"class":107},[101,5450,4267],{"class":111},[101,5452,5453,5455,5457,5460,5462],{"class":103,"line":1304},[101,5454,1538],{"class":111},[101,5456,1155],{"class":107},[101,5458,5459],{"class":216},"\"交换后：\"",[101,5461,1155],{"class":107},[101,5463,1178],{"class":111},[101,5465,5466,5468,5470,5472,5474,5476,5478],{"class":103,"line":1316},[101,5467,1538],{"class":111},[101,5469,1155],{"class":107},[101,5471,5395],{"class":216},[101,5473,1155],{"class":107},[101,5475,5230],{"class":111},[101,5477,1155],{"class":107},[101,5479,1178],{"class":111},[101,5481,5482,5484,5486,5488,5490,5492,5494],{"class":103,"line":1599},[101,5483,1538],{"class":111},[101,5485,1155],{"class":107},[101,5487,5412],{"class":216},[101,5489,1155],{"class":107},[101,5491,5417],{"class":111},[101,5493,1155],{"class":107},[101,5495,1178],{"class":111},[101,5497,5498,5500,5502],{"class":103,"line":1604},[101,5499,4077],{"class":107},[101,5501,167],{"class":111},[101,5503,5504],{"class":170},"\u002F\u002F或者不写\n",[101,5506,5507],{"class":103,"line":1610},[101,5508,1552],{"class":111},[101,5510,5511,5513,5515],{"class":103,"line":1615},[101,5512,115],{"class":107},[101,5514,1960],{"class":1950},[101,5516,1963],{"class":111},[101,5518,5519],{"class":103,"line":1629},[101,5520,1533],{"class":111},[101,5522,5523,5525,5527,5529,5531],{"class":103,"line":1634},[101,5524,1972],{"class":107},[101,5526,1385],{"class":111},[101,5528,157],{"class":107},[101,5530,557],{"class":160},[101,5532,1277],{"class":111},[101,5534,5535,5537,5539,5541,5543],{"class":103,"line":1640},[101,5536,1972],{"class":107},[101,5538,2820],{"class":111},[101,5540,157],{"class":107},[101,5542,811],{"class":160},[101,5544,1277],{"class":111},[101,5546,5547,5550],{"class":103,"line":1661},[101,5548,5549],{"class":1950},"    swap",[101,5551,5325],{"class":111},[101,5553,5554],{"class":103,"line":1666},[101,5555,1552],{"class":111},[43,5557,5559],{"id":5558},"_24函数的常见形式","2.4函数的常见形式",[55,5561,5562],{},[58,5563,5564],{},"无参无返",[92,5566,5568],{"className":94,"code":5567,"language":96,"meta":20,"style":20},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[98,5569,5570,5579,5583,5596,5600,5608,5612,5617,5625],{"__ignoreMap":20},[101,5571,5572,5574,5577],{"class":103,"line":104},[101,5573,5352],{"class":107},[101,5575,5576],{"class":1950}," test01",[101,5578,1963],{"class":111},[101,5580,5581],{"class":103,"line":21},[101,5582,1533],{"class":111},[101,5584,5585,5587,5589,5592,5594],{"class":103,"line":1166},[101,5586,1538],{"class":111},[101,5588,1155],{"class":107},[101,5590,5591],{"class":216},"\"你好\"",[101,5593,1155],{"class":107},[101,5595,1178],{"class":111},[101,5597,5598],{"class":103,"line":1181},[101,5599,1552],{"class":111},[101,5601,5602,5604,5606],{"class":103,"line":1187},[101,5603,115],{"class":107},[101,5605,1960],{"class":1950},[101,5607,1963],{"class":111},[101,5609,5610],{"class":103,"line":1201},[101,5611,1533],{"class":111},[101,5613,5614],{"class":103,"line":1207},[101,5615,5616],{"class":170},"    \u002F\u002F函数调用\n",[101,5618,5619,5622],{"class":103,"line":1298},[101,5620,5621],{"class":1950},"    test01",[101,5623,5624],{"class":111},"();\n",[101,5626,5627],{"class":103,"line":1304},[101,5628,1552],{"class":111},[55,5630,5631],{"start":21},[58,5632,5633],{},"有参无返",[92,5635,5637],{"className":94,"code":5636,"language":96,"meta":20,"style":20},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[98,5638,5639,5654,5658,5670,5674,5682,5686,5697],{"__ignoreMap":20},[101,5640,5641,5643,5646,5648,5650,5652],{"class":103,"line":104},[101,5642,5352],{"class":107},[101,5644,5645],{"class":1950}," test02",[101,5647,112],{"class":111},[101,5649,115],{"class":107},[101,5651,1385],{"class":5204},[101,5653,118],{"class":111},[101,5655,5656],{"class":103,"line":21},[101,5657,1533],{"class":111},[101,5659,5660,5662,5664,5666,5668],{"class":103,"line":1166},[101,5661,1538],{"class":111},[101,5663,1155],{"class":107},[101,5665,5591],{"class":216},[101,5667,1155],{"class":107},[101,5669,1178],{"class":111},[101,5671,5672],{"class":103,"line":1181},[101,5673,1552],{"class":111},[101,5675,5676,5678,5680],{"class":103,"line":1187},[101,5677,115],{"class":107},[101,5679,1960],{"class":1950},[101,5681,1963],{"class":111},[101,5683,5684],{"class":103,"line":1201},[101,5685,1533],{"class":111},[101,5687,5688,5691,5693,5695],{"class":103,"line":1207},[101,5689,5690],{"class":1950},"    test02",[101,5692,112],{"class":111},[101,5694,422],{"class":160},[101,5696,2706],{"class":111},[101,5698,5699],{"class":103,"line":1298},[101,5700,1552],{"class":111},[55,5702,5703],{"start":1166},[58,5704,5705],{},"无参有返",[92,5707,5709],{"className":94,"code":5708,"language":96,"meta":20,"style":20},"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",[98,5710,5711,5720,5724,5736,5745,5749,5757,5761,5774,5793],{"__ignoreMap":20},[101,5712,5713,5715,5718],{"class":103,"line":104},[101,5714,115],{"class":107},[101,5716,5717],{"class":1950}," test03",[101,5719,1963],{"class":111},[101,5721,5722],{"class":103,"line":21},[101,5723,1533],{"class":111},[101,5725,5726,5728,5730,5732,5734],{"class":103,"line":1166},[101,5727,1538],{"class":111},[101,5729,1155],{"class":107},[101,5731,5591],{"class":216},[101,5733,1155],{"class":107},[101,5735,1178],{"class":111},[101,5737,5738,5740,5743],{"class":103,"line":1181},[101,5739,4077],{"class":107},[101,5741,5742],{"class":160}," 100",[101,5744,1277],{"class":111},[101,5746,5747],{"class":103,"line":1187},[101,5748,1552],{"class":111},[101,5750,5751,5753,5755],{"class":103,"line":1201},[101,5752,115],{"class":107},[101,5754,1960],{"class":1950},[101,5756,1963],{"class":111},[101,5758,5759],{"class":103,"line":1207},[101,5760,1533],{"class":111},[101,5762,5763,5765,5767,5769,5772],{"class":103,"line":1298},[101,5764,1972],{"class":107},[101,5766,5205],{"class":111},[101,5768,157],{"class":107},[101,5770,5771],{"class":1950},"test03",[101,5773,5624],{"class":111},[101,5775,5776,5778,5780,5782,5784,5786,5788,5790],{"class":103,"line":1304},[101,5777,1538],{"class":111},[101,5779,1155],{"class":107},[101,5781,5395],{"class":216},[101,5783,1155],{"class":107},[101,5785,5230],{"class":111},[101,5787,1155],{"class":107},[101,5789,1225],{"class":111},[101,5791,5792],{"class":170}," \u002F\u002F100\n",[101,5794,5795],{"class":103,"line":1316},[101,5796,1552],{"class":111},[10,5798,5799],{},"4.有参有返",[92,5801,5803],{"className":94,"code":5802,"language":96,"meta":20,"style":20},"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",[98,5804,5805,5820,5824,5837,5843,5847,5856,5860,5872,5886,5901],{"__ignoreMap":20},[101,5806,5807,5809,5812,5814,5816,5818],{"class":103,"line":104},[101,5808,115],{"class":107},[101,5810,5811],{"class":1950}," test04",[101,5813,112],{"class":111},[101,5815,115],{"class":107},[101,5817,1385],{"class":5204},[101,5819,118],{"class":111},[101,5821,5822],{"class":103,"line":21},[101,5823,1533],{"class":111},[101,5825,5826,5828,5830,5833,5835],{"class":103,"line":1166},[101,5827,1538],{"class":111},[101,5829,1155],{"class":107},[101,5831,5832],{"class":216},"\"hello\"",[101,5834,1155],{"class":107},[101,5836,1178],{"class":111},[101,5838,5839,5841],{"class":103,"line":1181},[101,5840,4077],{"class":107},[101,5842,1419],{"class":111},[101,5844,5845],{"class":103,"line":1187},[101,5846,1552],{"class":111},[101,5848,5849,5851,5854],{"class":103,"line":1201},[101,5850,115],{"class":107},[101,5852,5853],{"class":1950}," mian",[101,5855,1963],{"class":111},[101,5857,5858],{"class":103,"line":1207},[101,5859,1533],{"class":111},[101,5861,5862,5864,5866,5868,5870],{"class":103,"line":1298},[101,5863,1972],{"class":107},[101,5865,2820],{"class":111},[101,5867,157],{"class":107},[101,5869,329],{"class":160},[101,5871,1277],{"class":111},[101,5873,5874,5876,5878,5880,5883],{"class":103,"line":1304},[101,5875,1972],{"class":107},[101,5877,2836],{"class":111},[101,5879,157],{"class":107},[101,5881,5882],{"class":1950},"test04",[101,5884,5885],{"class":111},"(b);\n",[101,5887,5888,5890,5892,5894,5896,5898],{"class":103,"line":1316},[101,5889,1538],{"class":111},[101,5891,1155],{"class":107},[101,5893,399],{"class":111},[101,5895,1155],{"class":107},[101,5897,1225],{"class":111},[101,5899,5900],{"class":170}," \u002F\u002F1\n",[101,5902,5903],{"class":103,"line":1599},[101,5904,1552],{"class":111},[43,5906,5908],{"id":5907},"_25函数的声明","2.5函数的声明",[10,5910,5911],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[10,5913,5914,5915],{},"函数的",[261,5916,5917],{},"声明可以多次，但是函数的定义只能有一次",[92,5919,5921],{"className":94,"code":5920,"language":96,"meta":20,"style":20},"\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",[98,5922,5923,5928,5933,5958,5967,5971,5983,5995,6011,6015,6035,6039,6058],{"__ignoreMap":20},[101,5924,5925],{"class":103,"line":104},[101,5926,5927],{"class":170},"\u002F\u002F函数声明\n",[101,5929,5930],{"class":103,"line":21},[101,5931,5932],{"class":170},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[101,5934,5935,5937,5940,5942,5944,5946,5948,5950,5952,5955],{"class":103,"line":1166},[101,5936,115],{"class":107},[101,5938,5939],{"class":1950}," max",[101,5941,112],{"class":111},[101,5943,115],{"class":107},[101,5945,1385],{"class":5204},[101,5947,489],{"class":111},[101,5949,115],{"class":107},[101,5951,2820],{"class":5204},[101,5953,5954],{"class":111},");",[101,5956,5957],{"class":170},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[101,5959,5960,5962,5964],{"class":103,"line":1181},[101,5961,115],{"class":107},[101,5963,1960],{"class":1950},[101,5965,5966],{"class":111},"() \n",[101,5968,5969],{"class":103,"line":1187},[101,5970,1533],{"class":111},[101,5972,5973,5975,5977,5979,5981],{"class":103,"line":1201},[101,5974,1972],{"class":107},[101,5976,1385],{"class":111},[101,5978,157],{"class":107},[101,5980,557],{"class":160},[101,5982,1277],{"class":111},[101,5984,5985,5987,5989,5991,5993],{"class":103,"line":1207},[101,5986,1972],{"class":107},[101,5988,2820],{"class":111},[101,5990,157],{"class":107},[101,5992,811],{"class":160},[101,5994,1277],{"class":111},[101,5996,5997,5999,6001,6004,6007,6009],{"class":103,"line":1298},[101,5998,1538],{"class":111},[101,6000,1155],{"class":107},[101,6002,6003],{"class":1950},"max",[101,6005,6006],{"class":111},"(a,b)",[101,6008,1155],{"class":107},[101,6010,1178],{"class":111},[101,6012,6013],{"class":103,"line":1304},[101,6014,1552],{"class":111},[101,6016,6017,6019,6021,6023,6025,6027,6029,6031,6033],{"class":103,"line":1316},[101,6018,115],{"class":107},[101,6020,5939],{"class":1950},[101,6022,112],{"class":111},[101,6024,115],{"class":107},[101,6026,1385],{"class":5204},[101,6028,489],{"class":111},[101,6030,115],{"class":107},[101,6032,2820],{"class":5204},[101,6034,118],{"class":111},[101,6036,6037],{"class":103,"line":1599},[101,6038,1533],{"class":111},[101,6040,6041,6043,6045,6047,6049,6051,6053,6055],{"class":103,"line":1604},[101,6042,4077],{"class":107},[101,6044,1385],{"class":111},[101,6046,1071],{"class":107},[101,6048,374],{"class":111},[101,6050,1097],{"class":107},[101,6052,14],{"class":111},[101,6054,970],{"class":107},[101,6056,6057],{"class":111},"b;\n",[101,6059,6060],{"class":103,"line":1610},[101,6061,1552],{"class":111},[43,6063,6065],{"id":6064},"_26函数的分文件编写","2.6函数的分文件编写",[10,6067,6068],{},"4个步骤：",[1118,6070,6071,6074,6077,6080],{},[58,6072,6073],{},"1.创建后缀名为.h的头文件",[58,6075,6076],{},"2.创建后缀名为.cpp的源文件",[58,6078,6079],{},"3.在头文件中写函数的定义",[58,6081,6082],{},"4.在源文件中写函数的定义\n示例：",[10,6084,6085],{},"头文件：swap.h",[92,6087,6089],{"className":94,"code":6088,"language":96,"meta":20,"style":20},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[98,6090,6091,6097,6107,6111],{"__ignoreMap":20},[101,6092,6093,6095],{"class":103,"line":104},[101,6094,1936],{"class":107},[101,6096,1939],{"class":216},[101,6098,6099,6101,6103,6105],{"class":103,"line":21},[101,6100,1944],{"class":107},[101,6102,1947],{"class":107},[101,6104,1951],{"class":1950},[101,6106,1277],{"class":111},[101,6108,6109],{"class":103,"line":1166},[101,6110,5927],{"class":170},[101,6112,6113,6115,6117,6119,6121,6123,6125,6127,6129],{"class":103,"line":1181},[101,6114,5352],{"class":107},[101,6116,5355],{"class":1950},[101,6118,112],{"class":111},[101,6120,115],{"class":107},[101,6122,1385],{"class":5204},[101,6124,489],{"class":111},[101,6126,115],{"class":107},[101,6128,2820],{"class":5204},[101,6130,2706],{"class":111},[10,6132,6133],{},"源文件：swap.cpp",[92,6135,6137],{"className":94,"code":6136,"language":96,"meta":20,"style":20},"#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",[98,6138,6139,6146,6151,6171,6175,6186,6195,6204,6221,6238],{"__ignoreMap":20},[101,6140,6141,6143],{"class":103,"line":104},[101,6142,1936],{"class":107},[101,6144,6145],{"class":216}," \"swap.h\"\n",[101,6147,6148],{"class":103,"line":21},[101,6149,6150],{"class":170},"\u002F\u002F函数的定义\n",[101,6152,6153,6155,6157,6159,6161,6163,6165,6167,6169],{"class":103,"line":1166},[101,6154,5352],{"class":107},[101,6156,5355],{"class":1950},[101,6158,112],{"class":111},[101,6160,115],{"class":107},[101,6162,1385],{"class":5204},[101,6164,489],{"class":111},[101,6166,115],{"class":107},[101,6168,2820],{"class":5204},[101,6170,118],{"class":111},[101,6172,6173],{"class":103,"line":1181},[101,6174,1533],{"class":111},[101,6176,6177,6179,6181,6183],{"class":103,"line":1187},[101,6178,1972],{"class":107},[101,6180,4242],{"class":111},[101,6182,157],{"class":107},[101,6184,6185],{"class":111},"a;\n",[101,6187,6188,6191,6193],{"class":103,"line":1201},[101,6189,6190],{"class":111},"    a",[101,6192,157],{"class":107},[101,6194,6057],{"class":111},[101,6196,6197,6200,6202],{"class":103,"line":1207},[101,6198,6199],{"class":111},"    b",[101,6201,157],{"class":107},[101,6203,4267],{"class":111},[101,6205,6206,6208,6210,6213,6215,6217,6219],{"class":103,"line":1298},[101,6207,1538],{"class":111},[101,6209,1155],{"class":107},[101,6211,6212],{"class":216},"\"a=\"",[101,6214,1155],{"class":107},[101,6216,14],{"class":111},[101,6218,1155],{"class":107},[101,6220,1178],{"class":111},[101,6222,6223,6225,6227,6230,6232,6234,6236],{"class":103,"line":1304},[101,6224,1538],{"class":111},[101,6226,1155],{"class":107},[101,6228,6229],{"class":216},"\"b=\"",[101,6231,1155],{"class":107},[101,6233,374],{"class":111},[101,6235,1155],{"class":107},[101,6237,1178],{"class":111},[101,6239,6240],{"class":103,"line":1316},[101,6241,1552],{"class":111},[5114,6243,6244],{},"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":20,"searchDepth":21,"depth":21,"links":6246},[6247,6248,6249,6250,6251,6252],{"id":5160,"depth":21,"text":5161},{"id":5249,"depth":21,"text":5250},{"id":5332,"depth":21,"text":5333},{"id":5558,"depth":21,"text":5559},{"id":5907,"depth":21,"text":5908},{"id":6064,"depth":21,"text":6065},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5152,"description":20},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6259,"title":6260,"body":6261,"description":6268,"extension":24,"meta":7673,"navigation":27,"path":7674,"seo":7675,"stem":7676,"__hash__":7677},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6262,"toc":7663},[6263,6266,6269,6273,6435,6439,6442,6445,6448,6451,6591,6595,6598,6601,6604,6669,6673,6678,6745,6748,6752,6755,6766,6771,6791,6794,6799,6818,6821,6825,6844,6847,6851,7086,7090,7093,7096,7099,7261,7264,7268,7271,7277,7660],[39,6264,6260],{"id":6265},"_3指针",[10,6267,6268],{},"通过指针保存一个地址，指针就是个地址",[43,6270,6272],{"id":6271},"_31定义指针","3.1定义指针",[92,6274,6276],{"className":94,"code":6275,"language":96,"meta":20,"style":20},"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",[98,6277,6278,6286,6290,6295,6307,6312,6320,6330,6348,6368,6372,6377,6382,6387,6401,6417,6431],{"__ignoreMap":20},[101,6279,6280,6282,6284],{"class":103,"line":104},[101,6281,115],{"class":107},[101,6283,1960],{"class":1950},[101,6285,1963],{"class":111},[101,6287,6288],{"class":103,"line":21},[101,6289,1533],{"class":111},[101,6291,6292],{"class":103,"line":1166},[101,6293,6294],{"class":170},"    \u002F\u002F1.定义指针\n",[101,6296,6297,6299,6301,6303,6305],{"class":103,"line":1181},[101,6298,1972],{"class":107},[101,6300,1385],{"class":111},[101,6302,157],{"class":107},[101,6304,557],{"class":160},[101,6306,1277],{"class":111},[101,6308,6309],{"class":103,"line":1187},[101,6310,6311],{"class":170},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[101,6313,6314,6317],{"class":103,"line":1201},[101,6315,6316],{"class":107},"    int*",[101,6318,6319],{"class":111},"p;\n",[101,6321,6322,6325,6328],{"class":103,"line":1207},[101,6323,6324],{"class":111},"    p",[101,6326,6327],{"class":107},"=&",[101,6329,6185],{"class":111},[101,6331,6332,6334,6336,6339,6342,6344,6346],{"class":103,"line":1298},[101,6333,1538],{"class":111},[101,6335,1155],{"class":107},[101,6337,6338],{"class":216},"\"a的地址为：\"",[101,6340,6341],{"class":107},"\u003C\u003C&",[101,6343,14],{"class":111},[101,6345,1155],{"class":107},[101,6347,1178],{"class":111},[101,6349,6350,6352,6354,6357,6359,6361,6363,6365],{"class":103,"line":1304},[101,6351,1538],{"class":111},[101,6353,1155],{"class":107},[101,6355,6356],{"class":216},"\"指针p为：\"",[101,6358,1155],{"class":107},[101,6360,10],{"class":111},[101,6362,1155],{"class":107},[101,6364,1225],{"class":111},[101,6366,6367],{"class":170},"\u002F\u002F指针p表示的就是a的地址\n",[101,6369,6370],{"class":103,"line":1316},[101,6371,2387],{"emptyLinePlaceholder":27},[101,6373,6374],{"class":103,"line":1599},[101,6375,6376],{"class":170},"    \u002F\u002F2.使用指针\n",[101,6378,6379],{"class":103,"line":1604},[101,6380,6381],{"class":170},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[101,6383,6384],{"class":103,"line":1610},[101,6385,6386],{"class":170},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[101,6388,6389,6392,6394,6396,6399],{"class":103,"line":1615},[101,6390,6391],{"class":107},"    *",[101,6393,10],{"class":111},[101,6395,157],{"class":107},[101,6397,6398],{"class":160},"1000",[101,6400,1277],{"class":111},[101,6402,6403,6405,6408,6410,6412,6414],{"class":103,"line":1629},[101,6404,1538],{"class":111},[101,6406,6407],{"class":107},"\u003C\u003C*",[101,6409,10],{"class":111},[101,6411,1155],{"class":107},[101,6413,1225],{"class":111},[101,6415,6416],{"class":170},"\u002F\u002F1000\n",[101,6418,6419,6421,6423,6425,6427,6429],{"class":103,"line":1634},[101,6420,1538],{"class":111},[101,6422,1155],{"class":107},[101,6424,14],{"class":111},[101,6426,1155],{"class":107},[101,6428,1225],{"class":111},[101,6430,6416],{"class":170},[101,6432,6433],{"class":103,"line":1640},[101,6434,1552],{"class":111},[43,6436,6438],{"id":6437},"_32指针所占的内存空间","3.2指针所占的内存空间",[10,6440,6441],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[10,6443,6444],{},"在32位操作系统下：占用4个字节空间",[10,6446,6447],{},"在64位操作系统下：占用8个字节空间",[10,6449,6450],{},"上方是不管啥数据类型的",[92,6452,6454],{"className":94,"code":6453,"language":96,"meta":20,"style":20},"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",[98,6455,6456,6464,6468,6473,6485,6490,6495,6500,6513,6535,6561,6587],{"__ignoreMap":20},[101,6457,6458,6460,6462],{"class":103,"line":104},[101,6459,115],{"class":107},[101,6461,1960],{"class":1950},[101,6463,1963],{"class":111},[101,6465,6466],{"class":103,"line":21},[101,6467,1533],{"class":111},[101,6469,6470],{"class":103,"line":1166},[101,6471,6472],{"class":170},"    \u002F\u002F指针所占内存空间\n",[101,6474,6475,6477,6479,6481,6483],{"class":103,"line":1181},[101,6476,1972],{"class":107},[101,6478,1385],{"class":111},[101,6480,157],{"class":107},[101,6482,557],{"class":160},[101,6484,1277],{"class":111},[101,6486,6487],{"class":103,"line":1187},[101,6488,6489],{"class":170},"    \u002F\u002Fint *p;\n",[101,6491,6492],{"class":103,"line":1201},[101,6493,6494],{"class":170},"    \u002F\u002Fp=&a;\n",[101,6496,6497],{"class":103,"line":1207},[101,6498,6499],{"class":170},"    \u002F\u002F上述可以写为以下：\n",[101,6501,6502,6504,6507,6509,6511],{"class":103,"line":1298},[101,6503,1972],{"class":107},[101,6505,6506],{"class":107}," *",[101,6508,10],{"class":111},[101,6510,6327],{"class":107},[101,6512,6185],{"class":111},[101,6514,6515,6518,6520,6523,6525,6528,6530,6532],{"class":103,"line":1304},[101,6516,6517],{"class":111},"    cout ",[101,6519,1155],{"class":107},[101,6521,6522],{"class":216},"\"sizeof(int *)\"",[101,6524,1359],{"class":107},[101,6526,6527],{"class":111},"(p)",[101,6529,1155],{"class":107},[101,6531,1225],{"class":111},[101,6533,6534],{"class":170},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[101,6536,6537,6539,6541,6543,6545,6547,6549,6551,6553,6555,6558],{"class":103,"line":1316},[101,6538,6517],{"class":111},[101,6540,1155],{"class":107},[101,6542,6522],{"class":216},[101,6544,1359],{"class":107},[101,6546,112],{"class":111},[101,6548,115],{"class":107},[101,6550,6506],{"class":107},[101,6552,540],{"class":111},[101,6554,1155],{"class":107},[101,6556,6557],{"class":111},"endl",[101,6559,6560],{"class":170},"  \u002F\u002F4字节(32位的话)\n",[101,6562,6563,6565,6567,6570,6572,6574,6576,6578,6580,6582,6584],{"class":103,"line":1599},[101,6564,6517],{"class":111},[101,6566,1155],{"class":107},[101,6568,6569],{"class":216},"\"sizeof(char *)\"",[101,6571,1359],{"class":107},[101,6573,112],{"class":111},[101,6575,208],{"class":107},[101,6577,6506],{"class":107},[101,6579,540],{"class":111},[101,6581,1155],{"class":107},[101,6583,1225],{"class":111},[101,6585,6586],{"class":170}," \u002F\u002F4字节(32位的话)\n",[101,6588,6589],{"class":103,"line":1604},[101,6590,1552],{"class":111},[43,6592,6594],{"id":6593},"_33空指针","3.3空指针",[10,6596,6597],{},"空指针：指针变量指向内存中编号为0的空间",[10,6599,6600],{},"用途：初始化指针变量",[10,6602,6603],{},"注意：空指针指向的内存是不可以访问的",[92,6605,6607],{"className":94,"code":6606,"language":96,"meta":20,"style":20},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[98,6608,6609,6617,6621,6626,6640,6645,6660,6665],{"__ignoreMap":20},[101,6610,6611,6613,6615],{"class":103,"line":104},[101,6612,115],{"class":107},[101,6614,1960],{"class":1950},[101,6616,1963],{"class":111},[101,6618,6619],{"class":103,"line":21},[101,6620,1533],{"class":111},[101,6622,6623],{"class":103,"line":1166},[101,6624,6625],{"class":170},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[101,6627,6628,6630,6632,6634,6636,6638],{"class":103,"line":1181},[101,6629,1972],{"class":107},[101,6631,6506],{"class":107},[101,6633,10],{"class":111},[101,6635,157],{"class":107},[101,6637,2379],{"class":160},[101,6639,1277],{"class":111},[101,6641,6642],{"class":103,"line":1187},[101,6643,6644],{"class":170},"    \u002F\u002F2.空指针不能进行访问\n",[101,6646,6647,6649,6651,6653,6655,6657],{"class":103,"line":1201},[101,6648,6391],{"class":107},[101,6650,10],{"class":111},[101,6652,157],{"class":107},[101,6654,422],{"class":160},[101,6656,167],{"class":111},[101,6658,6659],{"class":170},"\u002F\u002F直接报错，压根不能访问\n",[101,6661,6662],{"class":103,"line":1207},[101,6663,6664],{"class":170},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[101,6666,6667],{"class":103,"line":1298},[101,6668,1552],{"class":111},[43,6670,6672],{"id":6671},"_34野指针","3.4野指针",[10,6674,6675],{},[261,6676,6677],{},"指针变量指向非法的内存空间",[92,6679,6681],{"className":94,"code":6680,"language":96,"meta":20,"style":20},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[98,6682,6683,6691,6695,6724,6729,6741],{"__ignoreMap":20},[101,6684,6685,6687,6689],{"class":103,"line":104},[101,6686,115],{"class":107},[101,6688,1960],{"class":1950},[101,6690,1963],{"class":111},[101,6692,6693],{"class":103,"line":21},[101,6694,1533],{"class":111},[101,6696,6697,6699,6701,6703,6705,6707,6709,6711,6713,6716,6719,6721],{"class":103,"line":1166},[101,6698,1972],{"class":107},[101,6700,6506],{"class":107},[101,6702,10],{"class":111},[101,6704,157],{"class":107},[101,6706,112],{"class":111},[101,6708,115],{"class":107},[101,6710,6506],{"class":107},[101,6712,540],{"class":111},[101,6714,6715],{"class":107},"0x",[101,6717,6718],{"class":160},"1100",[101,6720,167],{"class":111},[101,6722,6723],{"class":170}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[101,6725,6726],{"class":103,"line":1181},[101,6727,6728],{"class":170},"    \u002F\u002F访问野指针报错\n",[101,6730,6731,6733,6735,6737,6739],{"class":103,"line":1187},[101,6732,1538],{"class":111},[101,6734,6407],{"class":107},[101,6736,10],{"class":111},[101,6738,1155],{"class":107},[101,6740,1178],{"class":111},[101,6742,6743],{"class":103,"line":1201},[101,6744,1552],{"class":111},[10,6746,6747],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[43,6749,6751],{"id":6750},"_35const修饰指针","3.5const修饰指针",[10,6753,6754],{},"三种情况：",[1118,6756,6757,6760,6763],{},[58,6758,6759],{},"const修饰指针 常量指针",[58,6761,6762],{},"const修饰常量 指针常量",[58,6764,6765],{},"const即修饰指针，又修饰常量",[55,6767,6768],{},[58,6769,6770],{},"常量指针",[92,6772,6774],{"className":94,"code":6773,"language":96,"meta":20,"style":20},"const int *p=&a;\n",[98,6775,6776],{"__ignoreMap":20},[101,6777,6778,6781,6783,6785,6787,6789],{"class":103,"line":104},[101,6779,6780],{"class":107},"const",[101,6782,2369],{"class":107},[101,6784,6506],{"class":107},[101,6786,10],{"class":111},[101,6788,6327],{"class":107},[101,6790,6185],{"class":111},[10,6792,6793],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[55,6795,6796],{"start":21},[58,6797,6798],{},"指针常量",[92,6800,6802],{"className":94,"code":6801,"language":96,"meta":20,"style":20},"int *const p=&a;\n",[98,6803,6804],{"__ignoreMap":20},[101,6805,6806,6808,6811,6814,6816],{"class":103,"line":104},[101,6807,115],{"class":107},[101,6809,6810],{"class":107}," *const",[101,6812,6813],{"class":111}," p",[101,6815,6327],{"class":107},[101,6817,6185],{"class":111},[10,6819,6820],{},"指针的指向不可以改，指针指向的值可以改",[55,6822,6823],{"start":1166},[58,6824,6765],{},[92,6826,6828],{"className":94,"code":6827,"language":96,"meta":20,"style":20},"const int *const p=&a;\n",[98,6829,6830],{"__ignoreMap":20},[101,6831,6832,6834,6836,6838,6840,6842],{"class":103,"line":104},[101,6833,6780],{"class":107},[101,6835,2369],{"class":107},[101,6837,6810],{"class":107},[101,6839,6813],{"class":111},[101,6841,6327],{"class":107},[101,6843,6185],{"class":111},[10,6845,6846],{},"指针的指向和指针指向的值都不可以改变",[43,6848,6850],{"id":6849},"_36指针和数组","3.6指针和数组",[92,6852,6854],{"className":94,"code":6853,"language":96,"meta":20,"style":20},"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",[98,6855,6856,6864,6868,6873,6927,6948,6964,6980,6991,7008,7013,7027,7053,7057,7069,7078,7082],{"__ignoreMap":20},[101,6857,6858,6860,6862],{"class":103,"line":104},[101,6859,115],{"class":107},[101,6861,1960],{"class":1950},[101,6863,1963],{"class":111},[101,6865,6866],{"class":103,"line":21},[101,6867,1533],{"class":111},[101,6869,6870],{"class":103,"line":1166},[101,6871,6872],{"class":170},"    \u002F\u002F利用指针访问数组中的元素\n",[101,6874,6875,6877,6879,6881,6883,6885,6887,6889,6891,6893,6895,6897,6899,6901,6903,6905,6907,6909,6911,6913,6915,6917,6919,6921,6923,6925],{"class":103,"line":1181},[101,6876,1972],{"class":107},[101,6878,3949],{"class":111},[101,6880,557],{"class":160},[101,6882,1051],{"class":111},[101,6884,157],{"class":107},[101,6886,1007],{"class":111},[101,6888,329],{"class":160},[101,6890,489],{"class":111},[101,6892,189],{"class":160},[101,6894,489],{"class":111},[101,6896,183],{"class":160},[101,6898,489],{"class":111},[101,6900,404],{"class":160},[101,6902,489],{"class":111},[101,6904,430],{"class":160},[101,6906,489],{"class":111},[101,6908,455],{"class":160},[101,6910,489],{"class":111},[101,6912,480],{"class":160},[101,6914,489],{"class":111},[101,6916,506],{"class":160},[101,6918,489],{"class":111},[101,6920,531],{"class":160},[101,6922,489],{"class":111},[101,6924,557],{"class":160},[101,6926,3982],{"class":111},[101,6928,6929,6931,6933,6936,6938,6940,6942,6944,6946],{"class":103,"line":1187},[101,6930,1538],{"class":111},[101,6932,1155],{"class":107},[101,6934,6935],{"class":216},"\"数组的第一个元素为：\"",[101,6937,1155],{"class":107},[101,6939,3893],{"class":111},[101,6941,303],{"class":160},[101,6943,1051],{"class":111},[101,6945,1155],{"class":107},[101,6947,1178],{"class":111},[101,6949,6950,6952,6954,6956,6958,6961],{"class":103,"line":1201},[101,6951,1972],{"class":107},[101,6953,6506],{"class":107},[101,6955,10],{"class":111},[101,6957,157],{"class":107},[101,6959,6960],{"class":111},"arr;",[101,6962,6963],{"class":170},"\u002F\u002F注意数才要加取地址符号&\n",[101,6965,6966,6968,6970,6972,6974,6976,6978],{"class":103,"line":1207},[101,6967,1538],{"class":111},[101,6969,1155],{"class":107},[101,6971,6935],{"class":216},[101,6973,6407],{"class":107},[101,6975,10],{"class":111},[101,6977,1155],{"class":107},[101,6979,1178],{"class":111},[101,6981,6982,6984,6986,6988],{"class":103,"line":1298},[101,6983,6324],{"class":111},[101,6985,2279],{"class":107},[101,6987,167],{"class":111},[101,6989,6990],{"class":170}," \u002F\u002F让指针向后偏移4个字节\n",[101,6992,6993,6995,6997,7000,7002,7004,7006],{"class":103,"line":1304},[101,6994,1538],{"class":111},[101,6996,1155],{"class":107},[101,6998,6999],{"class":216},"\"数组的第二个元素为：\"",[101,7001,6407],{"class":107},[101,7003,10],{"class":111},[101,7005,1155],{"class":107},[101,7007,1178],{"class":111},[101,7009,7010],{"class":103,"line":1316},[101,7011,7012],{"class":170},"    \u002F\u002F利用指针遍历数组\n",[101,7014,7015,7017,7019,7022,7024],{"class":103,"line":1599},[101,7016,1972],{"class":107},[101,7018,6506],{"class":107},[101,7020,7021],{"class":111},"p2",[101,7023,157],{"class":107},[101,7025,7026],{"class":111},"arr;\n",[101,7028,7029,7031,7033,7035,7037,7039,7041,7043,7045,7047,7049,7051],{"class":103,"line":1604},[101,7030,3188],{"class":107},[101,7032,1645],{"class":111},[101,7034,115],{"class":107},[101,7036,3019],{"class":111},[101,7038,157],{"class":107},[101,7040,303],{"class":160},[101,7042,3026],{"class":111},[101,7044,1021],{"class":107},[101,7046,557],{"class":160},[101,7048,3026],{"class":111},[101,7050,2279],{"class":107},[101,7052,118],{"class":111},[101,7054,7055],{"class":103,"line":1610},[101,7056,2017],{"class":111},[101,7058,7059,7061,7063,7065,7067],{"class":103,"line":1615},[101,7060,3438],{"class":111},[101,7062,6407],{"class":107},[101,7064,7021],{"class":111},[101,7066,1155],{"class":107},[101,7068,1178],{"class":111},[101,7070,7071,7074,7076],{"class":103,"line":1629},[101,7072,7073],{"class":111},"        p2",[101,7075,2279],{"class":107},[101,7077,1277],{"class":111},[101,7079,7080],{"class":103,"line":1634},[101,7081,2174],{"class":111},[101,7083,7084],{"class":103,"line":1640},[101,7085,1552],{"class":111},[43,7087,7089],{"id":7088},"_37指针和函数","3.7指针和函数",[10,7091,7092],{},"利用指针做函数参数，可以修改实参的值",[10,7094,7095],{},"值传递：只改变形参，不改变实参",[10,7097,7098],{},"地址传递：",[92,7100,7102],{"className":94,"code":7101,"language":96,"meta":20,"style":20},"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",[98,7103,7104,7129,7133,7145,7156,7166,7170,7178,7182,7194,7206,7211,7227,7242,7257],{"__ignoreMap":20},[101,7105,7106,7108,7110,7112,7114,7116,7119,7121,7123,7125,7127],{"class":103,"line":104},[101,7107,5352],{"class":107},[101,7109,5355],{"class":1950},[101,7111,112],{"class":111},[101,7113,115],{"class":107},[101,7115,6506],{"class":107},[101,7117,7118],{"class":5204},"p1",[101,7120,489],{"class":111},[101,7122,115],{"class":107},[101,7124,6506],{"class":107},[101,7126,7021],{"class":5204},[101,7128,118],{"class":111},[101,7130,7131],{"class":103,"line":21},[101,7132,1533],{"class":111},[101,7134,7135,7137,7139,7142],{"class":103,"line":1166},[101,7136,1972],{"class":107},[101,7138,4242],{"class":111},[101,7140,7141],{"class":107},"=*",[101,7143,7144],{"class":111},"p1;\n",[101,7146,7147,7149,7151,7153],{"class":103,"line":1181},[101,7148,6391],{"class":107},[101,7150,7118],{"class":111},[101,7152,7141],{"class":107},[101,7154,7155],{"class":111},"p2;\n",[101,7157,7158,7160,7162,7164],{"class":103,"line":1187},[101,7159,6391],{"class":107},[101,7161,7021],{"class":111},[101,7163,157],{"class":107},[101,7165,4267],{"class":111},[101,7167,7168],{"class":103,"line":1201},[101,7169,1552],{"class":111},[101,7171,7172,7174,7176],{"class":103,"line":1207},[101,7173,115],{"class":107},[101,7175,1960],{"class":1950},[101,7177,1963],{"class":111},[101,7179,7180],{"class":103,"line":1298},[101,7181,1533],{"class":111},[101,7183,7184,7186,7188,7190,7192],{"class":103,"line":1304},[101,7185,1972],{"class":107},[101,7187,1385],{"class":111},[101,7189,157],{"class":107},[101,7191,557],{"class":160},[101,7193,1277],{"class":111},[101,7195,7196,7198,7200,7202,7204],{"class":103,"line":1316},[101,7197,1972],{"class":107},[101,7199,2820],{"class":111},[101,7201,157],{"class":107},[101,7203,811],{"class":160},[101,7205,1277],{"class":111},[101,7207,7208],{"class":103,"line":1599},[101,7209,7210],{"class":170},"    \u002F\u002F地址传递\n",[101,7212,7213,7215,7217,7219,7222,7224],{"class":103,"line":1604},[101,7214,5549],{"class":1950},[101,7216,112],{"class":111},[101,7218,464],{"class":107},[101,7220,7221],{"class":111},"a,",[101,7223,464],{"class":107},[101,7225,7226],{"class":111},"b);\n",[101,7228,7229,7231,7233,7235,7237,7239],{"class":103,"line":1610},[101,7230,1538],{"class":111},[101,7232,1155],{"class":107},[101,7234,14],{"class":111},[101,7236,1155],{"class":107},[101,7238,1225],{"class":111},[101,7240,7241],{"class":170},"\u002F\u002F20\n",[101,7243,7244,7246,7248,7250,7252,7254],{"class":103,"line":1615},[101,7245,1538],{"class":111},[101,7247,1155],{"class":107},[101,7249,374],{"class":111},[101,7251,1155],{"class":107},[101,7253,1225],{"class":111},[101,7255,7256],{"class":170},"\u002F\u002F10\n",[101,7258,7259],{"class":103,"line":1629},[101,7260,1552],{"class":111},[10,7262,7263],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[43,7265,7267],{"id":7266},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[10,7269,7270],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[10,7272,7273,7274,7276],{},"例如数组：int arr",[101,7275,557],{},"={4,3,6,9,1,2,10,8,7,5}",[92,7278,7280],{"className":94,"code":7279,"language":96,"meta":20,"style":20},"#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",[98,7281,7282,7288,7298,7322,7326,7357,7361,7395,7399,7417,7421,7432,7447,7462,7466,7470,7474,7478,7482,7490,7494,7499,7553,7565,7577,7582,7590,7594,7599,7624,7628,7643,7652,7656],{"__ignoreMap":20},[101,7283,7284,7286],{"class":103,"line":104},[101,7285,1936],{"class":107},[101,7287,1939],{"class":216},[101,7289,7290,7292,7294,7296],{"class":103,"line":21},[101,7291,1944],{"class":107},[101,7293,1947],{"class":107},[101,7295,1951],{"class":1950},[101,7297,1277],{"class":111},[101,7299,7300,7302,7305,7307,7309,7311,7313,7315,7317,7320],{"class":103,"line":1166},[101,7301,5352],{"class":107},[101,7303,7304],{"class":1950}," bubbleSort",[101,7306,112],{"class":111},[101,7308,115],{"class":107},[101,7310,6506],{"class":107},[101,7312,10],{"class":5204},[101,7314,489],{"class":111},[101,7316,115],{"class":107},[101,7318,7319],{"class":5204}," len",[101,7321,118],{"class":111},[101,7323,7324],{"class":103,"line":1181},[101,7325,1533],{"class":111},[101,7327,7328,7330,7332,7334,7336,7338,7340,7342,7344,7347,7349,7351,7353,7355],{"class":103,"line":1187},[101,7329,3188],{"class":107},[101,7331,112],{"class":111},[101,7333,115],{"class":107},[101,7335,3019],{"class":111},[101,7337,157],{"class":107},[101,7339,303],{"class":160},[101,7341,3026],{"class":111},[101,7343,1021],{"class":107},[101,7345,7346],{"class":111},"len",[101,7348,643],{"class":107},[101,7350,329],{"class":160},[101,7352,3026],{"class":111},[101,7354,2279],{"class":107},[101,7356,118],{"class":111},[101,7358,7359],{"class":103,"line":1201},[101,7360,2017],{"class":111},[101,7362,7363,7365,7367,7369,7371,7373,7375,7377,7379,7381,7383,7385,7387,7389,7391,7393],{"class":103,"line":1207},[101,7364,3390],{"class":107},[101,7366,112],{"class":111},[101,7368,115],{"class":107},[101,7370,3397],{"class":111},[101,7372,157],{"class":107},[101,7374,303],{"class":160},[101,7376,3404],{"class":111},[101,7378,1021],{"class":107},[101,7380,7346],{"class":111},[101,7382,643],{"class":107},[101,7384,552],{"class":111},[101,7386,643],{"class":107},[101,7388,329],{"class":160},[101,7390,3404],{"class":111},[101,7392,2279],{"class":107},[101,7394,118],{"class":111},[101,7396,7397],{"class":103,"line":1298},[101,7398,2497],{"class":111},[101,7400,7401,7403,7406,7408,7411,7413,7415],{"class":103,"line":1304},[101,7402,4629],{"class":107},[101,7404,7405],{"class":111},"(p[j]",[101,7407,1071],{"class":107},[101,7409,7410],{"class":111},"p[j",[101,7412,592],{"class":107},[101,7414,329],{"class":160},[101,7416,4644],{"class":111},[101,7418,7419],{"class":103,"line":1316},[101,7420,4649],{"class":111},[101,7422,7423,7425,7427,7429],{"class":103,"line":1599},[101,7424,4654],{"class":107},[101,7426,4242],{"class":111},[101,7428,157],{"class":107},[101,7430,7431],{"class":111},"p[j];\n",[101,7433,7434,7437,7439,7441,7443,7445],{"class":103,"line":1604},[101,7435,7436],{"class":111},"                p[j]",[101,7438,157],{"class":107},[101,7440,7410],{"class":111},[101,7442,592],{"class":107},[101,7444,329],{"class":160},[101,7446,4677],{"class":111},[101,7448,7449,7452,7454,7456,7458,7460],{"class":103,"line":1610},[101,7450,7451],{"class":111},"                p[j",[101,7453,592],{"class":107},[101,7455,329],{"class":160},[101,7457,1051],{"class":111},[101,7459,157],{"class":107},[101,7461,4267],{"class":111},[101,7463,7464],{"class":103,"line":1615},[101,7465,4697],{"class":111},[101,7467,7468],{"class":103,"line":1629},[101,7469,2516],{"class":111},[101,7471,7472],{"class":103,"line":1634},[101,7473,2174],{"class":111},[101,7475,7476],{"class":103,"line":1640},[101,7477,1552],{"class":111},[101,7479,7480],{"class":103,"line":1661},[101,7481,2387],{"emptyLinePlaceholder":27},[101,7483,7484,7486,7488],{"class":103,"line":1666},[101,7485,115],{"class":107},[101,7487,1960],{"class":1950},[101,7489,1963],{"class":111},[101,7491,7492],{"class":103,"line":1680},[101,7493,1533],{"class":111},[101,7495,7496],{"class":103,"line":1685},[101,7497,7498],{"class":170},"    \u002F\u002F 1.创建数组\n",[101,7500,7501,7503,7505,7507,7509,7511,7513,7515,7517,7519,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543,7545,7547,7549,7551],{"class":103,"line":1714},[101,7502,1972],{"class":107},[101,7504,3949],{"class":111},[101,7506,557],{"class":160},[101,7508,1051],{"class":111},[101,7510,157],{"class":107},[101,7512,1007],{"class":111},[101,7514,404],{"class":160},[101,7516,489],{"class":111},[101,7518,183],{"class":160},[101,7520,489],{"class":111},[101,7522,455],{"class":160},[101,7524,489],{"class":111},[101,7526,531],{"class":160},[101,7528,489],{"class":111},[101,7530,329],{"class":160},[101,7532,489],{"class":111},[101,7534,189],{"class":160},[101,7536,489],{"class":111},[101,7538,557],{"class":160},[101,7540,489],{"class":111},[101,7542,506],{"class":160},[101,7544,489],{"class":111},[101,7546,480],{"class":160},[101,7548,489],{"class":111},[101,7550,430],{"class":160},[101,7552,3982],{"class":111},[101,7554,7555,7557,7559,7561,7563],{"class":103,"line":1719},[101,7556,1972],{"class":107},[101,7558,7319],{"class":111},[101,7560,157],{"class":107},[101,7562,557],{"class":160},[101,7564,1277],{"class":111},[101,7566,7567,7569,7571,7573,7575],{"class":103,"line":1736},[101,7568,1972],{"class":107},[101,7570,6506],{"class":107},[101,7572,10],{"class":111},[101,7574,157],{"class":107},[101,7576,7026],{"class":111},[101,7578,7579],{"class":103,"line":1741},[101,7580,7581],{"class":170},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[101,7583,7584,7587],{"class":103,"line":1746},[101,7585,7586],{"class":1950},"    bubbleSort",[101,7588,7589],{"class":111},"(p,len);\n",[101,7591,7592],{"class":103,"line":1751},[101,7593,2387],{"emptyLinePlaceholder":27},[101,7595,7596],{"class":103,"line":1765},[101,7597,7598],{"class":170},"    \u002F\u002F 3.打印排序后的数组\n",[101,7600,7601,7603,7605,7607,7609,7611,7613,7615,7617,7620,7622],{"class":103,"line":1770},[101,7602,3188],{"class":107},[101,7604,1645],{"class":111},[101,7606,115],{"class":107},[101,7608,3019],{"class":111},[101,7610,157],{"class":107},[101,7612,303],{"class":160},[101,7614,3201],{"class":111},[101,7616,1021],{"class":107},[101,7618,7619],{"class":111},"len; i",[101,7621,2279],{"class":107},[101,7623,118],{"class":111},[101,7625,7626],{"class":103,"line":2564},[101,7627,2017],{"class":111},[101,7629,7630,7632,7634,7636,7638,7641],{"class":103,"line":2578},[101,7631,3438],{"class":111},[101,7633,6407],{"class":107},[101,7635,10],{"class":111},[101,7637,1155],{"class":107},[101,7639,7640],{"class":216},"\"\"",[101,7642,1277],{"class":111},[101,7644,7645,7648,7650],{"class":103,"line":2586},[101,7646,7647],{"class":111},"        p",[101,7649,2279],{"class":107},[101,7651,1277],{"class":111},[101,7653,7654],{"class":103,"line":2591},[101,7655,2174],{"class":111},[101,7657,7658],{"class":103,"line":2597},[101,7659,1552],{"class":111},[5114,7661,7662],{},"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":20,"searchDepth":21,"depth":21,"links":7664},[7665,7666,7667,7668,7669,7670,7671,7672],{"id":6271,"depth":21,"text":6272},{"id":6437,"depth":21,"text":6438},{"id":6593,"depth":21,"text":6594},{"id":6671,"depth":21,"text":6672},{"id":6750,"depth":21,"text":6751},{"id":6849,"depth":21,"text":6850},{"id":7088,"depth":21,"text":7089},{"id":7266,"depth":21,"text":7267},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6260,"description":6268},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7679,"title":7680,"body":7681,"description":7688,"extension":24,"meta":10662,"navigation":27,"path":10663,"seo":10664,"stem":10665,"__hash__":10666},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7682,"toc":10653},[7683,7686,7689,7693,7696,7699,7710,8048,8051,8055,8058,8065,8320,8324,8327,8330,8485,8489,8492,8495,8701,8705,8708,9011,9014,9022,9026,9029,9180,9182,9193,9250,9254,9259,9916,9924,9927,10021,10024,10644,10650],[39,7684,7680],{"id":7685},"_4结构体",[10,7687,7688],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[43,7690,7692],{"id":7691},"_41结构体定义与使用","4.1结构体定义与使用",[10,7694,7695],{},"语法：struct 结构体名 {结构体成员列表}；",[10,7697,7698],{},"通过结构体创建变量的方式：",[1118,7700,7701,7704,7707],{},[58,7702,7703],{},"struct 结构体名 变量名",[58,7705,7706],{},"struct 结构体名 变量名={成员1值，成员2值...}",[58,7708,7709],{},"定义结构体时顺便创建变量",[92,7711,7713],{"className":94,"code":7712,"language":96,"meta":20,"style":20},"#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",[98,7714,7715,7721,7731,7738,7743,7751,7755,7760,7764,7769,7774,7779,7786,7791,7798,7802,7809,7813,7817,7821,7825,7829,7833,7839,7843,7849,7857,7865,7869,7874,7879,7890,7895,7907,7918,7929,7934,7958,7963,7969,7996,8001,8007,8019,8031,8043],{"__ignoreMap":20},[101,7716,7717,7719],{"class":103,"line":104},[101,7718,1936],{"class":107},[101,7720,1939],{"class":216},[101,7722,7723,7725,7727,7729],{"class":103,"line":21},[101,7724,1944],{"class":107},[101,7726,1947],{"class":107},[101,7728,1951],{"class":1950},[101,7730,1277],{"class":111},[101,7732,7733,7735],{"class":103,"line":1166},[101,7734,1936],{"class":107},[101,7736,7737],{"class":216},"\u003Cstring>\n",[101,7739,7740],{"class":103,"line":1181},[101,7741,7742],{"class":170},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[101,7744,7745,7748],{"class":103,"line":1187},[101,7746,7747],{"class":107},"struct",[101,7749,7750],{"class":1950}," Student\n",[101,7752,7753],{"class":103,"line":1201},[101,7754,1533],{"class":111},[101,7756,7757],{"class":103,"line":1207},[101,7758,7759],{"class":170},"    \u002F\u002F成员列表\n",[101,7761,7762],{"class":103,"line":1298},[101,7763,2387],{"emptyLinePlaceholder":27},[101,7765,7766],{"class":103,"line":1304},[101,7767,7768],{"class":170},"    \u002F\u002F姓名\n",[101,7770,7771],{"class":103,"line":1316},[101,7772,7773],{"class":111},"    string name;\n",[101,7775,7776],{"class":103,"line":1599},[101,7777,7778],{"class":170},"    \u002F\u002F年龄\n",[101,7780,7781,7783],{"class":103,"line":1604},[101,7782,1972],{"class":107},[101,7784,7785],{"class":111}," age;\n",[101,7787,7788],{"class":103,"line":1610},[101,7789,7790],{"class":170},"    \u002F\u002F分数\n",[101,7792,7793,7795],{"class":103,"line":1615},[101,7794,1972],{"class":107},[101,7796,7797],{"class":111}," score;\n",[101,7799,7800],{"class":103,"line":1629},[101,7801,3982],{"class":111},[101,7803,7804,7806],{"class":103,"line":1634},[101,7805,7747],{"class":107},[101,7807,7808],{"class":1950}," School\n",[101,7810,7811],{"class":103,"line":1640},[101,7812,1533],{"class":111},[101,7814,7815],{"class":103,"line":1661},[101,7816,7759],{"class":170},[101,7818,7819],{"class":103,"line":1666},[101,7820,2387],{"emptyLinePlaceholder":27},[101,7822,7823],{"class":103,"line":1680},[101,7824,7768],{"class":170},[101,7826,7827],{"class":103,"line":1685},[101,7828,7773],{"class":111},[101,7830,7831],{"class":103,"line":1714},[101,7832,7778],{"class":170},[101,7834,7835,7837],{"class":103,"line":1719},[101,7836,1972],{"class":107},[101,7838,7785],{"class":111},[101,7840,7841],{"class":103,"line":1736},[101,7842,7790],{"class":170},[101,7844,7845,7847],{"class":103,"line":1741},[101,7846,1972],{"class":107},[101,7848,7797],{"class":111},[101,7850,7851,7854],{"class":103,"line":1746},[101,7852,7853],{"class":111},"} s3;",[101,7855,7856],{"class":170}," \u002F\u002F创建结构体时就创建了变量\n",[101,7858,7859,7861,7863],{"class":103,"line":1751},[101,7860,115],{"class":107},[101,7862,1960],{"class":1950},[101,7864,1963],{"class":111},[101,7866,7867],{"class":103,"line":1765},[101,7868,1533],{"class":111},[101,7870,7871],{"class":103,"line":1770},[101,7872,7873],{"class":170},"    \u002F\u002F2.通过学生类型创建具体学生\n",[101,7875,7876],{"class":103,"line":2564},[101,7877,7878],{"class":170},"    \u002F\u002F2.1 struct Student s1;\n",[101,7880,7881,7884,7887],{"class":103,"line":2578},[101,7882,7883],{"class":107},"    struct",[101,7885,7886],{"class":1950}," Student",[101,7888,7889],{"class":111}," s1;\n",[101,7891,7892],{"class":103,"line":2586},[101,7893,7894],{"class":170},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[101,7896,7897,7900,7902,7905],{"class":103,"line":2591},[101,7898,7899],{"class":111},"    s1.name",[101,7901,157],{"class":107},[101,7903,7904],{"class":216},"\"张三\"",[101,7906,1277],{"class":111},[101,7908,7909,7912,7914,7916],{"class":103,"line":2597},[101,7910,7911],{"class":111},"    s1.age",[101,7913,157],{"class":107},[101,7915,761],{"class":160},[101,7917,1277],{"class":111},[101,7919,7920,7923,7925,7927],{"class":103,"line":2603},[101,7921,7922],{"class":111},"    s1.score",[101,7924,157],{"class":107},[101,7926,365],{"class":160},[101,7928,1277],{"class":111},[101,7930,7931],{"class":103,"line":2608},[101,7932,7933],{"class":170},"    \u002F\u002F输出结果\n",[101,7935,7937,7939,7941,7944,7946,7949,7951,7954,7956],{"class":103,"line":7936},37,[101,7938,1538],{"class":111},[101,7940,1155],{"class":107},[101,7942,7943],{"class":111},"s1.name",[101,7945,1155],{"class":107},[101,7947,7948],{"class":111},"s1.age",[101,7950,1155],{"class":107},[101,7952,7953],{"class":111},"s1.score",[101,7955,1155],{"class":107},[101,7957,1178],{"class":111},[101,7959,7961],{"class":103,"line":7960},38,[101,7962,2387],{"emptyLinePlaceholder":27},[101,7964,7966],{"class":103,"line":7965},39,[101,7967,7968],{"class":170},"    \u002F\u002F2.2 struct Student s2={...}\n",[101,7970,7972,7974,7976,7979,7981,7983,7986,7988,7990,7992,7994],{"class":103,"line":7971},40,[101,7973,7883],{"class":107},[101,7975,7886],{"class":1950},[101,7977,7978],{"class":111}," s2",[101,7980,157],{"class":107},[101,7982,1007],{"class":111},[101,7984,7985],{"class":216},"\"王五\"",[101,7987,489],{"class":111},[101,7989,761],{"class":160},[101,7991,489],{"class":111},[101,7993,365],{"class":160},[101,7995,3982],{"class":111},[101,7997,7999],{"class":103,"line":7998},41,[101,8000,2387],{"emptyLinePlaceholder":27},[101,8002,8004],{"class":103,"line":8003},42,[101,8005,8006],{"class":170},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[101,8008,8010,8013,8015,8017],{"class":103,"line":8009},43,[101,8011,8012],{"class":111},"    s3.name",[101,8014,157],{"class":107},[101,8016,3665],{"class":216},[101,8018,1277],{"class":111},[101,8020,8022,8025,8027,8029],{"class":103,"line":8021},44,[101,8023,8024],{"class":111},"    s3.age",[101,8026,157],{"class":107},[101,8028,761],{"class":160},[101,8030,1277],{"class":111},[101,8032,8034,8037,8039,8041],{"class":103,"line":8033},45,[101,8035,8036],{"class":111},"    s3.score",[101,8038,157],{"class":107},[101,8040,811],{"class":160},[101,8042,1277],{"class":111},[101,8044,8046],{"class":103,"line":8045},46,[101,8047,1552],{"class":111},[10,8049,8050],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[43,8052,8054],{"id":8053},"_42结构体数组","4.2结构体数组",[10,8056,8057],{},"将自定义的结构体放入到数组中方便维护",[10,8059,8060,8061,8064],{},"语法：struct 结构体名 数组名",[101,8062,8063],{},"元素个数","={ {}，{},...{} };",[92,8066,8068],{"className":94,"code":8067,"language":96,"meta":20,"style":20},"#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",[98,8069,8070,8076,8086,8092,8097,8103,8107,8111,8117,8123,8127,8131,8139,8143,8148,8163,8167,8183,8199,8203,8208,8224,8239,8254,8259,8285,8289,8312,8316],{"__ignoreMap":20},[101,8071,8072,8074],{"class":103,"line":104},[101,8073,1936],{"class":107},[101,8075,1939],{"class":216},[101,8077,8078,8080,8082,8084],{"class":103,"line":21},[101,8079,1944],{"class":107},[101,8081,1947],{"class":107},[101,8083,1951],{"class":1950},[101,8085,1277],{"class":111},[101,8087,8088,8090],{"class":103,"line":1166},[101,8089,1936],{"class":107},[101,8091,7737],{"class":216},[101,8093,8094],{"class":103,"line":1181},[101,8095,8096],{"class":170},"\u002F\u002F1.定义结构体\n",[101,8098,8099,8101],{"class":103,"line":1187},[101,8100,7747],{"class":107},[101,8102,7750],{"class":1950},[101,8104,8105],{"class":103,"line":1201},[101,8106,1533],{"class":111},[101,8108,8109],{"class":103,"line":1207},[101,8110,7773],{"class":111},[101,8112,8113,8115],{"class":103,"line":1298},[101,8114,1972],{"class":107},[101,8116,7785],{"class":111},[101,8118,8119,8121],{"class":103,"line":1304},[101,8120,1972],{"class":107},[101,8122,7797],{"class":111},[101,8124,8125],{"class":103,"line":1316},[101,8126,2387],{"emptyLinePlaceholder":27},[101,8128,8129],{"class":103,"line":1599},[101,8130,3982],{"class":111},[101,8132,8133,8135,8137],{"class":103,"line":1604},[101,8134,115],{"class":107},[101,8136,1960],{"class":1950},[101,8138,1963],{"class":111},[101,8140,8141],{"class":103,"line":1610},[101,8142,1533],{"class":111},[101,8144,8145],{"class":103,"line":1615},[101,8146,8147],{"class":170},"    \u002F\u002F2.创建结构体数组\n",[101,8149,8150,8152,8154,8157,8159,8161],{"class":103,"line":1629},[101,8151,7883],{"class":107},[101,8153,7886],{"class":1950},[101,8155,8156],{"class":111}," stuArray[",[101,8158,189],{"class":160},[101,8160,1051],{"class":111},[101,8162,4895],{"class":107},[101,8164,8165],{"class":103,"line":1634},[101,8166,2017],{"class":111},[101,8168,8169,8171,8173,8175,8177,8179,8181],{"class":103,"line":1640},[101,8170,4904],{"class":111},[101,8172,7904],{"class":216},[101,8174,489],{"class":111},[101,8176,761],{"class":160},[101,8178,489],{"class":111},[101,8180,422],{"class":160},[101,8182,4917],{"class":111},[101,8184,8185,8187,8189,8191,8193,8195,8197],{"class":103,"line":1661},[101,8186,4904],{"class":111},[101,8188,3665],{"class":216},[101,8190,489],{"class":111},[101,8192,686],{"class":160},[101,8194,489],{"class":111},[101,8196,686],{"class":160},[101,8198,1552],{"class":111},[101,8200,8201],{"class":103,"line":1666},[101,8202,2174],{"class":111},[101,8204,8205],{"class":103,"line":1680},[101,8206,8207],{"class":170},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[101,8209,8210,8213,8215,8218,8220,8222],{"class":103,"line":1685},[101,8211,8212],{"class":111},"    stuArray[",[101,8214,329],{"class":160},[101,8216,8217],{"class":111},"].name",[101,8219,157],{"class":107},[101,8221,3688],{"class":216},[101,8223,1277],{"class":111},[101,8225,8226,8228,8230,8233,8235,8237],{"class":103,"line":1714},[101,8227,8212],{"class":111},[101,8229,329],{"class":160},[101,8231,8232],{"class":111},"].age",[101,8234,157],{"class":107},[101,8236,189],{"class":160},[101,8238,1277],{"class":111},[101,8240,8241,8243,8245,8248,8250,8252],{"class":103,"line":1719},[101,8242,8212],{"class":111},[101,8244,329],{"class":160},[101,8246,8247],{"class":111},"].score",[101,8249,157],{"class":107},[101,8251,189],{"class":160},[101,8253,1277],{"class":111},[101,8255,8256],{"class":103,"line":1736},[101,8257,8258],{"class":170},"    \u002F\u002F4.遍历结构体数组\n",[101,8260,8261,8263,8265,8267,8269,8271,8273,8275,8277,8279,8281,8283],{"class":103,"line":1741},[101,8262,3188],{"class":107},[101,8264,1645],{"class":111},[101,8266,115],{"class":107},[101,8268,3019],{"class":111},[101,8270,157],{"class":107},[101,8272,303],{"class":160},[101,8274,3026],{"class":111},[101,8276,1021],{"class":107},[101,8278,189],{"class":160},[101,8280,3026],{"class":111},[101,8282,2279],{"class":107},[101,8284,118],{"class":111},[101,8286,8287],{"class":103,"line":1746},[101,8288,2017],{"class":111},[101,8290,8291,8293,8295,8298,8300,8303,8305,8308,8310],{"class":103,"line":1751},[101,8292,3438],{"class":111},[101,8294,1155],{"class":107},[101,8296,8297],{"class":111},"stuArray[i].name",[101,8299,1155],{"class":107},[101,8301,8302],{"class":111},"stuArray[i].age",[101,8304,1155],{"class":107},[101,8306,8307],{"class":111},"stuArray[i].score",[101,8309,1155],{"class":107},[101,8311,1178],{"class":111},[101,8313,8314],{"class":103,"line":1765},[101,8315,2174],{"class":111},[101,8317,8318],{"class":103,"line":1770},[101,8319,1552],{"class":111},[43,8321,8323],{"id":8322},"_43结构体指针","4.3结构体指针",[10,8325,8326],{},"作用：通过指针访问结构体中的成员",[10,8328,8329],{},"利用操作符->可以通过结构体指针访问结构体属性",[92,8331,8333],{"className":94,"code":8332,"language":96,"meta":20,"style":20},"#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",[98,8334,8335,8341,8351,8357,8361,8367,8371,8375,8381,8387,8391,8399,8403,8408,8433,8438,8453,8458,8481],{"__ignoreMap":20},[101,8336,8337,8339],{"class":103,"line":104},[101,8338,1936],{"class":107},[101,8340,1939],{"class":216},[101,8342,8343,8345,8347,8349],{"class":103,"line":21},[101,8344,1944],{"class":107},[101,8346,1947],{"class":107},[101,8348,1951],{"class":1950},[101,8350,1277],{"class":111},[101,8352,8353,8355],{"class":103,"line":1166},[101,8354,1936],{"class":107},[101,8356,7737],{"class":216},[101,8358,8359],{"class":103,"line":1181},[101,8360,8096],{"class":170},[101,8362,8363,8365],{"class":103,"line":1187},[101,8364,7747],{"class":107},[101,8366,7750],{"class":1950},[101,8368,8369],{"class":103,"line":1201},[101,8370,1533],{"class":111},[101,8372,8373],{"class":103,"line":1207},[101,8374,7773],{"class":111},[101,8376,8377,8379],{"class":103,"line":1298},[101,8378,1972],{"class":107},[101,8380,7785],{"class":111},[101,8382,8383,8385],{"class":103,"line":1304},[101,8384,1972],{"class":107},[101,8386,7797],{"class":111},[101,8388,8389],{"class":103,"line":1316},[101,8390,3982],{"class":111},[101,8392,8393,8395,8397],{"class":103,"line":1599},[101,8394,115],{"class":107},[101,8396,1960],{"class":1950},[101,8398,1963],{"class":111},[101,8400,8401],{"class":103,"line":1604},[101,8402,1533],{"class":111},[101,8404,8405],{"class":103,"line":1610},[101,8406,8407],{"class":170},"    \u002F\u002F创建学生结构体变量\n",[101,8409,8410,8412,8414,8417,8419,8421,8423,8425,8427,8429,8431],{"class":103,"line":1615},[101,8411,7883],{"class":107},[101,8413,7886],{"class":1950},[101,8415,8416],{"class":111}," s",[101,8418,157],{"class":107},[101,8420,1007],{"class":111},[101,8422,7904],{"class":216},[101,8424,489],{"class":111},[101,8426,761],{"class":160},[101,8428,489],{"class":111},[101,8430,1709],{"class":160},[101,8432,3982],{"class":111},[101,8434,8435],{"class":103,"line":1629},[101,8436,8437],{"class":170},"    \u002F\u002F通过指针指向结构体变量\n",[101,8439,8440,8442,8444,8446,8448,8450],{"class":103,"line":1634},[101,8441,7883],{"class":107},[101,8443,7886],{"class":1950},[101,8445,6506],{"class":107},[101,8447,10],{"class":111},[101,8449,6327],{"class":107},[101,8451,8452],{"class":111},"s\n",[101,8454,8455],{"class":103,"line":1640},[101,8456,8457],{"class":170},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[101,8459,8460,8462,8464,8467,8469,8472,8474,8477,8479],{"class":103,"line":1661},[101,8461,1538],{"class":111},[101,8463,1155],{"class":107},[101,8465,8466],{"class":111},"p->name",[101,8468,1155],{"class":107},[101,8470,8471],{"class":111},"p->age",[101,8473,1155],{"class":107},[101,8475,8476],{"class":111},"p->score",[101,8478,1155],{"class":107},[101,8480,1178],{"class":111},[101,8482,8483],{"class":103,"line":1666},[101,8484,1552],{"class":111},[43,8486,8488],{"id":8487},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[10,8490,8491],{},"作用：结构体中的成员可以是另一个结构体",[10,8493,8494],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[92,8496,8498],{"className":94,"code":8497,"language":96,"meta":20,"style":20},"#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",[98,8499,8500,8506,8516,8522,8527,8535,8539,8543,8549,8555,8559,8564,8571,8575,8582,8586,8592,8597,8601,8609,8613,8618,8623,8628,8639,8651,8662,8675,8686,8697],{"__ignoreMap":20},[101,8501,8502,8504],{"class":103,"line":104},[101,8503,1936],{"class":107},[101,8505,1939],{"class":216},[101,8507,8508,8510,8512,8514],{"class":103,"line":21},[101,8509,1944],{"class":107},[101,8511,1947],{"class":107},[101,8513,1951],{"class":1950},[101,8515,1277],{"class":111},[101,8517,8518,8520],{"class":103,"line":1166},[101,8519,1936],{"class":107},[101,8521,7737],{"class":216},[101,8523,8524],{"class":103,"line":1181},[101,8525,8526],{"class":170},"\u002F\u002F定义学生结构体\n",[101,8528,8529,8531,8533],{"class":103,"line":1187},[101,8530,7747],{"class":107},[101,8532,7886],{"class":1950},[101,8534,2661],{"class":111},[101,8536,8537],{"class":103,"line":1201},[101,8538,1533],{"class":111},[101,8540,8541],{"class":103,"line":1207},[101,8542,7773],{"class":111},[101,8544,8545,8547],{"class":103,"line":1298},[101,8546,1972],{"class":107},[101,8548,7785],{"class":111},[101,8550,8551,8553],{"class":103,"line":1304},[101,8552,1972],{"class":107},[101,8554,7797],{"class":111},[101,8556,8557],{"class":103,"line":1316},[101,8558,1552],{"class":111},[101,8560,8561],{"class":103,"line":1599},[101,8562,8563],{"class":170},"\u002F\u002F定义老师结构体\n",[101,8565,8566,8568],{"class":103,"line":1604},[101,8567,7747],{"class":107},[101,8569,8570],{"class":1950}," Teacher\n",[101,8572,8573],{"class":103,"line":1610},[101,8574,1533],{"class":111},[101,8576,8577,8579],{"class":103,"line":1615},[101,8578,1972],{"class":107},[101,8580,8581],{"class":111}," id;\n",[101,8583,8584],{"class":103,"line":1629},[101,8585,7773],{"class":111},[101,8587,8588,8590],{"class":103,"line":1634},[101,8589,1972],{"class":107},[101,8591,7785],{"class":111},[101,8593,8594],{"class":103,"line":1640},[101,8595,8596],{"class":111},"    Student stu;\n",[101,8598,8599],{"class":103,"line":1661},[101,8600,1552],{"class":111},[101,8602,8603,8605,8607],{"class":103,"line":1666},[101,8604,115],{"class":107},[101,8606,1960],{"class":1950},[101,8608,5966],{"class":111},[101,8610,8611],{"class":103,"line":1680},[101,8612,1533],{"class":111},[101,8614,8615],{"class":103,"line":1685},[101,8616,8617],{"class":170},"    \u002F\u002F结构体嵌套结构体\n",[101,8619,8620],{"class":103,"line":1714},[101,8621,8622],{"class":170},"    \u002F\u002F创建老师\n",[101,8624,8625],{"class":103,"line":1719},[101,8626,8627],{"class":111},"    Teacher t;\n",[101,8629,8630,8633,8635,8637],{"class":103,"line":1736},[101,8631,8632],{"class":111},"    t.id",[101,8634,157],{"class":107},[101,8636,422],{"class":160},[101,8638,1277],{"class":111},[101,8640,8641,8644,8646,8649],{"class":103,"line":1741},[101,8642,8643],{"class":111},"    t.name",[101,8645,157],{"class":107},[101,8647,8648],{"class":216},"\"老王\"",[101,8650,1277],{"class":111},[101,8652,8653,8656,8658,8660],{"class":103,"line":1746},[101,8654,8655],{"class":111},"    t.age",[101,8657,157],{"class":107},[101,8659,761],{"class":160},[101,8661,1277],{"class":111},[101,8663,8664,8667,8669,8672],{"class":103,"line":1751},[101,8665,8666],{"class":111},"    t.stu.name",[101,8668,157],{"class":107},[101,8670,8671],{"class":216},"\"小王\"",[101,8673,8674],{"class":111},"；\n",[101,8676,8677,8680,8682,8684],{"class":103,"line":1765},[101,8678,8679],{"class":111},"    t.stu.age",[101,8681,157],{"class":107},[101,8683,811],{"class":160},[101,8685,1277],{"class":111},[101,8687,8688,8691,8693,8695],{"class":103,"line":1770},[101,8689,8690],{"class":111},"    t.stu.score",[101,8692,157],{"class":107},[101,8694,455],{"class":160},[101,8696,1277],{"class":111},[101,8698,8699],{"class":103,"line":2564},[101,8700,1552],{"class":111},[43,8702,8704],{"id":8703},"_45结构体做函数参数","4.5结构体做函数参数",[10,8706,8707],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[92,8709,8711],{"className":94,"code":8710,"language":96,"meta":20,"style":20},"#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",[98,8712,8713,8719,8729,8735,8741,8745,8749,8755,8761,8765,8770,8775,8792,8796,8829,8833,8838,8857,8861,8892,8896,8904,8908,8917,8929,8941,8953,8966,8974,8987,8999,9007],{"__ignoreMap":20},[101,8714,8715,8717],{"class":103,"line":104},[101,8716,1936],{"class":107},[101,8718,1939],{"class":216},[101,8720,8721,8723,8725,8727],{"class":103,"line":21},[101,8722,1944],{"class":107},[101,8724,1947],{"class":107},[101,8726,1951],{"class":1950},[101,8728,1277],{"class":111},[101,8730,8731,8733],{"class":103,"line":1166},[101,8732,1936],{"class":107},[101,8734,7737],{"class":216},[101,8736,8737,8739],{"class":103,"line":1181},[101,8738,7747],{"class":107},[101,8740,7750],{"class":1950},[101,8742,8743],{"class":103,"line":1187},[101,8744,1533],{"class":111},[101,8746,8747],{"class":103,"line":1201},[101,8748,7773],{"class":111},[101,8750,8751,8753],{"class":103,"line":1207},[101,8752,1972],{"class":107},[101,8754,7785],{"class":111},[101,8756,8757,8759],{"class":103,"line":1298},[101,8758,1972],{"class":107},[101,8760,7797],{"class":111},[101,8762,8763],{"class":103,"line":1304},[101,8764,3982],{"class":111},[101,8766,8767],{"class":103,"line":1316},[101,8768,8769],{"class":170},"\u002F\u002F打印学生信息的函数\n",[101,8771,8772],{"class":103,"line":1599},[101,8773,8774],{"class":170},"\u002F\u002F值传递\n",[101,8776,8777,8779,8782,8784,8786,8788,8790],{"class":103,"line":1604},[101,8778,5352],{"class":107},[101,8780,8781],{"class":1950}," printStudent1",[101,8783,112],{"class":111},[101,8785,7747],{"class":107},[101,8787,7886],{"class":1950},[101,8789,8416],{"class":5204},[101,8791,118],{"class":111},[101,8793,8794],{"class":103,"line":1610},[101,8795,1533],{"class":111},[101,8797,8798,8800,8802,8805,8807,8810,8812,8815,8817,8819,8821,8824,8826],{"class":103,"line":1615},[101,8799,6517],{"class":111},[101,8801,1155],{"class":107},[101,8803,8804],{"class":111}," s.name ",[101,8806,1155],{"class":107},[101,8808,8809],{"class":216}," \" \"",[101,8811,1431],{"class":107},[101,8813,8814],{"class":111}," s.age ",[101,8816,1155],{"class":107},[101,8818,8809],{"class":216},[101,8820,1431],{"class":107},[101,8822,8823],{"class":111}," s.score ",[101,8825,1155],{"class":107},[101,8827,8828],{"class":111}," endl;\n",[101,8830,8831],{"class":103,"line":1629},[101,8832,1552],{"class":111},[101,8834,8835],{"class":103,"line":1634},[101,8836,8837],{"class":170},"\u002F\u002F地址传递\n",[101,8839,8840,8842,8845,8847,8849,8851,8853,8855],{"class":103,"line":1640},[101,8841,5352],{"class":107},[101,8843,8844],{"class":1950}," printStudent2",[101,8846,112],{"class":111},[101,8848,7747],{"class":107},[101,8850,7886],{"class":1950},[101,8852,6506],{"class":107},[101,8854,806],{"class":5204},[101,8856,118],{"class":111},[101,8858,8859],{"class":103,"line":1661},[101,8860,1533],{"class":111},[101,8862,8863,8865,8867,8870,8872,8874,8876,8879,8881,8883,8885,8888,8890],{"class":103,"line":1666},[101,8864,6517],{"class":111},[101,8866,1155],{"class":107},[101,8868,8869],{"class":111}," s->name ",[101,8871,1155],{"class":107},[101,8873,8809],{"class":216},[101,8875,1431],{"class":107},[101,8877,8878],{"class":111}," s->age ",[101,8880,1155],{"class":107},[101,8882,8809],{"class":216},[101,8884,1431],{"class":107},[101,8886,8887],{"class":111}," s->score ",[101,8889,1155],{"class":107},[101,8891,8828],{"class":111},[101,8893,8894],{"class":103,"line":1680},[101,8895,1552],{"class":111},[101,8897,8898,8900,8902],{"class":103,"line":1685},[101,8899,115],{"class":107},[101,8901,1960],{"class":1950},[101,8903,1963],{"class":111},[101,8905,8906],{"class":103,"line":1714},[101,8907,1533],{"class":111},[101,8909,8910,8912,8914],{"class":103,"line":1719},[101,8911,7883],{"class":107},[101,8913,7886],{"class":1950},[101,8915,8916],{"class":111}," s;\n",[101,8918,8919,8922,8924,8927],{"class":103,"line":1736},[101,8920,8921],{"class":111},"    s.name ",[101,8923,157],{"class":107},[101,8925,8926],{"class":216}," \"张三\"",[101,8928,1277],{"class":111},[101,8930,8931,8934,8936,8939],{"class":103,"line":1741},[101,8932,8933],{"class":111},"    s.age ",[101,8935,157],{"class":107},[101,8937,8938],{"class":160}," 20",[101,8940,1277],{"class":111},[101,8942,8943,8946,8948,8951],{"class":103,"line":1746},[101,8944,8945],{"class":111},"    s.score ",[101,8947,157],{"class":107},[101,8949,8950],{"class":160}," 85",[101,8952,1277],{"class":111},[101,8954,8955,8957,8959,8962,8964],{"class":103,"line":1751},[101,8956,1538],{"class":111},[101,8958,1155],{"class":107},[101,8960,8961],{"class":216},"\"值传递:\"",[101,8963,1155],{"class":107},[101,8965,1178],{"class":111},[101,8967,8968,8971],{"class":103,"line":1765},[101,8969,8970],{"class":1950},"    printStudent1",[101,8972,8973],{"class":111},"(s);\n",[101,8975,8976,8978,8980,8983,8985],{"class":103,"line":1770},[101,8977,1538],{"class":111},[101,8979,1155],{"class":107},[101,8981,8982],{"class":216},"\"地址传递:\"",[101,8984,1155],{"class":107},[101,8986,1178],{"class":111},[101,8988,8989,8992,8994,8996],{"class":103,"line":2564},[101,8990,8991],{"class":1950},"    printStudent2",[101,8993,112],{"class":111},[101,8995,464],{"class":107},[101,8997,8998],{"class":111},"s); \n",[101,9000,9001,9003,9005],{"class":103,"line":2578},[101,9002,4077],{"class":107},[101,9004,4080],{"class":160},[101,9006,1277],{"class":111},[101,9008,9009],{"class":103,"line":2586},[101,9010,1552],{"class":111},[10,9012,9013],{},"注意：",[1118,9015,9016,9019],{},[58,9017,9018],{},"1.先定义结构体，不要在函数中写结构体的定义",[58,9020,9021],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[43,9023,9025],{"id":9024},"_46结构体中const使用场景","4.6结构体中const使用场景",[10,9027,9028],{},"用const防止误操作",[92,9030,9032],{"className":94,"code":9031,"language":96,"meta":20,"style":20},"#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",[98,9033,9034,9040,9050,9056,9061,9065,9069,9075,9081,9085,9101,9105,9128,9132,9140,9144,9165,9172,9176],{"__ignoreMap":20},[101,9035,9036,9038],{"class":103,"line":104},[101,9037,1936],{"class":107},[101,9039,1939],{"class":216},[101,9041,9042,9044,9046,9048],{"class":103,"line":21},[101,9043,1944],{"class":107},[101,9045,1947],{"class":107},[101,9047,1951],{"class":1950},[101,9049,1277],{"class":111},[101,9051,9052,9054],{"class":103,"line":1166},[101,9053,1936],{"class":107},[101,9055,7737],{"class":216},[101,9057,9058],{"class":103,"line":1181},[101,9059,9060],{"class":111},"sctuct Student\n",[101,9062,9063],{"class":103,"line":1187},[101,9064,1533],{"class":111},[101,9066,9067],{"class":103,"line":1201},[101,9068,7773],{"class":111},[101,9070,9071,9073],{"class":103,"line":1207},[101,9072,1972],{"class":107},[101,9074,7785],{"class":111},[101,9076,9077,9079],{"class":103,"line":1298},[101,9078,1972],{"class":107},[101,9080,7797],{"class":111},[101,9082,9083],{"class":103,"line":1304},[101,9084,3982],{"class":111},[101,9086,9087,9089,9092,9094,9097,9099],{"class":103,"line":1316},[101,9088,5352],{"class":107},[101,9090,9091],{"class":1950}," printStudents",[101,9093,112],{"class":111},[101,9095,9096],{"class":1950},"student",[101,9098,8416],{"class":5204},[101,9100,118],{"class":111},[101,9102,9103],{"class":103,"line":1599},[101,9104,1533],{"class":111},[101,9106,9107,9109,9111,9114,9116,9119,9121,9124,9126],{"class":103,"line":1604},[101,9108,1538],{"class":111},[101,9110,1155],{"class":107},[101,9112,9113],{"class":111},"s.name",[101,9115,1155],{"class":107},[101,9117,9118],{"class":111},"s.age",[101,9120,1155],{"class":107},[101,9122,9123],{"class":111},"s.score",[101,9125,1155],{"class":107},[101,9127,1178],{"class":111},[101,9129,9130],{"class":103,"line":1610},[101,9131,1552],{"class":111},[101,9133,9134,9136,9138],{"class":103,"line":1615},[101,9135,115],{"class":107},[101,9137,1960],{"class":1950},[101,9139,5966],{"class":111},[101,9141,9142],{"class":103,"line":1629},[101,9143,1533],{"class":111},[101,9145,9146,9149,9151,9153,9155,9157,9159,9161,9163],{"class":103,"line":1634},[101,9147,9148],{"class":111},"    Student s",[101,9150,157],{"class":107},[101,9152,1007],{"class":111},[101,9154,7904],{"class":216},[101,9156,489],{"class":111},[101,9158,761],{"class":160},[101,9160,489],{"class":111},[101,9162,761],{"class":160},[101,9164,3982],{"class":111},[101,9166,9167,9170],{"class":103,"line":1640},[101,9168,9169],{"class":1950},"    printStudent",[101,9171,8973],{"class":111},[101,9173,9174],{"class":103,"line":1661},[101,9175,2387],{"emptyLinePlaceholder":27},[101,9177,9178],{"class":103,"line":1666},[101,9179,1552],{"class":111},[10,9181,9013],{},[1118,9183,9184,9187,9190],{},[58,9185,9186],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[58,9188,9189],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[58,9191,9192],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[92,9194,9196],{"className":94,"code":9195,"language":96,"meta":20,"style":20},"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",[98,9197,9198,9217,9221,9226,9246],{"__ignoreMap":20},[101,9199,9200,9202,9204,9206,9208,9211,9213,9215],{"class":103,"line":104},[101,9201,5352],{"class":107},[101,9203,9091],{"class":1950},[101,9205,112],{"class":111},[101,9207,6780],{"class":107},[101,9209,9210],{"class":1950}," student",[101,9212,6506],{"class":107},[101,9214,806],{"class":5204},[101,9216,118],{"class":111},[101,9218,9219],{"class":103,"line":21},[101,9220,1533],{"class":111},[101,9222,9223],{"class":103,"line":1166},[101,9224,9225],{"class":170},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[101,9227,9228,9230,9232,9234,9236,9238,9240,9242,9244],{"class":103,"line":1181},[101,9229,1538],{"class":111},[101,9231,1155],{"class":107},[101,9233,9113],{"class":111},[101,9235,1155],{"class":107},[101,9237,9118],{"class":111},[101,9239,1155],{"class":107},[101,9241,9123],{"class":111},[101,9243,1155],{"class":107},[101,9245,1178],{"class":111},[101,9247,9248],{"class":103,"line":1187},[101,9249,1552],{"class":111},[43,9251,9253],{"id":9252},"_47案例","4.7案例",[55,9255,9256],{},[58,9257,9258],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[92,9260,9262],{"className":94,"code":9261,"language":96,"meta":20,"style":20},"#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",[98,9263,9264,9270,9280,9286,9293,9297,9303,9307,9312,9318,9324,9328,9332,9338,9342,9347,9352,9365,9369,9374,9400,9404,9416,9443,9447,9459,9469,9473,9478,9507,9511,9523,9532,9559,9570,9580,9584,9588,9592,9597,9621,9625,9649,9653,9672,9698,9702,9727,9750,9774,9779,9784,9789,9798,9803,9809,9830,9836,9850,9856,9883,9892,9898,9906,9911],{"__ignoreMap":20},[101,9265,9266,9268],{"class":103,"line":104},[101,9267,1936],{"class":107},[101,9269,1939],{"class":216},[101,9271,9272,9274,9276,9278],{"class":103,"line":21},[101,9273,1944],{"class":107},[101,9275,1947],{"class":107},[101,9277,1951],{"class":1950},[101,9279,1277],{"class":111},[101,9281,9282,9284],{"class":103,"line":1166},[101,9283,1936],{"class":107},[101,9285,7737],{"class":216},[101,9287,9288,9290],{"class":103,"line":1181},[101,9289,1936],{"class":107},[101,9291,9292],{"class":216},"\u003Cctime>\n",[101,9294,9295],{"class":103,"line":1187},[101,9296,8526],{"class":170},[101,9298,9299,9301],{"class":103,"line":1201},[101,9300,7747],{"class":107},[101,9302,7750],{"class":1950},[101,9304,9305],{"class":103,"line":1207},[101,9306,1533],{"class":111},[101,9308,9309],{"class":103,"line":1298},[101,9310,9311],{"class":111},"    string sName;\n",[101,9313,9314,9316],{"class":103,"line":1304},[101,9315,1972],{"class":107},[101,9317,7785],{"class":111},[101,9319,9320,9322],{"class":103,"line":1316},[101,9321,1972],{"class":107},[101,9323,7797],{"class":111},[101,9325,9326],{"class":103,"line":1599},[101,9327,3982],{"class":111},[101,9329,9330],{"class":103,"line":1604},[101,9331,8563],{"class":170},[101,9333,9334,9336],{"class":103,"line":1610},[101,9335,7747],{"class":107},[101,9337,8570],{"class":1950},[101,9339,9340],{"class":103,"line":1615},[101,9341,1533],{"class":111},[101,9343,9344],{"class":103,"line":1629},[101,9345,9346],{"class":111},"    string tName;\n",[101,9348,9349],{"class":103,"line":1634},[101,9350,9351],{"class":170},"    \u002F\u002F学生数组\n",[101,9353,9354,9356,9358,9361,9363],{"class":103,"line":1640},[101,9355,7883],{"class":107},[101,9357,7886],{"class":1950},[101,9359,9360],{"class":111}," sArray[",[101,9362,430],{"class":160},[101,9364,4677],{"class":111},[101,9366,9367],{"class":103,"line":1661},[101,9368,3982],{"class":111},[101,9370,9371],{"class":103,"line":1666},[101,9372,9373],{"class":170},"\u002F\u002F给老师和学生赋值的函数\n",[101,9375,9376,9378,9381,9383,9385,9388,9391,9394,9396,9398],{"class":103,"line":1680},[101,9377,5352],{"class":107},[101,9379,9380],{"class":1950}," allocateSpace",[101,9382,112],{"class":111},[101,9384,7747],{"class":107},[101,9386,9387],{"class":1950}," Teacher",[101,9389,9390],{"class":5204}," tArray",[101,9392,9393],{"class":111},"[],",[101,9395,115],{"class":107},[101,9397,7319],{"class":5204},[101,9399,118],{"class":111},[101,9401,9402],{"class":103,"line":1685},[101,9403,1533],{"class":111},[101,9405,9406,9409,9411,9414],{"class":103,"line":1714},[101,9407,9408],{"class":111},"    string nameSeed",[101,9410,157],{"class":107},[101,9412,9413],{"class":216},"\"ABCDE\"",[101,9415,1277],{"class":111},[101,9417,9418,9420,9422,9424,9427,9429,9431,9434,9436,9439,9441],{"class":103,"line":1719},[101,9419,3188],{"class":107},[101,9421,1645],{"class":111},[101,9423,115],{"class":107},[101,9425,9426],{"class":111}," i ",[101,9428,157],{"class":107},[101,9430,4080],{"class":160},[101,9432,9433],{"class":111},"; i ",[101,9435,1021],{"class":107},[101,9437,9438],{"class":111}," len; i",[101,9440,2279],{"class":107},[101,9442,118],{"class":111},[101,9444,9445],{"class":103,"line":1736},[101,9446,2017],{"class":111},[101,9448,9449,9452,9454,9457],{"class":103,"line":1741},[101,9450,9451],{"class":111},"        tArray[i].tName ",[101,9453,157],{"class":107},[101,9455,9456],{"class":216}," \"Teacher_\"",[101,9458,1277],{"class":111},[101,9460,9461,9463,9466],{"class":103,"line":1746},[101,9462,9451],{"class":111},[101,9464,9465],{"class":107},"+=",[101,9467,9468],{"class":111},"nameSeed[i];\n",[101,9470,9471],{"class":103,"line":1751},[101,9472,2387],{"emptyLinePlaceholder":27},[101,9474,9475],{"class":103,"line":1765},[101,9476,9477],{"class":170},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[101,9479,9480,9482,9484,9486,9489,9491,9493,9496,9498,9500,9503,9505],{"class":103,"line":1770},[101,9481,3390],{"class":107},[101,9483,1645],{"class":111},[101,9485,115],{"class":107},[101,9487,9488],{"class":111}," j ",[101,9490,157],{"class":107},[101,9492,4080],{"class":160},[101,9494,9495],{"class":111},"; j ",[101,9497,1021],{"class":107},[101,9499,2135],{"class":160},[101,9501,9502],{"class":111},"; j",[101,9504,2279],{"class":107},[101,9506,118],{"class":111},[101,9508,9509],{"class":103,"line":2564},[101,9510,2497],{"class":111},[101,9512,9513,9516,9518,9521],{"class":103,"line":2578},[101,9514,9515],{"class":111},"            tArray[i].sArray[j].sName ",[101,9517,157],{"class":107},[101,9519,9520],{"class":216}," \"Student_\"",[101,9522,1277],{"class":111},[101,9524,9525,9527,9529],{"class":103,"line":2586},[101,9526,9515],{"class":111},[101,9528,9465],{"class":107},[101,9530,9531],{"class":111}," nameSeed[j];\n",[101,9533,9534,9537,9540,9542,9544,9546,9548,9550,9552,9554,9556],{"class":103,"line":2591},[101,9535,9536],{"class":107},"            int",[101,9538,9539],{"class":111}," random",[101,9541,157],{"class":107},[101,9543,2411],{"class":1950},[101,9545,2414],{"class":111},[101,9547,439],{"class":107},[101,9549,1018],{"class":160},[101,9551,592],{"class":107},[101,9553,512],{"class":160},[101,9555,167],{"class":111},[101,9557,9558],{"class":170},"\u002F\u002F40~99\n",[101,9560,9561,9564,9566,9568],{"class":103,"line":2597},[101,9562,9563],{"class":111},"            tArray[i].sArray[j].age ",[101,9565,157],{"class":107},[101,9567,8938],{"class":160},[101,9569,1277],{"class":111},[101,9571,9572,9575,9577],{"class":103,"line":2603},[101,9573,9574],{"class":111},"            tArray[i].sArray[j].score ",[101,9576,157],{"class":107},[101,9578,9579],{"class":111}," random;\n",[101,9581,9582],{"class":103,"line":2608},[101,9583,2516],{"class":111},[101,9585,9586],{"class":103,"line":7936},[101,9587,2174],{"class":111},[101,9589,9590],{"class":103,"line":7960},[101,9591,1552],{"class":111},[101,9593,9594],{"class":103,"line":7965},[101,9595,9596],{"class":170},"\u002F\u002F打印所有信息的函数\n",[101,9598,9599,9601,9604,9606,9608,9610,9612,9615,9617,9619],{"class":103,"line":7971},[101,9600,5352],{"class":107},[101,9602,9603],{"class":1950}," printInfo",[101,9605,112],{"class":111},[101,9607,7747],{"class":107},[101,9609,9387],{"class":1950},[101,9611,9390],{"class":5204},[101,9613,9614],{"class":111},"[], ",[101,9616,115],{"class":107},[101,9618,7319],{"class":5204},[101,9620,118],{"class":111},[101,9622,9623],{"class":103,"line":7998},[101,9624,1533],{"class":111},[101,9626,9627,9629,9631,9633,9635,9637,9639,9641,9643,9645,9647],{"class":103,"line":8003},[101,9628,3188],{"class":107},[101,9630,1645],{"class":111},[101,9632,115],{"class":107},[101,9634,9426],{"class":111},[101,9636,157],{"class":107},[101,9638,4080],{"class":160},[101,9640,9433],{"class":111},[101,9642,1021],{"class":107},[101,9644,9438],{"class":111},[101,9646,2279],{"class":107},[101,9648,118],{"class":111},[101,9650,9651],{"class":103,"line":8009},[101,9652,2017],{"class":111},[101,9654,9655,9658,9660,9663,9665,9668,9670],{"class":103,"line":8021},[101,9656,9657],{"class":111},"        cout ",[101,9659,1155],{"class":107},[101,9661,9662],{"class":216}," \"Teacher: \"",[101,9664,1431],{"class":107},[101,9666,9667],{"class":111}," tArray[i].tName ",[101,9669,1155],{"class":107},[101,9671,8828],{"class":111},[101,9673,9674,9676,9678,9680,9682,9684,9686,9688,9690,9692,9694,9696],{"class":103,"line":8033},[101,9675,3390],{"class":107},[101,9677,1645],{"class":111},[101,9679,115],{"class":107},[101,9681,9488],{"class":111},[101,9683,157],{"class":107},[101,9685,4080],{"class":160},[101,9687,9495],{"class":111},[101,9689,1021],{"class":107},[101,9691,2135],{"class":160},[101,9693,9502],{"class":111},[101,9695,2279],{"class":107},[101,9697,118],{"class":111},[101,9699,9700],{"class":103,"line":8045},[101,9701,2497],{"class":111},[101,9703,9705,9708,9710,9713,9715,9718,9720,9723,9725],{"class":103,"line":9704},47,[101,9706,9707],{"class":111},"            cout ",[101,9709,1155],{"class":107},[101,9711,9712],{"class":216}," \"",[101,9714,1217],{"class":160},[101,9716,9717],{"class":216},"Student: \"",[101,9719,1431],{"class":107},[101,9721,9722],{"class":111}," tArray[i].sArray[j].sName",[101,9724,1155],{"class":107},[101,9726,1178],{"class":111},[101,9728,9730,9732,9734,9736,9738,9741,9743,9746,9748],{"class":103,"line":9729},48,[101,9731,9707],{"class":111},[101,9733,1155],{"class":107},[101,9735,9712],{"class":216},[101,9737,1217],{"class":160},[101,9739,9740],{"class":216},"Age: \"",[101,9742,1431],{"class":107},[101,9744,9745],{"class":111}," tArray[i].sArray[j].age ",[101,9747,1155],{"class":107},[101,9749,8828],{"class":111},[101,9751,9753,9755,9757,9759,9761,9764,9766,9769,9771],{"class":103,"line":9752},49,[101,9754,9707],{"class":111},[101,9756,1155],{"class":107},[101,9758,9712],{"class":216},[101,9760,1217],{"class":160},[101,9762,9763],{"class":216},"Score: \"",[101,9765,1431],{"class":107},[101,9767,9768],{"class":111}," tArray[i].sArray[j].score ",[101,9770,1155],{"class":107},[101,9772,9773],{"class":111}," endl;   \n",[101,9775,9777],{"class":103,"line":9776},50,[101,9778,2516],{"class":111},[101,9780,9782],{"class":103,"line":9781},51,[101,9783,2174],{"class":111},[101,9785,9787],{"class":103,"line":9786},52,[101,9788,1552],{"class":111},[101,9790,9792,9794,9796],{"class":103,"line":9791},53,[101,9793,115],{"class":107},[101,9795,1960],{"class":1950},[101,9797,1963],{"class":111},[101,9799,9801],{"class":103,"line":9800},54,[101,9802,1533],{"class":111},[101,9804,9806],{"class":103,"line":9805},55,[101,9807,9808],{"class":170},"    \u002F\u002F随机数种子\n",[101,9810,9812,9814,9816,9818,9820,9822,9824,9826,9828],{"class":103,"line":9811},56,[101,9813,2360],{"class":1950},[101,9815,2363],{"class":111},[101,9817,2366],{"class":107},[101,9819,2369],{"class":107},[101,9821,540],{"class":111},[101,9823,2374],{"class":1950},[101,9825,112],{"class":111},[101,9827,2379],{"class":160},[101,9829,2382],{"class":111},[101,9831,9833],{"class":103,"line":9832},57,[101,9834,9835],{"class":170},"    \u002F\u002F1.创建3名老师的数组\n",[101,9837,9839,9841,9843,9846,9848],{"class":103,"line":9838},58,[101,9840,7883],{"class":107},[101,9842,9387],{"class":1950},[101,9844,9845],{"class":111}," tArray[",[101,9847,183],{"class":160},[101,9849,4677],{"class":111},[101,9851,9853],{"class":103,"line":9852},59,[101,9854,9855],{"class":170},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[101,9857,9859,9861,9864,9866,9869,9872,9874,9876,9879,9881],{"class":103,"line":9858},60,[101,9860,1972],{"class":107},[101,9862,9863],{"class":111}," len ",[101,9865,157],{"class":107},[101,9867,9868],{"class":107}," sizeof",[101,9870,9871],{"class":111},"(tArray) ",[101,9873,695],{"class":107},[101,9875,9868],{"class":107},[101,9877,9878],{"class":111},"(tArray[",[101,9880,303],{"class":160},[101,9882,3843],{"class":111},[101,9884,9886,9889],{"class":103,"line":9885},61,[101,9887,9888],{"class":1950},"    allocateSpace",[101,9890,9891],{"class":111},"(tArray, len);\n",[101,9893,9895],{"class":103,"line":9894},62,[101,9896,9897],{"class":170},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[101,9899,9901,9904],{"class":103,"line":9900},63,[101,9902,9903],{"class":1950},"    printInfo",[101,9905,9891],{"class":111},[101,9907,9909],{"class":103,"line":9908},64,[101,9910,2387],{"emptyLinePlaceholder":27},[101,9912,9914],{"class":103,"line":9913},65,[101,9915,1552],{"class":111},[55,9917,9918],{"start":21},[58,9919,9920,9923],{},[261,9921,9922],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[10,9925,9926],{},"五名英雄信息如下：",[92,9928,9932],{"className":9929,"code":9930,"language":9931,"meta":20,"style":20},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[98,9933,9934,9952,9969,9986,10003],{"__ignoreMap":20},[101,9935,9936,9938,9941,9943,9945,9947,9950],{"class":103,"line":104},[101,9937,4904],{"class":111},[101,9939,9940],{"class":216},"\"刘备\"",[101,9942,489],{"class":111},[101,9944,886],{"class":160},[101,9946,489],{"class":111},[101,9948,9949],{"class":216},"\"男\"",[101,9951,4917],{"class":111},[101,9953,9954,9956,9959,9961,9963,9965,9967],{"class":103,"line":21},[101,9955,4904],{"class":111},[101,9957,9958],{"class":216},"\"关羽\"",[101,9960,489],{"class":111},[101,9962,861],{"class":160},[101,9964,489],{"class":111},[101,9966,9949],{"class":216},[101,9968,4917],{"class":111},[101,9970,9971,9973,9976,9978,9980,9982,9984],{"class":103,"line":1166},[101,9972,4904],{"class":111},[101,9974,9975],{"class":216},"\"张飞\"",[101,9977,489],{"class":111},[101,9979,811],{"class":160},[101,9981,489],{"class":111},[101,9983,9949],{"class":216},[101,9985,4917],{"class":111},[101,9987,9988,9990,9993,9995,9997,9999,10001],{"class":103,"line":1181},[101,9989,4904],{"class":111},[101,9991,9992],{"class":216},"\"赵云\"",[101,9994,489],{"class":111},[101,9996,836],{"class":160},[101,9998,489],{"class":111},[101,10000,9949],{"class":216},[101,10002,4917],{"class":111},[101,10004,10005,10007,10010,10012,10014,10016,10019],{"class":103,"line":1187},[101,10006,4904],{"class":111},[101,10008,10009],{"class":216},"\"貂蝉\"",[101,10011,489],{"class":111},[101,10013,786],{"class":160},[101,10015,489],{"class":111},[101,10017,10018],{"class":216},"\"女\"",[101,10020,4917],{"class":111},[10,10022,10023],{},"代码：",[92,10025,10027],{"className":94,"code":10026,"language":96,"meta":20,"style":20},"#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",[98,10028,10029,10035,10045,10051,10058,10062,10066,10072,10077,10081,10086,10109,10113,10138,10142,10175,10180,10209,10214,10229,10255,10275,10280,10285,10289,10293,10298,10320,10324,10348,10352,10414,10418,10422,10430,10434,10439,10450,10454,10470,10486,10502,10518,10534,10538,10558,10580,10585,10598,10605,10610,10616,10621,10634,10640],{"__ignoreMap":20},[101,10030,10031,10033],{"class":103,"line":104},[101,10032,1936],{"class":107},[101,10034,1939],{"class":216},[101,10036,10037,10039,10041,10043],{"class":103,"line":21},[101,10038,1944],{"class":107},[101,10040,1947],{"class":107},[101,10042,1951],{"class":1950},[101,10044,1277],{"class":111},[101,10046,10047,10049],{"class":103,"line":1166},[101,10048,1936],{"class":107},[101,10050,7737],{"class":216},[101,10052,10053,10055],{"class":103,"line":1181},[101,10054,7747],{"class":107},[101,10056,10057],{"class":1950}," Sanguo\n",[101,10059,10060],{"class":103,"line":1187},[101,10061,1533],{"class":111},[101,10063,10064],{"class":103,"line":1201},[101,10065,7773],{"class":111},[101,10067,10068,10070],{"class":103,"line":1207},[101,10069,1972],{"class":107},[101,10071,7785],{"class":111},[101,10073,10074],{"class":103,"line":1298},[101,10075,10076],{"class":111},"    string gender;\n",[101,10078,10079],{"class":103,"line":1304},[101,10080,3982],{"class":111},[101,10082,10083],{"class":103,"line":1316},[101,10084,10085],{"class":170},"\u002F\u002F定义排序函数\n",[101,10087,10088,10090,10092,10094,10097,10099,10101,10103,10105,10107],{"class":103,"line":1599},[101,10089,5352],{"class":107},[101,10091,7304],{"class":1950},[101,10093,112],{"class":111},[101,10095,10096],{"class":1950},"Sanguo",[101,10098,6506],{"class":107},[101,10100,806],{"class":5204},[101,10102,489],{"class":111},[101,10104,115],{"class":107},[101,10106,7319],{"class":5204},[101,10108,118],{"class":111},[101,10110,10111],{"class":103,"line":1604},[101,10112,1533],{"class":111},[101,10114,10115,10117,10119,10121,10123,10125,10127,10129,10131,10134,10136],{"class":103,"line":1610},[101,10116,3188],{"class":107},[101,10118,112],{"class":111},[101,10120,115],{"class":107},[101,10122,3019],{"class":111},[101,10124,157],{"class":107},[101,10126,303],{"class":160},[101,10128,3026],{"class":111},[101,10130,1021],{"class":107},[101,10132,10133],{"class":111},"len;i",[101,10135,2279],{"class":107},[101,10137,118],{"class":111},[101,10139,10140],{"class":103,"line":1615},[101,10141,2017],{"class":111},[101,10143,10144,10147,10149,10151,10153,10155,10157,10159,10161,10163,10165,10167,10169,10171,10173],{"class":103,"line":1629},[101,10145,10146],{"class":107},"     for",[101,10148,1645],{"class":111},[101,10150,115],{"class":107},[101,10152,3397],{"class":111},[101,10154,157],{"class":107},[101,10156,303],{"class":160},[101,10158,3404],{"class":111},[101,10160,1021],{"class":107},[101,10162,7346],{"class":111},[101,10164,643],{"class":107},[101,10166,329],{"class":160},[101,10168,643],{"class":107},[101,10170,3537],{"class":111},[101,10172,2279],{"class":107},[101,10174,118],{"class":111},[101,10176,10177],{"class":103,"line":1634},[101,10178,10179],{"class":111},"     {\n",[101,10181,10182,10185,10188,10190,10193,10195,10198,10200,10202,10204,10206],{"class":103,"line":1640},[101,10183,10184],{"class":107},"         if",[101,10186,10187],{"class":111}," ((s",[101,10189,592],{"class":107},[101,10191,10192],{"class":111},"j)->age ",[101,10194,1071],{"class":107},[101,10196,10197],{"class":111}," (s",[101,10199,592],{"class":107},[101,10201,578],{"class":111},[101,10203,592],{"class":107},[101,10205,329],{"class":160},[101,10207,10208],{"class":111},")->age)\n",[101,10210,10211],{"class":103,"line":1661},[101,10212,10213],{"class":111},"         {\n",[101,10215,10216,10219,10221,10224,10226],{"class":103,"line":1666},[101,10217,10218],{"class":111},"             Sanguo temp",[101,10220,7141],{"class":107},[101,10222,10223],{"class":111},"(s",[101,10225,592],{"class":107},[101,10227,10228],{"class":111},"j);\n",[101,10230,10231,10234,10236,10238,10241,10243,10245,10247,10249,10251,10253],{"class":103,"line":1680},[101,10232,10233],{"class":107},"             *",[101,10235,10223],{"class":111},[101,10237,592],{"class":107},[101,10239,10240],{"class":111},"j)",[101,10242,7141],{"class":107},[101,10244,10223],{"class":111},[101,10246,592],{"class":107},[101,10248,578],{"class":111},[101,10250,592],{"class":107},[101,10252,329],{"class":160},[101,10254,2706],{"class":111},[101,10256,10257,10259,10261,10263,10265,10267,10269,10271,10273],{"class":103,"line":1685},[101,10258,10233],{"class":107},[101,10260,10223],{"class":111},[101,10262,592],{"class":107},[101,10264,578],{"class":111},[101,10266,592],{"class":107},[101,10268,329],{"class":160},[101,10270,540],{"class":111},[101,10272,157],{"class":107},[101,10274,4267],{"class":111},[101,10276,10277],{"class":103,"line":1714},[101,10278,10279],{"class":111},"         }\n",[101,10281,10282],{"class":103,"line":1719},[101,10283,10284],{"class":111},"     }\n",[101,10286,10287],{"class":103,"line":1736},[101,10288,2174],{"class":111},[101,10290,10291],{"class":103,"line":1741},[101,10292,1552],{"class":111},[101,10294,10295],{"class":103,"line":1746},[101,10296,10297],{"class":170},"\u002F\u002F定义打印函数\n",[101,10299,10300,10302,10304,10306,10308,10310,10312,10314,10316,10318],{"class":103,"line":1751},[101,10301,5352],{"class":107},[101,10303,9603],{"class":1950},[101,10305,112],{"class":111},[101,10307,10096],{"class":1950},[101,10309,6506],{"class":107},[101,10311,806],{"class":5204},[101,10313,489],{"class":111},[101,10315,115],{"class":107},[101,10317,7319],{"class":5204},[101,10319,118],{"class":111},[101,10321,10322],{"class":103,"line":1765},[101,10323,1533],{"class":111},[101,10325,10326,10328,10330,10332,10334,10336,10338,10340,10342,10344,10346],{"class":103,"line":1770},[101,10327,3188],{"class":107},[101,10329,1645],{"class":111},[101,10331,115],{"class":107},[101,10333,3019],{"class":111},[101,10335,157],{"class":107},[101,10337,303],{"class":160},[101,10339,3026],{"class":111},[101,10341,1021],{"class":107},[101,10343,10133],{"class":111},[101,10345,2279],{"class":107},[101,10347,118],{"class":111},[101,10349,10350],{"class":103,"line":2564},[101,10351,2017],{"class":111},[101,10353,10354,10356,10358,10360,10362,10365,10367,10369,10371,10374,10376,10378,10380,10383,10385,10387,10389,10392,10394,10396,10398,10401,10403,10405,10407,10410,10412],{"class":103,"line":2578},[101,10355,3438],{"class":111},[101,10357,1155],{"class":107},[101,10359,362],{"class":216},[101,10361,1217],{"class":160},[101,10363,10364],{"class":216},"姓名：\"",[101,10366,1155],{"class":107},[101,10368,10223],{"class":111},[101,10370,592],{"class":107},[101,10372,10373],{"class":111},"i)->name",[101,10375,1155],{"class":107},[101,10377,362],{"class":216},[101,10379,1217],{"class":160},[101,10381,10382],{"class":216},"年龄：\"",[101,10384,1155],{"class":107},[101,10386,10223],{"class":111},[101,10388,592],{"class":107},[101,10390,10391],{"class":111},"i)->age",[101,10393,1155],{"class":107},[101,10395,362],{"class":216},[101,10397,1217],{"class":160},[101,10399,10400],{"class":216},"性别：\"",[101,10402,1155],{"class":107},[101,10404,10223],{"class":111},[101,10406,592],{"class":107},[101,10408,10409],{"class":111},"i)->gender",[101,10411,1155],{"class":107},[101,10413,1178],{"class":111},[101,10415,10416],{"class":103,"line":2586},[101,10417,2174],{"class":111},[101,10419,10420],{"class":103,"line":2591},[101,10421,1552],{"class":111},[101,10423,10424,10426,10428],{"class":103,"line":2597},[101,10425,115],{"class":107},[101,10427,1960],{"class":1950},[101,10429,1963],{"class":111},[101,10431,10432],{"class":103,"line":2603},[101,10433,1533],{"class":111},[101,10435,10436],{"class":103,"line":2608},[101,10437,10438],{"class":170},"    \u002F\u002F定义结构体变量\n",[101,10440,10441,10444,10446,10448],{"class":103,"line":7936},[101,10442,10443],{"class":111},"    Sanguo s1[",[101,10445,430],{"class":160},[101,10447,1051],{"class":111},[101,10449,4895],{"class":107},[101,10451,10452],{"class":103,"line":7960},[101,10453,2017],{"class":111},[101,10455,10456,10458,10460,10462,10464,10466,10468],{"class":103,"line":7965},[101,10457,4904],{"class":111},[101,10459,9940],{"class":216},[101,10461,489],{"class":111},[101,10463,886],{"class":160},[101,10465,489],{"class":111},[101,10467,9949],{"class":216},[101,10469,4917],{"class":111},[101,10471,10472,10474,10476,10478,10480,10482,10484],{"class":103,"line":7971},[101,10473,4904],{"class":111},[101,10475,9958],{"class":216},[101,10477,489],{"class":111},[101,10479,861],{"class":160},[101,10481,489],{"class":111},[101,10483,9949],{"class":216},[101,10485,4917],{"class":111},[101,10487,10488,10490,10492,10494,10496,10498,10500],{"class":103,"line":7998},[101,10489,4904],{"class":111},[101,10491,9975],{"class":216},[101,10493,489],{"class":111},[101,10495,811],{"class":160},[101,10497,489],{"class":111},[101,10499,9949],{"class":216},[101,10501,4917],{"class":111},[101,10503,10504,10506,10508,10510,10512,10514,10516],{"class":103,"line":8003},[101,10505,4904],{"class":111},[101,10507,9992],{"class":216},[101,10509,489],{"class":111},[101,10511,836],{"class":160},[101,10513,489],{"class":111},[101,10515,9949],{"class":216},[101,10517,4917],{"class":111},[101,10519,10520,10522,10524,10526,10528,10530,10532],{"class":103,"line":8009},[101,10521,4904],{"class":111},[101,10523,10009],{"class":216},[101,10525,489],{"class":111},[101,10527,786],{"class":160},[101,10529,489],{"class":111},[101,10531,10018],{"class":216},[101,10533,4917],{"class":111},[101,10535,10536],{"class":103,"line":8021},[101,10537,4938],{"class":111},[101,10539,10540,10542,10544,10546,10549,10551,10554,10556],{"class":103,"line":8033},[101,10541,1972],{"class":107},[101,10543,7319],{"class":111},[101,10545,4190],{"class":107},[101,10547,10548],{"class":111},"(s1)",[101,10550,4196],{"class":107},[101,10552,10553],{"class":111},"(s1[",[101,10555,303],{"class":160},[101,10557,3843],{"class":111},[101,10559,10560,10563,10565,10568,10570,10573,10576,10578],{"class":103,"line":8045},[101,10561,10562],{"class":111},"    Sanguo ",[101,10564,566],{"class":107},[101,10566,10567],{"class":111},"s ",[101,10569,157],{"class":107},[101,10571,10572],{"class":107}," &",[101,10574,10575],{"class":111},"s1[",[101,10577,303],{"class":160},[101,10579,4677],{"class":111},[101,10581,10582],{"class":103,"line":9704},[101,10583,10584],{"class":170},"    \u002F\u002F排序前：\n",[101,10586,10587,10589,10591,10594,10596],{"class":103,"line":9729},[101,10588,6517],{"class":111},[101,10590,1155],{"class":107},[101,10592,10593],{"class":216}," \"排序前：\"",[101,10595,1431],{"class":107},[101,10597,8828],{"class":111},[101,10599,10600,10602],{"class":103,"line":9752},[101,10601,9903],{"class":1950},[101,10603,10604],{"class":111},"(s,len);\n",[101,10606,10607],{"class":103,"line":9776},[101,10608,10609],{"class":170},"    \u002F\u002F调用排序函数\n",[101,10611,10612,10614],{"class":103,"line":9781},[101,10613,7586],{"class":1950},[101,10615,10604],{"class":111},[101,10617,10618],{"class":103,"line":9786},[101,10619,10620],{"class":170},"    \u002F\u002F排序后\n",[101,10622,10623,10625,10627,10630,10632],{"class":103,"line":9791},[101,10624,6517],{"class":111},[101,10626,1155],{"class":107},[101,10628,10629],{"class":216}," \"排序后：\"",[101,10631,1431],{"class":107},[101,10633,8828],{"class":111},[101,10635,10636,10638],{"class":103,"line":9800},[101,10637,9903],{"class":1950},[101,10639,10604],{"class":111},[101,10641,10642],{"class":103,"line":9805},[101,10643,1552],{"class":111},[10,10645,10646,10647,10649],{},"注意：使用指针时直接用传首地址**&s",[101,10648,303],{},"**",[5114,10651,10652],{},"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":20,"searchDepth":21,"depth":21,"links":10654},[10655,10656,10657,10658,10659,10660,10661],{"id":7691,"depth":21,"text":7692},{"id":8053,"depth":21,"text":8054},{"id":8322,"depth":21,"text":8323},{"id":8487,"depth":21,"text":8488},{"id":8703,"depth":21,"text":8704},{"id":9024,"depth":21,"text":9025},{"id":9252,"depth":21,"text":9253},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7680,"description":7688},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10668,"title":10669,"body":10670,"description":20,"extension":24,"meta":12013,"navigation":27,"path":12014,"seo":12015,"stem":12016,"__hash__":12017},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10671,"toc":12007},[10672,10675,10679,10685,10699,10704,10707,10711,10718,10724,10727,10734,10740,10745,10748,10751,10754,11318,11321,11335,11339,11344,11360,11500,11503,11509,11512,11517,11525,11633,11636,11641,11644,11649,11652,11658,11661,12004],[39,10673,10669],{"id":10674},"_5程序内存模型",[43,10676,10678],{"id":10677},"_51内存分区模型","5.1内存分区模型",[10,10680,10681,10682],{},"C++程序在执行时，将内存大方向划分为",[261,10683,10684],{},"4个区域",[1118,10686,10687,10690,10693,10696],{},[58,10688,10689],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[58,10691,10692],{},"全局区：存放全局变量和静态变量以及常量",[58,10694,10695],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[58,10697,10698],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[10,10700,10701],{},[261,10702,10703],{},"内存四区意义：",[10,10705,10706],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[72,10708,10710],{"id":10709},"_511程序运行前","5.1.1程序运行前",[10,10712,10713,10714,10717],{},"​\t在程序编译后，生成了exe可执行程序，",[261,10715,10716],{},"未执行该程序前","分为两个区域",[10,10719,10720,10721],{},"​\t",[261,10722,10723],{},"代码区：",[10,10725,10726],{},"​\t\t存放 CPU 执行的机器指令",[10,10728,10729,10730,10733],{},"​\t\t代码区是",[261,10731,10732],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[10,10735,10729,10736,10739],{},[261,10737,10738],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[10,10741,10720,10742],{},[261,10743,10744],{},"全局区：",[10,10746,10747],{},"​\t\t全局变量和静态变量存放在此.",[10,10749,10750],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[10,10752,10753],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[92,10755,10757],{"className":94,"code":10756,"language":96,"meta":20,"style":20},"\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",[98,10758,10759,10764,10777,10790,10794,10799,10814,10829,10833,10842,10846,10851,10864,10877,10881,10886,10912,10938,10942,10969,10995,10999,11004,11020,11035,11039,11065,11091,11095,11120,11145,11149,11175,11201,11205,11221,11236,11262,11288,11292,11302,11306,11314],{"__ignoreMap":20},[101,10760,10761],{"class":103,"line":104},[101,10762,10763],{"class":170},"\u002F\u002F全局变量\n",[101,10765,10766,10768,10771,10773,10775],{"class":103,"line":21},[101,10767,115],{"class":107},[101,10769,10770],{"class":111}," g_a ",[101,10772,157],{"class":107},[101,10774,2025],{"class":160},[101,10776,1277],{"class":111},[101,10778,10779,10781,10784,10786,10788],{"class":103,"line":1166},[101,10780,115],{"class":107},[101,10782,10783],{"class":111}," g_b ",[101,10785,157],{"class":107},[101,10787,2025],{"class":160},[101,10789,1277],{"class":111},[101,10791,10792],{"class":103,"line":1181},[101,10793,2387],{"emptyLinePlaceholder":27},[101,10795,10796],{"class":103,"line":1187},[101,10797,10798],{"class":170},"\u002F\u002F全局常量\n",[101,10800,10801,10803,10805,10808,10810,10812],{"class":103,"line":1201},[101,10802,6780],{"class":107},[101,10804,2369],{"class":107},[101,10806,10807],{"class":111}," c_g_a ",[101,10809,157],{"class":107},[101,10811,2025],{"class":160},[101,10813,1277],{"class":111},[101,10815,10816,10818,10820,10823,10825,10827],{"class":103,"line":1207},[101,10817,6780],{"class":107},[101,10819,2369],{"class":107},[101,10821,10822],{"class":111}," c_g_b ",[101,10824,157],{"class":107},[101,10826,2025],{"class":160},[101,10828,1277],{"class":111},[101,10830,10831],{"class":103,"line":1298},[101,10832,2387],{"emptyLinePlaceholder":27},[101,10834,10835,10837,10839],{"class":103,"line":1304},[101,10836,115],{"class":107},[101,10838,1960],{"class":1950},[101,10840,10841],{"class":111},"() {\n",[101,10843,10844],{"class":103,"line":1316},[101,10845,2387],{"emptyLinePlaceholder":27},[101,10847,10848],{"class":103,"line":1599},[101,10849,10850],{"class":170},"    \u002F\u002F局部变量\n",[101,10852,10853,10855,10858,10860,10862],{"class":103,"line":1604},[101,10854,1972],{"class":107},[101,10856,10857],{"class":111}," a ",[101,10859,157],{"class":107},[101,10861,2025],{"class":160},[101,10863,1277],{"class":111},[101,10865,10866,10868,10871,10873,10875],{"class":103,"line":1610},[101,10867,1972],{"class":107},[101,10869,10870],{"class":111}," b ",[101,10872,157],{"class":107},[101,10874,2025],{"class":160},[101,10876,1277],{"class":111},[101,10878,10879],{"class":103,"line":1615},[101,10880,2387],{"emptyLinePlaceholder":27},[101,10882,10883],{"class":103,"line":1629},[101,10884,10885],{"class":170},"    \u002F\u002F打印地址\n",[101,10887,10888,10890,10892,10895,10897,10899,10901,10903,10905,10908,10910],{"class":103,"line":1634},[101,10889,6517],{"class":111},[101,10891,1155],{"class":107},[101,10893,10894],{"class":216}," \"局部变量a地址为： \"",[101,10896,1431],{"class":107},[101,10898,1645],{"class":111},[101,10900,115],{"class":107},[101,10902,540],{"class":111},[101,10904,464],{"class":107},[101,10906,10907],{"class":111},"a ",[101,10909,1155],{"class":107},[101,10911,8828],{"class":111},[101,10913,10914,10916,10918,10921,10923,10925,10927,10929,10931,10934,10936],{"class":103,"line":1640},[101,10915,6517],{"class":111},[101,10917,1155],{"class":107},[101,10919,10920],{"class":216}," \"局部变量b地址为： \"",[101,10922,1431],{"class":107},[101,10924,1645],{"class":111},[101,10926,115],{"class":107},[101,10928,540],{"class":111},[101,10930,464],{"class":107},[101,10932,10933],{"class":111},"b ",[101,10935,1155],{"class":107},[101,10937,8828],{"class":111},[101,10939,10940],{"class":103,"line":1661},[101,10941,2387],{"emptyLinePlaceholder":27},[101,10943,10944,10946,10948,10951,10953,10956,10958,10960,10962,10965,10967],{"class":103,"line":1666},[101,10945,6517],{"class":111},[101,10947,1155],{"class":107},[101,10949,10950],{"class":216}," \"全局变量g_a地址为： \"",[101,10952,1431],{"class":107},[101,10954,10955],{"class":111},"  (",[101,10957,115],{"class":107},[101,10959,540],{"class":111},[101,10961,464],{"class":107},[101,10963,10964],{"class":111},"g_a ",[101,10966,1155],{"class":107},[101,10968,8828],{"class":111},[101,10970,10971,10973,10975,10978,10980,10982,10984,10986,10988,10991,10993],{"class":103,"line":1680},[101,10972,6517],{"class":111},[101,10974,1155],{"class":107},[101,10976,10977],{"class":216}," \"全局变量g_b地址为： \"",[101,10979,1431],{"class":107},[101,10981,10955],{"class":111},[101,10983,115],{"class":107},[101,10985,540],{"class":111},[101,10987,464],{"class":107},[101,10989,10990],{"class":111},"g_b ",[101,10992,1155],{"class":107},[101,10994,8828],{"class":111},[101,10996,10997],{"class":103,"line":1685},[101,10998,2387],{"emptyLinePlaceholder":27},[101,11000,11001],{"class":103,"line":1714},[101,11002,11003],{"class":170},"    \u002F\u002F静态变量\n",[101,11005,11006,11009,11011,11014,11016,11018],{"class":103,"line":1719},[101,11007,11008],{"class":107},"    static",[101,11010,2369],{"class":107},[101,11012,11013],{"class":111}," s_a ",[101,11015,157],{"class":107},[101,11017,2025],{"class":160},[101,11019,1277],{"class":111},[101,11021,11022,11024,11026,11029,11031,11033],{"class":103,"line":1736},[101,11023,11008],{"class":107},[101,11025,2369],{"class":107},[101,11027,11028],{"class":111}," s_b ",[101,11030,157],{"class":107},[101,11032,2025],{"class":160},[101,11034,1277],{"class":111},[101,11036,11037],{"class":103,"line":1741},[101,11038,2387],{"emptyLinePlaceholder":27},[101,11040,11041,11043,11045,11048,11050,11052,11054,11056,11058,11061,11063],{"class":103,"line":1746},[101,11042,6517],{"class":111},[101,11044,1155],{"class":107},[101,11046,11047],{"class":216}," \"静态变量s_a地址为： \"",[101,11049,1431],{"class":107},[101,11051,1645],{"class":111},[101,11053,115],{"class":107},[101,11055,540],{"class":111},[101,11057,464],{"class":107},[101,11059,11060],{"class":111},"s_a ",[101,11062,1155],{"class":107},[101,11064,8828],{"class":111},[101,11066,11067,11069,11071,11074,11076,11078,11080,11082,11084,11087,11089],{"class":103,"line":1751},[101,11068,6517],{"class":111},[101,11070,1155],{"class":107},[101,11072,11073],{"class":216}," \"静态变量s_b地址为： \"",[101,11075,1431],{"class":107},[101,11077,1645],{"class":111},[101,11079,115],{"class":107},[101,11081,540],{"class":111},[101,11083,464],{"class":107},[101,11085,11086],{"class":111},"s_b ",[101,11088,1155],{"class":107},[101,11090,8828],{"class":111},[101,11092,11093],{"class":103,"line":1765},[101,11094,2387],{"emptyLinePlaceholder":27},[101,11096,11097,11099,11101,11104,11106,11108,11110,11112,11114,11116,11118],{"class":103,"line":1770},[101,11098,6517],{"class":111},[101,11100,1155],{"class":107},[101,11102,11103],{"class":216}," \"字符串常量地址为： \"",[101,11105,1431],{"class":107},[101,11107,1645],{"class":111},[101,11109,115],{"class":107},[101,11111,540],{"class":111},[101,11113,464],{"class":107},[101,11115,1173],{"class":216},[101,11117,1431],{"class":107},[101,11119,8828],{"class":111},[101,11121,11122,11124,11126,11128,11130,11132,11134,11136,11138,11141,11143],{"class":103,"line":2564},[101,11123,6517],{"class":111},[101,11125,1155],{"class":107},[101,11127,11103],{"class":216},[101,11129,1431],{"class":107},[101,11131,1645],{"class":111},[101,11133,115],{"class":107},[101,11135,540],{"class":111},[101,11137,464],{"class":107},[101,11139,11140],{"class":216},"\"hello world1\"",[101,11142,1431],{"class":107},[101,11144,8828],{"class":111},[101,11146,11147],{"class":103,"line":2578},[101,11148,2387],{"emptyLinePlaceholder":27},[101,11150,11151,11153,11155,11158,11160,11162,11164,11166,11168,11171,11173],{"class":103,"line":2586},[101,11152,6517],{"class":111},[101,11154,1155],{"class":107},[101,11156,11157],{"class":216}," \"全局常量c_g_a地址为： \"",[101,11159,1431],{"class":107},[101,11161,1645],{"class":111},[101,11163,115],{"class":107},[101,11165,540],{"class":111},[101,11167,464],{"class":107},[101,11169,11170],{"class":111},"c_g_a ",[101,11172,1155],{"class":107},[101,11174,8828],{"class":111},[101,11176,11177,11179,11181,11184,11186,11188,11190,11192,11194,11197,11199],{"class":103,"line":2591},[101,11178,6517],{"class":111},[101,11180,1155],{"class":107},[101,11182,11183],{"class":216}," \"全局常量c_g_b地址为： \"",[101,11185,1431],{"class":107},[101,11187,1645],{"class":111},[101,11189,115],{"class":107},[101,11191,540],{"class":111},[101,11193,464],{"class":107},[101,11195,11196],{"class":111},"c_g_b ",[101,11198,1155],{"class":107},[101,11200,8828],{"class":111},[101,11202,11203],{"class":103,"line":2597},[101,11204,2387],{"emptyLinePlaceholder":27},[101,11206,11207,11210,11212,11215,11217,11219],{"class":103,"line":2603},[101,11208,11209],{"class":107},"    const",[101,11211,2369],{"class":107},[101,11213,11214],{"class":111}," c_l_a ",[101,11216,157],{"class":107},[101,11218,2025],{"class":160},[101,11220,1277],{"class":111},[101,11222,11223,11225,11227,11230,11232,11234],{"class":103,"line":2608},[101,11224,11209],{"class":107},[101,11226,2369],{"class":107},[101,11228,11229],{"class":111}," c_l_b ",[101,11231,157],{"class":107},[101,11233,2025],{"class":160},[101,11235,1277],{"class":111},[101,11237,11238,11240,11242,11245,11247,11249,11251,11253,11255,11258,11260],{"class":103,"line":7936},[101,11239,6517],{"class":111},[101,11241,1155],{"class":107},[101,11243,11244],{"class":216}," \"局部常量c_l_a地址为： \"",[101,11246,1431],{"class":107},[101,11248,1645],{"class":111},[101,11250,115],{"class":107},[101,11252,540],{"class":111},[101,11254,464],{"class":107},[101,11256,11257],{"class":111},"c_l_a ",[101,11259,1155],{"class":107},[101,11261,8828],{"class":111},[101,11263,11264,11266,11268,11271,11273,11275,11277,11279,11281,11284,11286],{"class":103,"line":7960},[101,11265,6517],{"class":111},[101,11267,1155],{"class":107},[101,11269,11270],{"class":216}," \"局部常量c_l_b地址为： \"",[101,11272,1431],{"class":107},[101,11274,1645],{"class":111},[101,11276,115],{"class":107},[101,11278,540],{"class":111},[101,11280,464],{"class":107},[101,11282,11283],{"class":111},"c_l_b ",[101,11285,1155],{"class":107},[101,11287,8828],{"class":111},[101,11289,11290],{"class":103,"line":7965},[101,11291,2387],{"emptyLinePlaceholder":27},[101,11293,11294,11296,11298,11300],{"class":103,"line":7971},[101,11295,2290],{"class":1950},[101,11297,112],{"class":111},[101,11299,2295],{"class":216},[101,11301,2706],{"class":111},[101,11303,11304],{"class":103,"line":7998},[101,11305,2387],{"emptyLinePlaceholder":27},[101,11307,11308,11310,11312],{"class":103,"line":8003},[101,11309,4077],{"class":107},[101,11311,4080],{"class":160},[101,11313,1277],{"class":111},[101,11315,11316],{"class":103,"line":8009},[101,11317,1552],{"class":111},[10,11319,11320],{},"总结：",[1118,11322,11323,11326,11329,11332],{},[58,11324,11325],{},"c++中程序运行前分为全局区和代码区",[58,11327,11328],{},"代码区特点是共享和只读",[58,11330,11331],{},"全局区中存放全局变量、静态变量、常量",[58,11333,11334],{},"常量区中存放const修饰的全局常量和字符串常量",[72,11336,11338],{"id":11337},"_512程序运行后","5.1.2程序运行后",[55,11340,11341],{},[58,11342,11343],{},"栈区：",[1118,11345,11346,11353],{},[58,11347,11348,11349,11352],{},"由编译器自动分配释放, 存放",[261,11350,11351],{},"函数的参数值,局部变量","等",[58,11354,11355,11356,11359],{},"注意事项：",[261,11357,11358],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[92,11361,11363],{"className":94,"code":11362,"language":96,"meta":20,"style":20},"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",[98,11364,11365,11376,11380,11395,11407,11411,11415,11423,11428,11443,11461,11478,11488,11496],{"__ignoreMap":20},[101,11366,11367,11369,11371,11374],{"class":103,"line":104},[101,11368,115],{"class":107},[101,11370,6506],{"class":107},[101,11372,11373],{"class":1950}," func",[101,11375,1963],{"class":111},[101,11377,11378],{"class":103,"line":21},[101,11379,1533],{"class":111},[101,11381,11382,11384,11386,11388,11390,11392],{"class":103,"line":1166},[101,11383,1972],{"class":107},[101,11385,10857],{"class":111},[101,11387,157],{"class":107},[101,11389,2025],{"class":160},[101,11391,167],{"class":111},[101,11393,11394],{"class":170}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[101,11396,11397,11399,11401,11404],{"class":103,"line":1181},[101,11398,4077],{"class":107},[101,11400,10572],{"class":107},[101,11402,11403],{"class":111},"a;",[101,11405,11406],{"class":170}," \u002F\u002F放回局部变量的地址\n",[101,11408,11409],{"class":103,"line":1187},[101,11410,1552],{"class":111},[101,11412,11413],{"class":103,"line":1201},[101,11414,2387],{"emptyLinePlaceholder":27},[101,11416,11417,11419,11421],{"class":103,"line":1207},[101,11418,115],{"class":107},[101,11420,1960],{"class":1950},[101,11422,10841],{"class":111},[101,11424,11425],{"class":103,"line":1298},[101,11426,11427],{"class":170},"    \u002F\u002F接受func的返回值\n",[101,11429,11430,11432,11434,11437,11439,11441],{"class":103,"line":1304},[101,11431,1972],{"class":107},[101,11433,6506],{"class":107},[101,11435,11436],{"class":111},"p ",[101,11438,157],{"class":107},[101,11440,11373],{"class":1950},[101,11442,5624],{"class":111},[101,11444,11445,11447,11449,11451,11453,11455,11458],{"class":103,"line":1316},[101,11446,6517],{"class":111},[101,11448,1155],{"class":107},[101,11450,6506],{"class":107},[101,11452,11436],{"class":111},[101,11454,1155],{"class":107},[101,11456,11457],{"class":111}," endl;",[101,11459,11460],{"class":170}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[101,11462,11463,11465,11467,11469,11471,11473,11475],{"class":103,"line":1599},[101,11464,6517],{"class":111},[101,11466,1155],{"class":107},[101,11468,6506],{"class":107},[101,11470,11436],{"class":111},[101,11472,1155],{"class":107},[101,11474,11457],{"class":111},[101,11476,11477],{"class":170}," \u002F\u002F第二次这个数据不再保留\n",[101,11479,11480,11482,11484,11486],{"class":103,"line":1604},[101,11481,2290],{"class":1950},[101,11483,112],{"class":111},[101,11485,2295],{"class":216},[101,11487,2706],{"class":111},[101,11489,11490,11492,11494],{"class":103,"line":1610},[101,11491,4077],{"class":107},[101,11493,4080],{"class":160},[101,11495,1277],{"class":111},[101,11497,11498],{"class":103,"line":1615},[101,11499,1552],{"class":111},[10,11501,11502],{},"输出结果：",[10,11504,11505],{},[1449,11506],{"alt":11507,"src":11508},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[10,11510,11511],{},"总结：不要返回局部变量的地址",[55,11513,11514],{"start":21},[58,11515,11516],{},"堆区",[1118,11518,11519,11522],{},[58,11520,11521],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[58,11523,11524],{},"在c++中主要利用new在堆区开辟内存",[92,11526,11528],{"className":94,"code":11527,"language":96,"meta":20,"style":20},"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",[98,11529,11530,11545,11549,11554,11575,11582,11586,11594,11598,11603,11617,11629],{"__ignoreMap":20},[101,11531,11532,11534,11537,11540,11542],{"class":103,"line":104},[101,11533,115],{"class":107},[101,11535,11536],{"class":107},"  *",[101,11538,11539],{"class":1950},"func",[101,11541,2414],{"class":111},[101,11543,11544],{"class":170},"  \u002F\u002F函数返回指针\n",[101,11546,11547],{"class":103,"line":21},[101,11548,1533],{"class":111},[101,11550,11551],{"class":103,"line":1166},[101,11552,11553],{"class":170},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[101,11555,11556,11558,11560,11562,11564,11567,11569,11571,11573],{"class":103,"line":1181},[101,11557,4134],{"class":107},[101,11559,6506],{"class":107},[101,11561,10],{"class":111},[101,11563,157],{"class":107},[101,11565,11566],{"class":107}," new",[101,11568,2369],{"class":107},[101,11570,112],{"class":111},[101,11572,557],{"class":160},[101,11574,2706],{"class":111},[101,11576,11577,11579],{"class":103,"line":1187},[101,11578,4368],{"class":107},[101,11580,11581],{"class":111}," p;\n",[101,11583,11584],{"class":103,"line":1201},[101,11585,1552],{"class":111},[101,11587,11588,11590,11592],{"class":103,"line":1207},[101,11589,115],{"class":107},[101,11591,1960],{"class":1950},[101,11593,1963],{"class":111},[101,11595,11596],{"class":103,"line":1298},[101,11597,1533],{"class":111},[101,11599,11600],{"class":103,"line":1304},[101,11601,11602],{"class":170},"    \u002F\u002F在堆区开辟数据\n",[101,11604,11605,11607,11609,11611,11613,11615],{"class":103,"line":1316},[101,11606,1972],{"class":107},[101,11608,6506],{"class":107},[101,11610,10],{"class":111},[101,11612,157],{"class":107},[101,11614,11539],{"class":1950},[101,11616,5624],{"class":111},[101,11618,11619,11621,11623,11625,11627],{"class":103,"line":1599},[101,11620,1538],{"class":111},[101,11622,6407],{"class":107},[101,11624,10],{"class":111},[101,11626,1155],{"class":107},[101,11628,1178],{"class":111},[101,11630,11631],{"class":103,"line":1604},[101,11632,1552],{"class":111},[10,11634,11635],{},"图片展示：",[10,11637,11638],{},[1449,11639],{"alt":11507,"src":11640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[10,11642,11643],{},"堆区内存由程序员管生死！！！",[55,11645,11646],{"start":1166},[58,11647,11648],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[10,11650,11651],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[10,11653,11654,11655],{},"​语法：",[98,11656,11657],{}," new 数据类型",[10,11659,11660],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[92,11662,11664],{"className":94,"code":11663,"language":96,"meta":20,"style":20},"\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",[98,11665,11666,11671,11681,11685,11690,11695,11717,11721,11729,11733,11747,11759,11771,11783,11788,11793,11804,11808,11813,11821,11825,11830,11852,11878,11882,11900,11904,11930,11934,11946,11950,11955,11960,11968,11972,11976,11984,11988,11994,12000],{"__ignoreMap":20},[101,11667,11668],{"class":103,"line":104},[101,11669,11670],{"class":170},"\u002F\u002F1.new的基本语法\n",[101,11672,11673,11675,11677,11679],{"class":103,"line":21},[101,11674,115],{"class":107},[101,11676,6506],{"class":107},[101,11678,11539],{"class":1950},[101,11680,1963],{"class":111},[101,11682,11683],{"class":103,"line":1166},[101,11684,1533],{"class":111},[101,11686,11687],{"class":103,"line":1181},[101,11688,11689],{"class":170},"    \u002F\u002F在堆区创建整型数据\n",[101,11691,11692],{"class":103,"line":1187},[101,11693,11694],{"class":170},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[101,11696,11697,11699,11701,11703,11706,11708,11710,11712,11714],{"class":103,"line":1201},[101,11698,1972],{"class":107},[101,11700,6506],{"class":107},[101,11702,10],{"class":111},[101,11704,11705],{"class":107},"=new",[101,11707,2369],{"class":107},[101,11709,112],{"class":111},[101,11711,557],{"class":160},[101,11713,5954],{"class":111},[101,11715,11716],{"class":170},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[101,11718,11719],{"class":103,"line":1207},[101,11720,1552],{"class":111},[101,11722,11723,11725,11727],{"class":103,"line":1298},[101,11724,5352],{"class":107},[101,11726,5576],{"class":1950},[101,11728,1963],{"class":111},[101,11730,11731],{"class":103,"line":1304},[101,11732,1533],{"class":111},[101,11734,11735,11737,11739,11741,11743,11745],{"class":103,"line":1316},[101,11736,1972],{"class":107},[101,11738,6506],{"class":107},[101,11740,10],{"class":111},[101,11742,157],{"class":107},[101,11744,11539],{"class":1950},[101,11746,5624],{"class":111},[101,11748,11749,11751,11753,11755,11757],{"class":103,"line":1599},[101,11750,1538],{"class":111},[101,11752,6407],{"class":107},[101,11754,10],{"class":111},[101,11756,1155],{"class":107},[101,11758,1178],{"class":111},[101,11760,11761,11763,11765,11767,11769],{"class":103,"line":1604},[101,11762,1538],{"class":111},[101,11764,6407],{"class":107},[101,11766,10],{"class":111},[101,11768,1155],{"class":107},[101,11770,1178],{"class":111},[101,11772,11773,11775,11777,11779,11781],{"class":103,"line":1610},[101,11774,1538],{"class":111},[101,11776,6407],{"class":107},[101,11778,10],{"class":111},[101,11780,1155],{"class":107},[101,11782,1178],{"class":111},[101,11784,11785],{"class":103,"line":1615},[101,11786,11787],{"class":170},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[101,11789,11790],{"class":103,"line":1629},[101,11791,11792],{"class":170},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[101,11794,11795,11798,11801],{"class":103,"line":1634},[101,11796,11797],{"class":107},"    delete",[101,11799,11800],{"class":111}," p;",[101,11802,11803],{"class":170},"\u002F\u002F删除这块地址\n",[101,11805,11806],{"class":103,"line":1640},[101,11807,1552],{"class":111},[101,11809,11810],{"class":103,"line":1661},[101,11811,11812],{"class":170},"\u002F\u002F2.在堆区利用new开辟数组\n",[101,11814,11815,11817,11819],{"class":103,"line":1666},[101,11816,5352],{"class":107},[101,11818,5645],{"class":1950},[101,11820,1963],{"class":111},[101,11822,11823],{"class":103,"line":1680},[101,11824,1533],{"class":111},[101,11826,11827],{"class":103,"line":1685},[101,11828,11829],{"class":170},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[101,11831,11832,11834,11836,11838,11840,11842,11844,11846,11849],{"class":103,"line":1714},[101,11833,1972],{"class":107},[101,11835,6506],{"class":107},[101,11837,3867],{"class":111},[101,11839,11705],{"class":107},[101,11841,2369],{"class":107},[101,11843,1001],{"class":111},[101,11845,557],{"class":160},[101,11847,11848],{"class":111},"];",[101,11850,11851],{"class":170},"\u002F\u002F10代表数组有10个元素\n",[101,11853,11854,11856,11858,11860,11862,11864,11866,11868,11870,11872,11874,11876],{"class":103,"line":1719},[101,11855,3188],{"class":107},[101,11857,1645],{"class":111},[101,11859,115],{"class":107},[101,11861,3019],{"class":111},[101,11863,157],{"class":107},[101,11865,303],{"class":160},[101,11867,3026],{"class":111},[101,11869,1021],{"class":107},[101,11871,557],{"class":160},[101,11873,3026],{"class":111},[101,11875,2279],{"class":107},[101,11877,118],{"class":111},[101,11879,11880],{"class":103,"line":1736},[101,11881,2017],{"class":111},[101,11883,11884,11887,11889,11891,11893,11895,11897],{"class":103,"line":1741},[101,11885,11886],{"class":111},"        arr[i]",[101,11888,157],{"class":107},[101,11890,552],{"class":111},[101,11892,592],{"class":107},[101,11894,422],{"class":160},[101,11896,167],{"class":111},[101,11898,11899],{"class":170},"\u002F\u002F给10个元素赋值100～109\n",[101,11901,11902],{"class":103,"line":1746},[101,11903,2174],{"class":111},[101,11905,11906,11908,11910,11912,11914,11916,11918,11920,11922,11924,11926,11928],{"class":103,"line":1751},[101,11907,3188],{"class":107},[101,11909,1645],{"class":111},[101,11911,115],{"class":107},[101,11913,3019],{"class":111},[101,11915,157],{"class":107},[101,11917,303],{"class":160},[101,11919,3026],{"class":111},[101,11921,1021],{"class":107},[101,11923,557],{"class":160},[101,11925,3026],{"class":111},[101,11927,2279],{"class":107},[101,11929,118],{"class":111},[101,11931,11932],{"class":103,"line":1765},[101,11933,2017],{"class":111},[101,11935,11936,11938,11940,11942,11944],{"class":103,"line":1770},[101,11937,3438],{"class":111},[101,11939,1155],{"class":107},[101,11941,4341],{"class":111},[101,11943,1155],{"class":107},[101,11945,1178],{"class":111},[101,11947,11948],{"class":103,"line":2564},[101,11949,2174],{"class":111},[101,11951,11952],{"class":103,"line":2578},[101,11953,11954],{"class":170},"    \u002F\u002F释放堆区数组\n",[101,11956,11957],{"class":103,"line":2586},[101,11958,11959],{"class":170},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[101,11961,11962,11965],{"class":103,"line":2591},[101,11963,11964],{"class":107},"    delete[]",[101,11966,11967],{"class":111}," arr;\n",[101,11969,11970],{"class":103,"line":2597},[101,11971,1552],{"class":111},[101,11973,11974],{"class":103,"line":2603},[101,11975,2387],{"emptyLinePlaceholder":27},[101,11977,11978,11980,11982],{"class":103,"line":2608},[101,11979,115],{"class":107},[101,11981,1960],{"class":1950},[101,11983,1963],{"class":111},[101,11985,11986],{"class":103,"line":7936},[101,11987,1533],{"class":111},[101,11989,11990,11992],{"class":103,"line":7960},[101,11991,5621],{"class":1950},[101,11993,5624],{"class":111},[101,11995,11996,11998],{"class":103,"line":7965},[101,11997,5690],{"class":1950},[101,11999,5624],{"class":111},[101,12001,12002],{"class":103,"line":7971},[101,12003,1552],{"class":111},[5114,12005,12006],{},"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":20,"searchDepth":21,"depth":21,"links":12008},[12009],{"id":10677,"depth":21,"text":10678,"children":12010},[12011,12012],{"id":10709,"depth":1166,"text":10710},{"id":11337,"depth":1166,"text":11338},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10669,"description":20},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12019,"title":12020,"body":12021,"description":20,"extension":24,"meta":13502,"navigation":27,"path":13503,"seo":13504,"stem":13505,"__hash__":13506},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12022,"toc":13494},[12023,12026,12030,12033,12036,12205,12209,12214,12231,12236,12388,12392,12395,12398,12792,12796,12799,12804,12807,13119,13123,13129,13289,13291,13299,13303,13306,13313,13491],[39,12024,12020],{"id":12025},"_6引用",[43,12027,12029],{"id":12028},"_61引用基本用法","6.1引用基本用法",[10,12031,12032],{},"引用的本质：给变量起别名",[10,12034,12035],{},"语法：数据类型 &别名=原名",[92,12037,12039],{"className":94,"code":12038,"language":96,"meta":20,"style":20},"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",[98,12040,12041,12049,12053,12065,12077,12081,12100,12119,12123,12134,12138,12157,12175,12179,12189,12193,12201],{"__ignoreMap":20},[101,12042,12043,12045,12047],{"class":103,"line":104},[101,12044,115],{"class":107},[101,12046,1960],{"class":1950},[101,12048,10841],{"class":111},[101,12050,12051],{"class":103,"line":21},[101,12052,2387],{"emptyLinePlaceholder":27},[101,12054,12055,12057,12059,12061,12063],{"class":103,"line":1166},[101,12056,1972],{"class":107},[101,12058,10857],{"class":111},[101,12060,157],{"class":107},[101,12062,2025],{"class":160},[101,12064,1277],{"class":111},[101,12066,12067,12069,12071,12073,12075],{"class":103,"line":1181},[101,12068,1972],{"class":107},[101,12070,10572],{"class":107},[101,12072,10933],{"class":111},[101,12074,157],{"class":107},[101,12076,1419],{"class":111},[101,12078,12079],{"class":103,"line":1187},[101,12080,2387],{"emptyLinePlaceholder":27},[101,12082,12083,12085,12087,12090,12092,12094,12096,12098],{"class":103,"line":1201},[101,12084,6517],{"class":111},[101,12086,1155],{"class":107},[101,12088,12089],{"class":216}," \"a = \"",[101,12091,1431],{"class":107},[101,12093,10857],{"class":111},[101,12095,1155],{"class":107},[101,12097,11457],{"class":111},[101,12099,7256],{"class":170},[101,12101,12102,12104,12106,12109,12111,12113,12115,12117],{"class":103,"line":1207},[101,12103,6517],{"class":111},[101,12105,1155],{"class":107},[101,12107,12108],{"class":216}," \"b = \"",[101,12110,1431],{"class":107},[101,12112,10870],{"class":111},[101,12114,1155],{"class":107},[101,12116,11457],{"class":111},[101,12118,7256],{"class":170},[101,12120,12121],{"class":103,"line":1298},[101,12122,2387],{"emptyLinePlaceholder":27},[101,12124,12125,12128,12130,12132],{"class":103,"line":1304},[101,12126,12127],{"class":111},"    b ",[101,12129,157],{"class":107},[101,12131,5742],{"class":160},[101,12133,1277],{"class":111},[101,12135,12136],{"class":103,"line":1316},[101,12137,2387],{"emptyLinePlaceholder":27},[101,12139,12140,12142,12144,12146,12148,12150,12152,12154],{"class":103,"line":1599},[101,12141,6517],{"class":111},[101,12143,1155],{"class":107},[101,12145,12089],{"class":216},[101,12147,1431],{"class":107},[101,12149,10857],{"class":111},[101,12151,1155],{"class":107},[101,12153,11457],{"class":111},[101,12155,12156],{"class":170},"\u002F\u002F100\n",[101,12158,12159,12161,12163,12165,12167,12169,12171,12173],{"class":103,"line":1604},[101,12160,6517],{"class":111},[101,12162,1155],{"class":107},[101,12164,12108],{"class":216},[101,12166,1431],{"class":107},[101,12168,10870],{"class":111},[101,12170,1155],{"class":107},[101,12172,11457],{"class":111},[101,12174,12156],{"class":170},[101,12176,12177],{"class":103,"line":1610},[101,12178,2387],{"emptyLinePlaceholder":27},[101,12180,12181,12183,12185,12187],{"class":103,"line":1615},[101,12182,2290],{"class":1950},[101,12184,112],{"class":111},[101,12186,2295],{"class":216},[101,12188,2706],{"class":111},[101,12190,12191],{"class":103,"line":1629},[101,12192,2387],{"emptyLinePlaceholder":27},[101,12194,12195,12197,12199],{"class":103,"line":1634},[101,12196,4077],{"class":107},[101,12198,4080],{"class":160},[101,12200,1277],{"class":111},[101,12202,12203],{"class":103,"line":1640},[101,12204,1552],{"class":111},[43,12206,12208],{"id":12207},"_62引用的注意事项","6.2引用的注意事项",[55,12210,12211],{},[58,12212,12213],{},"引用必须要初始化",[92,12215,12217],{"className":94,"code":12216,"language":96,"meta":20,"style":20},"int &b;\u002F\u002F非常错误！\n",[98,12218,12219],{"__ignoreMap":20},[101,12220,12221,12223,12225,12228],{"class":103,"line":104},[101,12222,115],{"class":107},[101,12224,10572],{"class":107},[101,12226,12227],{"class":111},"b;",[101,12229,12230],{"class":170},"\u002F\u002F非常错误！\n",[55,12232,12233],{"start":21},[58,12234,12235],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[92,12237,12239],{"className":94,"code":12238,"language":96,"meta":20,"style":20},"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",[98,12240,12241,12249,12261,12273,12281,12297,12310,12328,12346,12366,12376,12384],{"__ignoreMap":20},[101,12242,12243,12245,12247],{"class":103,"line":104},[101,12244,115],{"class":107},[101,12246,1960],{"class":1950},[101,12248,10841],{"class":111},[101,12250,12251,12253,12255,12257,12259],{"class":103,"line":21},[101,12252,1972],{"class":107},[101,12254,10857],{"class":111},[101,12256,157],{"class":107},[101,12258,2025],{"class":160},[101,12260,1277],{"class":111},[101,12262,12263,12265,12267,12269,12271],{"class":103,"line":1166},[101,12264,1972],{"class":107},[101,12266,10870],{"class":111},[101,12268,157],{"class":107},[101,12270,8938],{"class":160},[101,12272,1277],{"class":111},[101,12274,12275,12278],{"class":103,"line":1181},[101,12276,12277],{"class":170},"    \u002F\u002Fint &c;",[101,12279,12280],{"class":170}," \u002F\u002F错误，引用必须初始化\n",[101,12282,12283,12285,12287,12289,12291,12294],{"class":103,"line":1187},[101,12284,1972],{"class":107},[101,12286,10572],{"class":107},[101,12288,2933],{"class":111},[101,12290,157],{"class":107},[101,12292,12293],{"class":111}," a;",[101,12295,12296],{"class":170}," \u002F\u002F一旦初始化后，就不可以更改\n",[101,12298,12299,12302,12304,12307],{"class":103,"line":1201},[101,12300,12301],{"class":111},"    c ",[101,12303,157],{"class":107},[101,12305,12306],{"class":111}," b;",[101,12308,12309],{"class":170}," \u002F\u002F这是赋值操作，不是更改引用\n",[101,12311,12312,12314,12316,12318,12320,12322,12324,12326],{"class":103,"line":1207},[101,12313,6517],{"class":111},[101,12315,1155],{"class":107},[101,12317,12089],{"class":216},[101,12319,1431],{"class":107},[101,12321,10857],{"class":111},[101,12323,1155],{"class":107},[101,12325,11457],{"class":111},[101,12327,7241],{"class":170},[101,12329,12330,12332,12334,12336,12338,12340,12342,12344],{"class":103,"line":1298},[101,12331,6517],{"class":111},[101,12333,1155],{"class":107},[101,12335,12108],{"class":216},[101,12337,1431],{"class":107},[101,12339,10870],{"class":111},[101,12341,1155],{"class":107},[101,12343,11457],{"class":111},[101,12345,7241],{"class":170},[101,12347,12348,12350,12352,12355,12357,12360,12362,12364],{"class":103,"line":1304},[101,12349,6517],{"class":111},[101,12351,1155],{"class":107},[101,12353,12354],{"class":216}," \"c = \"",[101,12356,1431],{"class":107},[101,12358,12359],{"class":111}," c ",[101,12361,1155],{"class":107},[101,12363,11457],{"class":111},[101,12365,7241],{"class":170},[101,12367,12368,12370,12372,12374],{"class":103,"line":1316},[101,12369,2290],{"class":1950},[101,12371,112],{"class":111},[101,12373,2295],{"class":216},[101,12375,2706],{"class":111},[101,12377,12378,12380,12382],{"class":103,"line":1599},[101,12379,4077],{"class":107},[101,12381,4080],{"class":160},[101,12383,1277],{"class":111},[101,12385,12386],{"class":103,"line":1604},[101,12387,1552],{"class":111},[43,12389,12391],{"id":12390},"_63引用做函数参数","6.3引用做函数参数",[10,12393,12394],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[10,12396,12397],{},"优点：可以简化指针修改实参",[92,12399,12401],{"className":94,"code":12400,"language":96,"meta":20,"style":20},"\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",[98,12402,12403,12408,12431,12442,12452,12461,12465,12469,12474,12496,12508,12520,12530,12534,12538,12543,12565,12575,12583,12591,12595,12599,12607,12611,12623,12635,12639,12650,12676,12680,12700,12724,12728,12738,12762,12766,12776,12780,12788],{"__ignoreMap":20},[101,12404,12405],{"class":103,"line":104},[101,12406,12407],{"class":170},"\u002F\u002F1. 值传递\n",[101,12409,12410,12412,12415,12417,12419,12421,12424,12426,12428],{"class":103,"line":21},[101,12411,5352],{"class":107},[101,12413,12414],{"class":1950}," mySwap01",[101,12416,112],{"class":111},[101,12418,115],{"class":107},[101,12420,1385],{"class":5204},[101,12422,12423],{"class":111},", ",[101,12425,115],{"class":107},[101,12427,2820],{"class":5204},[101,12429,12430],{"class":111},") {\n",[101,12432,12433,12435,12438,12440],{"class":103,"line":1166},[101,12434,1972],{"class":107},[101,12436,12437],{"class":111}," temp ",[101,12439,157],{"class":107},[101,12441,1419],{"class":111},[101,12443,12444,12447,12449],{"class":103,"line":1181},[101,12445,12446],{"class":111},"    a ",[101,12448,157],{"class":107},[101,12450,12451],{"class":111}," b;\n",[101,12453,12454,12456,12458],{"class":103,"line":1187},[101,12455,12127],{"class":111},[101,12457,157],{"class":107},[101,12459,12460],{"class":111}," temp;\n",[101,12462,12463],{"class":103,"line":1201},[101,12464,1552],{"class":111},[101,12466,12467],{"class":103,"line":1207},[101,12468,2387],{"emptyLinePlaceholder":27},[101,12470,12471],{"class":103,"line":1298},[101,12472,12473],{"class":170},"\u002F\u002F2. 地址传递\n",[101,12475,12476,12478,12481,12483,12486,12488,12490,12492,12494],{"class":103,"line":1304},[101,12477,5352],{"class":107},[101,12479,12480],{"class":1950}," mySwap02",[101,12482,112],{"class":111},[101,12484,12485],{"class":107},"int*",[101,12487,1385],{"class":5204},[101,12489,12423],{"class":111},[101,12491,12485],{"class":107},[101,12493,2820],{"class":5204},[101,12495,12430],{"class":111},[101,12497,12498,12500,12502,12504,12506],{"class":103,"line":1316},[101,12499,1972],{"class":107},[101,12501,12437],{"class":111},[101,12503,157],{"class":107},[101,12505,6506],{"class":107},[101,12507,6185],{"class":111},[101,12509,12510,12512,12514,12516,12518],{"class":103,"line":1599},[101,12511,6391],{"class":107},[101,12513,10907],{"class":111},[101,12515,157],{"class":107},[101,12517,6506],{"class":107},[101,12519,6057],{"class":111},[101,12521,12522,12524,12526,12528],{"class":103,"line":1604},[101,12523,6391],{"class":107},[101,12525,10933],{"class":111},[101,12527,157],{"class":107},[101,12529,12460],{"class":111},[101,12531,12532],{"class":103,"line":1610},[101,12533,1552],{"class":111},[101,12535,12536],{"class":103,"line":1615},[101,12537,2387],{"emptyLinePlaceholder":27},[101,12539,12540],{"class":103,"line":1629},[101,12541,12542],{"class":170},"\u002F\u002F3. 引用传递\n",[101,12544,12545,12547,12550,12552,12555,12557,12559,12561,12563],{"class":103,"line":1634},[101,12546,5352],{"class":107},[101,12548,12549],{"class":1950}," mySwap03",[101,12551,112],{"class":111},[101,12553,12554],{"class":107},"int&",[101,12556,1385],{"class":5204},[101,12558,12423],{"class":111},[101,12560,12554],{"class":107},[101,12562,2820],{"class":5204},[101,12564,12430],{"class":111},[101,12566,12567,12569,12571,12573],{"class":103,"line":1640},[101,12568,1972],{"class":107},[101,12570,12437],{"class":111},[101,12572,157],{"class":107},[101,12574,1419],{"class":111},[101,12576,12577,12579,12581],{"class":103,"line":1661},[101,12578,12446],{"class":111},[101,12580,157],{"class":107},[101,12582,12451],{"class":111},[101,12584,12585,12587,12589],{"class":103,"line":1666},[101,12586,12127],{"class":111},[101,12588,157],{"class":107},[101,12590,12460],{"class":111},[101,12592,12593],{"class":103,"line":1680},[101,12594,1552],{"class":111},[101,12596,12597],{"class":103,"line":1685},[101,12598,2387],{"emptyLinePlaceholder":27},[101,12600,12601,12603,12605],{"class":103,"line":1714},[101,12602,115],{"class":107},[101,12604,1960],{"class":1950},[101,12606,10841],{"class":111},[101,12608,12609],{"class":103,"line":1719},[101,12610,2387],{"emptyLinePlaceholder":27},[101,12612,12613,12615,12617,12619,12621],{"class":103,"line":1736},[101,12614,1972],{"class":107},[101,12616,10857],{"class":111},[101,12618,157],{"class":107},[101,12620,2025],{"class":160},[101,12622,1277],{"class":111},[101,12624,12625,12627,12629,12631,12633],{"class":103,"line":1741},[101,12626,1972],{"class":107},[101,12628,10870],{"class":111},[101,12630,157],{"class":107},[101,12632,8938],{"class":160},[101,12634,1277],{"class":111},[101,12636,12637],{"class":103,"line":1746},[101,12638,2387],{"emptyLinePlaceholder":27},[101,12640,12641,12644,12647],{"class":103,"line":1751},[101,12642,12643],{"class":1950},"    mySwap01",[101,12645,12646],{"class":111},"(a, b);",[101,12648,12649],{"class":170},"\u002F\u002F值传递，形参不会修饰实参\n",[101,12651,12652,12654,12656,12659,12661,12663,12665,12668,12670,12672,12674],{"class":103,"line":1765},[101,12653,6517],{"class":111},[101,12655,1155],{"class":107},[101,12657,12658],{"class":216}," \"a:\"",[101,12660,1431],{"class":107},[101,12662,10857],{"class":111},[101,12664,1155],{"class":107},[101,12666,12667],{"class":216}," \" b:\"",[101,12669,1431],{"class":107},[101,12671,10870],{"class":111},[101,12673,1155],{"class":107},[101,12675,8828],{"class":111},[101,12677,12678],{"class":103,"line":1770},[101,12679,2387],{"emptyLinePlaceholder":27},[101,12681,12682,12685,12687,12689,12692,12694,12697],{"class":103,"line":2564},[101,12683,12684],{"class":1950},"    mySwap02",[101,12686,112],{"class":111},[101,12688,464],{"class":107},[101,12690,12691],{"class":111},"a, ",[101,12693,464],{"class":107},[101,12695,12696],{"class":111},"b);",[101,12698,12699],{"class":170},"\u002F\u002F地址传递，形参会修饰实参\n",[101,12701,12702,12704,12706,12708,12710,12712,12714,12716,12718,12720,12722],{"class":103,"line":2578},[101,12703,6517],{"class":111},[101,12705,1155],{"class":107},[101,12707,12658],{"class":216},[101,12709,1431],{"class":107},[101,12711,10857],{"class":111},[101,12713,1155],{"class":107},[101,12715,12667],{"class":216},[101,12717,1431],{"class":107},[101,12719,10870],{"class":111},[101,12721,1155],{"class":107},[101,12723,8828],{"class":111},[101,12725,12726],{"class":103,"line":2586},[101,12727,2387],{"emptyLinePlaceholder":27},[101,12729,12730,12733,12735],{"class":103,"line":2591},[101,12731,12732],{"class":1950},"    mySwap03",[101,12734,12646],{"class":111},[101,12736,12737],{"class":170},"\u002F\u002F引用传递，形参会修饰实参\n",[101,12739,12740,12742,12744,12746,12748,12750,12752,12754,12756,12758,12760],{"class":103,"line":2597},[101,12741,6517],{"class":111},[101,12743,1155],{"class":107},[101,12745,12658],{"class":216},[101,12747,1431],{"class":107},[101,12749,10857],{"class":111},[101,12751,1155],{"class":107},[101,12753,12667],{"class":216},[101,12755,1431],{"class":107},[101,12757,10870],{"class":111},[101,12759,1155],{"class":107},[101,12761,8828],{"class":111},[101,12763,12764],{"class":103,"line":2603},[101,12765,2387],{"emptyLinePlaceholder":27},[101,12767,12768,12770,12772,12774],{"class":103,"line":2608},[101,12769,2290],{"class":1950},[101,12771,112],{"class":111},[101,12773,2295],{"class":216},[101,12775,2706],{"class":111},[101,12777,12778],{"class":103,"line":7936},[101,12779,2387],{"emptyLinePlaceholder":27},[101,12781,12782,12784,12786],{"class":103,"line":7960},[101,12783,4077],{"class":107},[101,12785,4080],{"class":160},[101,12787,1277],{"class":111},[101,12789,12790],{"class":103,"line":7965},[101,12791,1552],{"class":111},[43,12793,12795],{"id":12794},"_64引用做函数的返回值","6.4引用做函数的返回值",[10,12797,12798],{},"作用：引用是可以作为函数的返回值存在的",[10,12800,9013,12801],{},[261,12802,12803],{},"不要返回局部变量引用",[10,12805,12806],{},"用法：函数调用作为左值",[92,12808,12810],{"className":9929,"code":12809,"language":9931,"meta":20,"style":20},"\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",[98,12811,12812,12817,12825,12840,12846,12850,12854,12859,12867,12884,12890,12894,12898,12906,12910,12915,12929,12949,12968,12972,12977,12990,13010,13028,13032,13048,13052,13071,13089,13093,13103,13107,13115],{"__ignoreMap":20},[101,12813,12814],{"class":103,"line":104},[101,12815,12816],{"class":170},"\u002F\u002F返回局部变量引用\n",[101,12818,12819,12821,12823],{"class":103,"line":21},[101,12820,12554],{"class":107},[101,12822,5576],{"class":1950},[101,12824,10841],{"class":111},[101,12826,12827,12829,12831,12833,12835,12837],{"class":103,"line":1166},[101,12828,1972],{"class":107},[101,12830,10857],{"class":111},[101,12832,157],{"class":107},[101,12834,2025],{"class":160},[101,12836,167],{"class":111},[101,12838,12839],{"class":170}," \u002F\u002F局部变量\n",[101,12841,12842,12844],{"class":103,"line":1181},[101,12843,4077],{"class":107},[101,12845,1419],{"class":111},[101,12847,12848],{"class":103,"line":1187},[101,12849,1552],{"class":111},[101,12851,12852],{"class":103,"line":1201},[101,12853,2387],{"emptyLinePlaceholder":27},[101,12855,12856],{"class":103,"line":1207},[101,12857,12858],{"class":170},"\u002F\u002F返回静态变量引用\n",[101,12860,12861,12863,12865],{"class":103,"line":1298},[101,12862,12554],{"class":107},[101,12864,5645],{"class":1950},[101,12866,10841],{"class":111},[101,12868,12869,12871,12873,12875,12877,12879,12881],{"class":103,"line":1304},[101,12870,11008],{"class":107},[101,12872,2369],{"class":107},[101,12874,10857],{"class":111},[101,12876,157],{"class":107},[101,12878,8938],{"class":160},[101,12880,167],{"class":111},[101,12882,12883],{"class":170},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[101,12885,12886,12888],{"class":103,"line":1316},[101,12887,4077],{"class":107},[101,12889,1419],{"class":111},[101,12891,12892],{"class":103,"line":1599},[101,12893,1552],{"class":111},[101,12895,12896],{"class":103,"line":1604},[101,12897,2387],{"emptyLinePlaceholder":27},[101,12899,12900,12902,12904],{"class":103,"line":1610},[101,12901,115],{"class":107},[101,12903,1960],{"class":1950},[101,12905,10841],{"class":111},[101,12907,12908],{"class":103,"line":1615},[101,12909,2387],{"emptyLinePlaceholder":27},[101,12911,12912],{"class":103,"line":1629},[101,12913,12914],{"class":170},"    \u002F\u002F不能返回局部变量的引用\n",[101,12916,12917,12920,12923,12925,12927],{"class":103,"line":1634},[101,12918,12919],{"class":107},"    int&",[101,12921,12922],{"class":111}," ref ",[101,12924,157],{"class":107},[101,12926,5576],{"class":1950},[101,12928,5624],{"class":111},[101,12930,12931,12933,12935,12938,12940,12942,12944,12946],{"class":103,"line":1640},[101,12932,6517],{"class":111},[101,12934,1155],{"class":107},[101,12936,12937],{"class":216}," \"ref = \"",[101,12939,1431],{"class":107},[101,12941,12922],{"class":111},[101,12943,1155],{"class":107},[101,12945,11457],{"class":111},[101,12947,12948],{"class":170},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[101,12950,12951,12953,12955,12957,12959,12961,12963,12965],{"class":103,"line":1661},[101,12952,6517],{"class":111},[101,12954,1155],{"class":107},[101,12956,12937],{"class":216},[101,12958,1431],{"class":107},[101,12960,12922],{"class":111},[101,12962,1155],{"class":107},[101,12964,11457],{"class":111},[101,12966,12967],{"class":170},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[101,12969,12970],{"class":103,"line":1666},[101,12971,2387],{"emptyLinePlaceholder":27},[101,12973,12974],{"class":103,"line":1680},[101,12975,12976],{"class":170},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[101,12978,12979,12981,12984,12986,12988],{"class":103,"line":1685},[101,12980,12919],{"class":107},[101,12982,12983],{"class":111}," ref2 ",[101,12985,157],{"class":107},[101,12987,5645],{"class":1950},[101,12989,5624],{"class":111},[101,12991,12992,12994,12996,12999,13001,13003,13005,13007],{"class":103,"line":1714},[101,12993,6517],{"class":111},[101,12995,1155],{"class":107},[101,12997,12998],{"class":216}," \"ref2 = \"",[101,13000,1431],{"class":107},[101,13002,12983],{"class":111},[101,13004,1155],{"class":107},[101,13006,11457],{"class":111},[101,13008,13009],{"class":170}," \u002F\u002F20\n",[101,13011,13012,13014,13016,13018,13020,13022,13024,13026],{"class":103,"line":1719},[101,13013,6517],{"class":111},[101,13015,1155],{"class":107},[101,13017,12998],{"class":216},[101,13019,1431],{"class":107},[101,13021,12983],{"class":111},[101,13023,1155],{"class":107},[101,13025,11457],{"class":111},[101,13027,13009],{"class":170},[101,13029,13030],{"class":103,"line":1736},[101,13031,2387],{"emptyLinePlaceholder":27},[101,13033,13034,13036,13039,13041,13043,13045],{"class":103,"line":1741},[101,13035,5690],{"class":1950},[101,13037,13038],{"class":111},"() ",[101,13040,157],{"class":107},[101,13042,2986],{"class":160},[101,13044,167],{"class":111},[101,13046,13047],{"class":170},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[101,13049,13050],{"class":103,"line":1746},[101,13051,2387],{"emptyLinePlaceholder":27},[101,13053,13054,13056,13058,13060,13062,13064,13066,13068],{"class":103,"line":1751},[101,13055,6517],{"class":111},[101,13057,1155],{"class":107},[101,13059,12998],{"class":216},[101,13061,1431],{"class":107},[101,13063,12983],{"class":111},[101,13065,1155],{"class":107},[101,13067,11457],{"class":111},[101,13069,13070],{"class":170}," \u002F\u002F1000\n",[101,13072,13073,13075,13077,13079,13081,13083,13085,13087],{"class":103,"line":1765},[101,13074,6517],{"class":111},[101,13076,1155],{"class":107},[101,13078,12998],{"class":216},[101,13080,1431],{"class":107},[101,13082,12983],{"class":111},[101,13084,1155],{"class":107},[101,13086,11457],{"class":111},[101,13088,13070],{"class":170},[101,13090,13091],{"class":103,"line":1770},[101,13092,2387],{"emptyLinePlaceholder":27},[101,13094,13095,13097,13099,13101],{"class":103,"line":2564},[101,13096,2290],{"class":1950},[101,13098,112],{"class":111},[101,13100,2295],{"class":216},[101,13102,2706],{"class":111},[101,13104,13105],{"class":103,"line":2578},[101,13106,2387],{"emptyLinePlaceholder":27},[101,13108,13109,13111,13113],{"class":103,"line":2586},[101,13110,4077],{"class":107},[101,13112,4080],{"class":160},[101,13114,1277],{"class":111},[101,13116,13117],{"class":103,"line":2591},[101,13118,1552],{"class":111},[43,13120,13122],{"id":13121},"_65引用的本质","6.5引用的本质",[10,13124,13125,13126],{},"本质：",[261,13127,13128],{},"引用的本质在c++内部实现是一个指针常量.",[92,13130,13132],{"className":94,"code":13131,"language":96,"meta":20,"style":20},"\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",[98,13133,13134,13139,13155,13169,13173,13182,13194,13199,13204,13215,13228,13232,13248,13265,13269,13277,13285],{"__ignoreMap":20},[101,13135,13136],{"class":103,"line":104},[101,13137,13138],{"class":170},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[101,13140,13141,13143,13145,13147,13149,13152],{"class":103,"line":21},[101,13142,5352],{"class":107},[101,13144,11373],{"class":1950},[101,13146,112],{"class":111},[101,13148,12554],{"class":107},[101,13150,13151],{"class":5204}," ref",[101,13153,13154],{"class":111},"){\n",[101,13156,13157,13160,13162,13164,13166],{"class":103,"line":1166},[101,13158,13159],{"class":111},"    ref ",[101,13161,157],{"class":107},[101,13163,5742],{"class":160},[101,13165,167],{"class":111},[101,13167,13168],{"class":170}," \u002F\u002F ref是引用，转换为*ref = 100\n",[101,13170,13171],{"class":103,"line":1181},[101,13172,1552],{"class":111},[101,13174,13175,13177,13179],{"class":103,"line":1187},[101,13176,115],{"class":107},[101,13178,1960],{"class":1950},[101,13180,13181],{"class":111},"(){\n",[101,13183,13184,13186,13188,13190,13192],{"class":103,"line":1201},[101,13185,1972],{"class":107},[101,13187,10857],{"class":111},[101,13189,157],{"class":107},[101,13191,2025],{"class":160},[101,13193,1277],{"class":111},[101,13195,13196],{"class":103,"line":1207},[101,13197,13198],{"class":111},"    \n",[101,13200,13201],{"class":103,"line":1298},[101,13202,13203],{"class":170},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[101,13205,13206,13208,13210,13212],{"class":103,"line":1304},[101,13207,12919],{"class":107},[101,13209,12922],{"class":111},[101,13211,157],{"class":107},[101,13213,13214],{"class":111}," a; \n",[101,13216,13217,13219,13221,13223,13225],{"class":103,"line":1316},[101,13218,13159],{"class":111},[101,13220,157],{"class":107},[101,13222,8938],{"class":160},[101,13224,167],{"class":111},[101,13226,13227],{"class":170}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[101,13229,13230],{"class":103,"line":1599},[101,13231,13198],{"class":111},[101,13233,13234,13236,13238,13240,13242,13244,13246],{"class":103,"line":1604},[101,13235,6517],{"class":111},[101,13237,1155],{"class":107},[101,13239,12658],{"class":216},[101,13241,1431],{"class":107},[101,13243,10857],{"class":111},[101,13245,1155],{"class":107},[101,13247,8828],{"class":111},[101,13249,13250,13252,13254,13257,13259,13261,13263],{"class":103,"line":1610},[101,13251,6517],{"class":111},[101,13253,1155],{"class":107},[101,13255,13256],{"class":216}," \"ref:\"",[101,13258,1431],{"class":107},[101,13260,12922],{"class":111},[101,13262,1155],{"class":107},[101,13264,8828],{"class":111},[101,13266,13267],{"class":103,"line":1615},[101,13268,13198],{"class":111},[101,13270,13271,13274],{"class":103,"line":1629},[101,13272,13273],{"class":1950},"    func",[101,13275,13276],{"class":111},"(a);\n",[101,13278,13279,13281,13283],{"class":103,"line":1634},[101,13280,4077],{"class":107},[101,13282,4080],{"class":160},[101,13284,1277],{"class":111},[101,13286,13287],{"class":103,"line":1640},[101,13288,1552],{"class":111},[10,13290,11320],{},[55,13292,13293,13296],{},[58,13294,13295],{},"引用的本质，就是一个指针常量",[58,13297,13298],{},"引用一旦初始化，就不可以发生改变",[43,13300,13302],{"id":13301},"_66常量引用","6.6常量引用",[10,13304,13305],{},"作用：常量引用主要用来修饰形参",[10,13307,13308,13309,13312],{},"在函数形参列表中，可以加",[261,13310,13311],{},"const修饰形参","，防止形参改变实参",[92,13314,13316],{"className":94,"code":13315,"language":96,"meta":20,"style":20},"\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",[98,13317,13318,13323,13328,13347,13352,13365,13369,13373,13381,13385,13390,13395,13409,13413,13421,13433,13437,13442,13454,13461,13465,13475,13479,13487],{"__ignoreMap":20},[101,13319,13320],{"class":103,"line":104},[101,13321,13322],{"class":170},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[101,13324,13325],{"class":103,"line":21},[101,13326,13327],{"class":170},"\u002F\u002F加上const就不能修改实参的\n",[101,13329,13330,13332,13335,13337,13339,13342,13345],{"class":103,"line":1166},[101,13331,5352],{"class":107},[101,13333,13334],{"class":1950}," showValue",[101,13336,112],{"class":111},[101,13338,6780],{"class":107},[101,13340,13341],{"class":107}," int&",[101,13343,13344],{"class":5204}," v",[101,13346,12430],{"class":111},[101,13348,13349],{"class":103,"line":1181},[101,13350,13351],{"class":170},"    \u002F\u002Fv += 100;\n",[101,13353,13354,13356,13358,13361,13363],{"class":103,"line":1187},[101,13355,6517],{"class":111},[101,13357,1155],{"class":107},[101,13359,13360],{"class":111}," v ",[101,13362,1155],{"class":107},[101,13364,8828],{"class":111},[101,13366,13367],{"class":103,"line":1201},[101,13368,1552],{"class":111},[101,13370,13371],{"class":103,"line":1207},[101,13372,2387],{"emptyLinePlaceholder":27},[101,13374,13375,13377,13379],{"class":103,"line":1298},[101,13376,115],{"class":107},[101,13378,1960],{"class":1950},[101,13380,10841],{"class":111},[101,13382,13383],{"class":103,"line":1304},[101,13384,2387],{"emptyLinePlaceholder":27},[101,13386,13387],{"class":103,"line":1316},[101,13388,13389],{"class":170},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[101,13391,13392],{"class":103,"line":1599},[101,13393,13394],{"class":170},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[101,13396,13397,13399,13401,13403,13405,13407],{"class":103,"line":1604},[101,13398,11209],{"class":107},[101,13400,13341],{"class":107},[101,13402,12922],{"class":111},[101,13404,157],{"class":107},[101,13406,2025],{"class":160},[101,13408,1277],{"class":111},[101,13410,13411],{"class":103,"line":1610},[101,13412,2387],{"emptyLinePlaceholder":27},[101,13414,13415,13418],{"class":103,"line":1615},[101,13416,13417],{"class":170},"    \u002F\u002Fref = 100;",[101,13419,13420],{"class":170},"  \u002F\u002F加入const后不可以修改变量\n",[101,13422,13423,13425,13427,13429,13431],{"class":103,"line":1629},[101,13424,6517],{"class":111},[101,13426,1155],{"class":107},[101,13428,12922],{"class":111},[101,13430,1155],{"class":107},[101,13432,8828],{"class":111},[101,13434,13435],{"class":103,"line":1634},[101,13436,2387],{"emptyLinePlaceholder":27},[101,13438,13439],{"class":103,"line":1640},[101,13440,13441],{"class":170},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[101,13443,13444,13446,13448,13450,13452],{"class":103,"line":1661},[101,13445,1972],{"class":107},[101,13447,10857],{"class":111},[101,13449,157],{"class":107},[101,13451,2025],{"class":160},[101,13453,1277],{"class":111},[101,13455,13456,13459],{"class":103,"line":1666},[101,13457,13458],{"class":1950},"    showValue",[101,13460,13276],{"class":111},[101,13462,13463],{"class":103,"line":1680},[101,13464,2387],{"emptyLinePlaceholder":27},[101,13466,13467,13469,13471,13473],{"class":103,"line":1685},[101,13468,2290],{"class":1950},[101,13470,112],{"class":111},[101,13472,2295],{"class":216},[101,13474,2706],{"class":111},[101,13476,13477],{"class":103,"line":1714},[101,13478,2387],{"emptyLinePlaceholder":27},[101,13480,13481,13483,13485],{"class":103,"line":1719},[101,13482,4077],{"class":107},[101,13484,4080],{"class":160},[101,13486,1277],{"class":111},[101,13488,13489],{"class":103,"line":1736},[101,13490,1552],{"class":111},[5114,13492,13493],{},"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":20,"searchDepth":21,"depth":21,"links":13495},[13496,13497,13498,13499,13500,13501],{"id":12028,"depth":21,"text":12029},{"id":12207,"depth":21,"text":12208},{"id":12390,"depth":21,"text":12391},{"id":12794,"depth":21,"text":12795},{"id":13121,"depth":21,"text":13122},{"id":13301,"depth":21,"text":13302},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12020,"description":20},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13508,"title":13509,"body":13510,"description":20,"extension":24,"meta":14591,"navigation":27,"path":14592,"seo":14593,"stem":14594,"__hash__":14595},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13511,"toc":14583},[13512,13515,13519,13522,13527,13759,13761,13772,13776,13779,13787,13891,13894,13898,13901,13905,13908,13913,13935,13941,14268,14271,14275,14283,14580],[39,13513,13509],{"id":13514},"_7函数高级部分",[43,13516,13518],{"id":13517},"_71函数默认参数","7.1函数默认参数",[10,13520,13521],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[10,13523,5169,13524],{},[98,13525,13526],{}," 返回值类型  函数名 （参数= 默认值）{}",[92,13528,13530],{"className":94,"code":13529,"language":96,"meta":20,"style":20},"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",[98,13531,13532,13567,13582,13586,13590,13595,13600,13629,13649,13659,13663,13667,13675,13679,13707,13729,13733,13743,13747,13755],{"__ignoreMap":20},[101,13533,13534,13536,13538,13540,13542,13544,13546,13548,13550,13553,13555,13557,13559,13561,13563,13565],{"class":103,"line":104},[101,13535,115],{"class":107},[101,13537,11373],{"class":1950},[101,13539,112],{"class":111},[101,13541,115],{"class":107},[101,13543,1385],{"class":5204},[101,13545,12423],{"class":111},[101,13547,115],{"class":107},[101,13549,2820],{"class":5204},[101,13551,13552],{"class":107}," =",[101,13554,2025],{"class":160},[101,13556,12423],{"class":111},[101,13558,115],{"class":107},[101,13560,2836],{"class":5204},[101,13562,13552],{"class":107},[101,13564,2025],{"class":160},[101,13566,12430],{"class":111},[101,13568,13569,13571,13573,13575,13577,13579],{"class":103,"line":21},[101,13570,4077],{"class":107},[101,13572,10857],{"class":111},[101,13574,592],{"class":107},[101,13576,10870],{"class":111},[101,13578,592],{"class":107},[101,13580,13581],{"class":111}," c;\n",[101,13583,13584],{"class":103,"line":1166},[101,13585,1552],{"class":111},[101,13587,13588],{"class":103,"line":1181},[101,13589,2387],{"emptyLinePlaceholder":27},[101,13591,13592],{"class":103,"line":1187},[101,13593,13594],{"class":170},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[101,13596,13597],{"class":103,"line":1201},[101,13598,13599],{"class":170},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[101,13601,13602,13604,13607,13609,13611,13613,13615,13617,13619,13621,13623,13625,13627],{"class":103,"line":1207},[101,13603,115],{"class":107},[101,13605,13606],{"class":1950}," func2",[101,13608,112],{"class":111},[101,13610,115],{"class":107},[101,13612,1385],{"class":5204},[101,13614,13552],{"class":107},[101,13616,2025],{"class":160},[101,13618,12423],{"class":111},[101,13620,115],{"class":107},[101,13622,2820],{"class":5204},[101,13624,13552],{"class":107},[101,13626,2025],{"class":160},[101,13628,2706],{"class":111},[101,13630,13631,13633,13635,13637,13639,13641,13643,13645,13647],{"class":103,"line":1298},[101,13632,115],{"class":107},[101,13634,13606],{"class":1950},[101,13636,112],{"class":111},[101,13638,115],{"class":107},[101,13640,1385],{"class":5204},[101,13642,12423],{"class":111},[101,13644,115],{"class":107},[101,13646,2820],{"class":5204},[101,13648,12430],{"class":111},[101,13650,13651,13653,13655,13657],{"class":103,"line":1304},[101,13652,4077],{"class":107},[101,13654,10857],{"class":111},[101,13656,592],{"class":107},[101,13658,12451],{"class":111},[101,13660,13661],{"class":103,"line":1316},[101,13662,1552],{"class":111},[101,13664,13665],{"class":103,"line":1599},[101,13666,2387],{"emptyLinePlaceholder":27},[101,13668,13669,13671,13673],{"class":103,"line":1604},[101,13670,115],{"class":107},[101,13672,1960],{"class":1950},[101,13674,10841],{"class":111},[101,13676,13677],{"class":103,"line":1610},[101,13678,2387],{"emptyLinePlaceholder":27},[101,13680,13681,13683,13685,13688,13690,13692,13694,13696,13698,13700,13703,13705],{"class":103,"line":1615},[101,13682,6517],{"class":111},[101,13684,1155],{"class":107},[101,13686,13687],{"class":216}," \"ret = \"",[101,13689,1431],{"class":107},[101,13691,11373],{"class":1950},[101,13693,112],{"class":111},[101,13695,811],{"class":160},[101,13697,12423],{"class":111},[101,13699,811],{"class":160},[101,13701,13702],{"class":111},") ",[101,13704,1155],{"class":107},[101,13706,8828],{"class":111},[101,13708,13709,13711,13713,13715,13717,13719,13721,13723,13725,13727],{"class":103,"line":1629},[101,13710,6517],{"class":111},[101,13712,1155],{"class":107},[101,13714,13687],{"class":216},[101,13716,1431],{"class":107},[101,13718,11373],{"class":1950},[101,13720,112],{"class":111},[101,13722,422],{"class":160},[101,13724,13702],{"class":111},[101,13726,1155],{"class":107},[101,13728,8828],{"class":111},[101,13730,13731],{"class":103,"line":1634},[101,13732,2387],{"emptyLinePlaceholder":27},[101,13734,13735,13737,13739,13741],{"class":103,"line":1640},[101,13736,2290],{"class":1950},[101,13738,112],{"class":111},[101,13740,2295],{"class":216},[101,13742,2706],{"class":111},[101,13744,13745],{"class":103,"line":1661},[101,13746,2387],{"emptyLinePlaceholder":27},[101,13748,13749,13751,13753],{"class":103,"line":1666},[101,13750,4077],{"class":107},[101,13752,4080],{"class":160},[101,13754,1277],{"class":111},[101,13756,13757],{"class":103,"line":1680},[101,13758,1552],{"class":111},[10,13760,11320],{},[55,13762,13763,13766,13769],{},[58,13764,13765],{},"我传就用我；没传就用你",[58,13767,13768],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[58,13770,13771],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[43,13773,13775],{"id":13774},"_72函数的占位参数","7.2函数的占位参数",[10,13777,13778],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[10,13780,13781,13783,13784],{},[261,13782,5169],{}," ",[98,13785,13786],{},"返回值类型 函数名 (数据类型){}",[92,13788,13790],{"className":94,"code":13789,"language":96,"meta":20,"style":20},"\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",[98,13791,13792,13797,13815,13828,13832,13840,13844,13861,13865,13875,13879,13887],{"__ignoreMap":20},[101,13793,13794],{"class":103,"line":104},[101,13795,13796],{"class":170},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[101,13798,13799,13801,13803,13805,13807,13809,13811,13813],{"class":103,"line":21},[101,13800,5352],{"class":107},[101,13802,11373],{"class":1950},[101,13804,112],{"class":111},[101,13806,115],{"class":107},[101,13808,1385],{"class":5204},[101,13810,12423],{"class":111},[101,13812,115],{"class":107},[101,13814,12430],{"class":111},[101,13816,13817,13819,13821,13824,13826],{"class":103,"line":1166},[101,13818,6517],{"class":111},[101,13820,1155],{"class":107},[101,13822,13823],{"class":216}," \"this is func\"",[101,13825,1431],{"class":107},[101,13827,8828],{"class":111},[101,13829,13830],{"class":103,"line":1181},[101,13831,1552],{"class":111},[101,13833,13834,13836,13838],{"class":103,"line":1187},[101,13835,115],{"class":107},[101,13837,1960],{"class":1950},[101,13839,10841],{"class":111},[101,13841,13842],{"class":103,"line":1201},[101,13843,2387],{"emptyLinePlaceholder":27},[101,13845,13846,13848,13850,13852,13854,13856,13858],{"class":103,"line":1207},[101,13847,13273],{"class":1950},[101,13849,112],{"class":111},[101,13851,557],{"class":160},[101,13853,489],{"class":111},[101,13855,557],{"class":160},[101,13857,5954],{"class":111},[101,13859,13860],{"class":170}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[101,13862,13863],{"class":103,"line":1298},[101,13864,2387],{"emptyLinePlaceholder":27},[101,13866,13867,13869,13871,13873],{"class":103,"line":1304},[101,13868,2290],{"class":1950},[101,13870,112],{"class":111},[101,13872,2295],{"class":216},[101,13874,2706],{"class":111},[101,13876,13877],{"class":103,"line":1316},[101,13878,2387],{"emptyLinePlaceholder":27},[101,13880,13881,13883,13885],{"class":103,"line":1599},[101,13882,4077],{"class":107},[101,13884,4080],{"class":160},[101,13886,1277],{"class":111},[101,13888,13889],{"class":103,"line":1604},[101,13890,1552],{"class":111},[10,13892,13893],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[43,13895,13897],{"id":13896},"_73函数重载","7.3函数重载",[10,13899,13900],{},"意思是函数名是可以相同的",[72,13902,13904],{"id":13903},"_731基本语法","7.3.1基本语法",[10,13906,13907],{},"作用：函数名可以相同，提高复用性",[10,13909,13910],{},[261,13911,13912],{},"函数重载满足条件：",[1118,13914,13915,13918,13921],{},[58,13916,13917],{},"同一个作用域下",[58,13919,13920],{},"函数名称相同",[58,13922,13923,13924,13927,13928,13931,13932],{},"函数参数",[261,13925,13926],{},"类型不同","  或者 ",[261,13929,13930],{},"个数不同"," 或者 ",[261,13933,13934],{},"顺序不同",[10,13936,13937,13940],{},[261,13938,13939],{},"注意:","  函数的返回值不可以作为函数重载的条件",[92,13942,13944],{"className":9929,"code":13943,"language":9931,"meta":20,"style":20},"\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",[98,13945,13946,13951,13959,13963,13976,13980,13994,13998,14011,14015,14030,14034,14047,14051,14072,14076,14089,14093,14113,14117,14130,14134,14138,14143,14148,14153,14158,14163,14167,14171,14179,14183,14189,14199,14209,14223,14238,14242,14252,14256,14264],{"__ignoreMap":20},[101,13947,13948],{"class":103,"line":104},[101,13949,13950],{"class":170},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[101,13952,13953,13955,13957],{"class":103,"line":21},[101,13954,5352],{"class":107},[101,13956,11373],{"class":1950},[101,13958,1963],{"class":111},[101,13960,13961],{"class":103,"line":1166},[101,13962,1533],{"class":111},[101,13964,13965,13967,13969,13972,13974],{"class":103,"line":1181},[101,13966,6517],{"class":111},[101,13968,1155],{"class":107},[101,13970,13971],{"class":216}," \"func 的调用！\"",[101,13973,1431],{"class":107},[101,13975,8828],{"class":111},[101,13977,13978],{"class":103,"line":1187},[101,13979,1552],{"class":111},[101,13981,13982,13984,13986,13988,13990,13992],{"class":103,"line":1201},[101,13983,5352],{"class":107},[101,13985,11373],{"class":1950},[101,13987,112],{"class":111},[101,13989,115],{"class":107},[101,13991,1385],{"class":5204},[101,13993,118],{"class":111},[101,13995,13996],{"class":103,"line":1207},[101,13997,1533],{"class":111},[101,13999,14000,14002,14004,14007,14009],{"class":103,"line":1298},[101,14001,6517],{"class":111},[101,14003,1155],{"class":107},[101,14005,14006],{"class":216}," \"func (int a) 的调用！\"",[101,14008,1431],{"class":107},[101,14010,8828],{"class":111},[101,14012,14013],{"class":103,"line":1304},[101,14014,1552],{"class":111},[101,14016,14017,14019,14021,14023,14026,14028],{"class":103,"line":1316},[101,14018,5352],{"class":107},[101,14020,11373],{"class":1950},[101,14022,112],{"class":111},[101,14024,14025],{"class":107},"double",[101,14027,1385],{"class":5204},[101,14029,118],{"class":111},[101,14031,14032],{"class":103,"line":1599},[101,14033,1533],{"class":111},[101,14035,14036,14038,14040,14043,14045],{"class":103,"line":1604},[101,14037,6517],{"class":111},[101,14039,1155],{"class":107},[101,14041,14042],{"class":216}," \"func (double a)的调用！\"",[101,14044,1431],{"class":107},[101,14046,8828],{"class":111},[101,14048,14049],{"class":103,"line":1610},[101,14050,1552],{"class":111},[101,14052,14053,14055,14057,14059,14061,14063,14066,14068,14070],{"class":103,"line":1615},[101,14054,5352],{"class":107},[101,14056,11373],{"class":1950},[101,14058,112],{"class":111},[101,14060,115],{"class":107},[101,14062,1385],{"class":5204},[101,14064,14065],{"class":111}," ,",[101,14067,14025],{"class":107},[101,14069,2820],{"class":5204},[101,14071,118],{"class":111},[101,14073,14074],{"class":103,"line":1629},[101,14075,1533],{"class":111},[101,14077,14078,14080,14082,14085,14087],{"class":103,"line":1634},[101,14079,6517],{"class":111},[101,14081,1155],{"class":107},[101,14083,14084],{"class":216}," \"func (int a ,double b) 的调用！\"",[101,14086,1431],{"class":107},[101,14088,8828],{"class":111},[101,14090,14091],{"class":103,"line":1640},[101,14092,1552],{"class":111},[101,14094,14095,14097,14099,14101,14103,14105,14107,14109,14111],{"class":103,"line":1661},[101,14096,5352],{"class":107},[101,14098,11373],{"class":1950},[101,14100,112],{"class":111},[101,14102,14025],{"class":107},[101,14104,1385],{"class":5204},[101,14106,14065],{"class":111},[101,14108,115],{"class":107},[101,14110,2820],{"class":5204},[101,14112,118],{"class":111},[101,14114,14115],{"class":103,"line":1666},[101,14116,1533],{"class":111},[101,14118,14119,14121,14123,14126,14128],{"class":103,"line":1680},[101,14120,6517],{"class":111},[101,14122,1155],{"class":107},[101,14124,14125],{"class":216}," \"func (double a ,int b)的调用！\"",[101,14127,1431],{"class":107},[101,14129,8828],{"class":111},[101,14131,14132],{"class":103,"line":1685},[101,14133,1552],{"class":111},[101,14135,14136],{"class":103,"line":1714},[101,14137,2387],{"emptyLinePlaceholder":27},[101,14139,14140],{"class":103,"line":1719},[101,14141,14142],{"class":170},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[101,14144,14145],{"class":103,"line":1736},[101,14146,14147],{"class":170},"\u002F\u002Fint func(double a, int b)\n",[101,14149,14150],{"class":103,"line":1741},[101,14151,14152],{"class":170},"\u002F\u002F{\n",[101,14154,14155],{"class":103,"line":1746},[101,14156,14157],{"class":170},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[101,14159,14160],{"class":103,"line":1751},[101,14161,14162],{"class":170},"\u002F\u002F}\n",[101,14164,14165],{"class":103,"line":1765},[101,14166,2387],{"emptyLinePlaceholder":27},[101,14168,14169],{"class":103,"line":1770},[101,14170,2387],{"emptyLinePlaceholder":27},[101,14172,14173,14175,14177],{"class":103,"line":2564},[101,14174,115],{"class":107},[101,14176,1960],{"class":1950},[101,14178,10841],{"class":111},[101,14180,14181],{"class":103,"line":2578},[101,14182,2387],{"emptyLinePlaceholder":27},[101,14184,14185,14187],{"class":103,"line":2586},[101,14186,13273],{"class":1950},[101,14188,5624],{"class":111},[101,14190,14191,14193,14195,14197],{"class":103,"line":2591},[101,14192,13273],{"class":1950},[101,14194,112],{"class":111},[101,14196,557],{"class":160},[101,14198,2706],{"class":111},[101,14200,14201,14203,14205,14207],{"class":103,"line":2597},[101,14202,13273],{"class":1950},[101,14204,112],{"class":111},[101,14206,161],{"class":160},[101,14208,2706],{"class":111},[101,14210,14211,14213,14215,14217,14219,14221],{"class":103,"line":2603},[101,14212,13273],{"class":1950},[101,14214,112],{"class":111},[101,14216,557],{"class":160},[101,14218,489],{"class":111},[101,14220,161],{"class":160},[101,14222,2706],{"class":111},[101,14224,14225,14227,14229,14231,14234,14236],{"class":103,"line":2608},[101,14226,13273],{"class":1950},[101,14228,112],{"class":111},[101,14230,161],{"class":160},[101,14232,14233],{"class":111}," , ",[101,14235,557],{"class":160},[101,14237,2706],{"class":111},[101,14239,14240],{"class":103,"line":7936},[101,14241,13198],{"class":111},[101,14243,14244,14246,14248,14250],{"class":103,"line":7960},[101,14245,2290],{"class":1950},[101,14247,112],{"class":111},[101,14249,2295],{"class":216},[101,14251,2706],{"class":111},[101,14253,14254],{"class":103,"line":7965},[101,14255,2387],{"emptyLinePlaceholder":27},[101,14257,14258,14260,14262],{"class":103,"line":7971},[101,14259,4077],{"class":107},[101,14261,4080],{"class":160},[101,14263,1277],{"class":111},[101,14265,14266],{"class":103,"line":7998},[101,14267,1552],{"class":111},[10,14269,14270],{},"重点：函数返回值不可以作为函数重载条件！",[72,14272,14274],{"id":14273},"_732注意事项","7.3.2注意事项",[1118,14276,14277,14280],{},[58,14278,14279],{},"引用作为重载条件!!!",[58,14281,14282],{},"函数重载碰到函数默认参数",[92,14284,14286],{"className":94,"code":14285,"language":96,"meta":20,"style":20},"\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",[98,14287,14288,14293,14298,14302,14318,14322,14335,14339,14343,14361,14365,14378,14382,14386,14390,14395,14399,14423,14427,14440,14444,14448,14462,14466,14479,14483,14487,14495,14499,14511,14521,14534,14538,14542,14550,14554,14564,14568,14576],{"__ignoreMap":20},[101,14289,14290],{"class":103,"line":104},[101,14291,14292],{"class":170},"\u002F\u002F函数重载注意事项\n",[101,14294,14295],{"class":103,"line":21},[101,14296,14297],{"class":170},"\u002F\u002F1、引用作为重载条件\n",[101,14299,14300],{"class":103,"line":1166},[101,14301,2387],{"emptyLinePlaceholder":27},[101,14303,14304,14306,14308,14310,14312,14314,14316],{"class":103,"line":1181},[101,14305,5352],{"class":107},[101,14307,11373],{"class":1950},[101,14309,112],{"class":111},[101,14311,115],{"class":107},[101,14313,10572],{"class":107},[101,14315,14],{"class":5204},[101,14317,118],{"class":111},[101,14319,14320],{"class":103,"line":1187},[101,14321,1533],{"class":111},[101,14323,14324,14326,14328,14331,14333],{"class":103,"line":1201},[101,14325,6517],{"class":111},[101,14327,1155],{"class":107},[101,14329,14330],{"class":216}," \"func (int &a) 调用 \"",[101,14332,1431],{"class":107},[101,14334,8828],{"class":111},[101,14336,14337],{"class":103,"line":1207},[101,14338,1552],{"class":111},[101,14340,14341],{"class":103,"line":1298},[101,14342,2387],{"emptyLinePlaceholder":27},[101,14344,14345,14347,14349,14351,14353,14355,14357,14359],{"class":103,"line":1304},[101,14346,5352],{"class":107},[101,14348,11373],{"class":1950},[101,14350,112],{"class":111},[101,14352,6780],{"class":107},[101,14354,2369],{"class":107},[101,14356,10572],{"class":107},[101,14358,14],{"class":5204},[101,14360,118],{"class":111},[101,14362,14363],{"class":103,"line":1316},[101,14364,1533],{"class":111},[101,14366,14367,14369,14371,14374,14376],{"class":103,"line":1599},[101,14368,6517],{"class":111},[101,14370,1155],{"class":107},[101,14372,14373],{"class":216}," \"func (const int &a) 调用 \"",[101,14375,1431],{"class":107},[101,14377,8828],{"class":111},[101,14379,14380],{"class":103,"line":1604},[101,14381,1552],{"class":111},[101,14383,14384],{"class":103,"line":1610},[101,14385,2387],{"emptyLinePlaceholder":27},[101,14387,14388],{"class":103,"line":1615},[101,14389,2387],{"emptyLinePlaceholder":27},[101,14391,14392],{"class":103,"line":1629},[101,14393,14394],{"class":170},"\u002F\u002F2、函数重载碰到函数默认参数\n",[101,14396,14397],{"class":103,"line":1634},[101,14398,2387],{"emptyLinePlaceholder":27},[101,14400,14401,14403,14405,14407,14409,14411,14413,14415,14417,14419,14421],{"class":103,"line":1640},[101,14402,5352],{"class":107},[101,14404,13606],{"class":1950},[101,14406,112],{"class":111},[101,14408,115],{"class":107},[101,14410,1385],{"class":5204},[101,14412,12423],{"class":111},[101,14414,115],{"class":107},[101,14416,2820],{"class":5204},[101,14418,13552],{"class":107},[101,14420,2025],{"class":160},[101,14422,118],{"class":111},[101,14424,14425],{"class":103,"line":1661},[101,14426,1533],{"class":111},[101,14428,14429,14431,14433,14436,14438],{"class":103,"line":1666},[101,14430,6517],{"class":111},[101,14432,1155],{"class":107},[101,14434,14435],{"class":216}," \"func2(int a, int b = 10) 调用\"",[101,14437,1431],{"class":107},[101,14439,8828],{"class":111},[101,14441,14442],{"class":103,"line":1680},[101,14443,1552],{"class":111},[101,14445,14446],{"class":103,"line":1685},[101,14447,2387],{"emptyLinePlaceholder":27},[101,14449,14450,14452,14454,14456,14458,14460],{"class":103,"line":1714},[101,14451,5352],{"class":107},[101,14453,13606],{"class":1950},[101,14455,112],{"class":111},[101,14457,115],{"class":107},[101,14459,1385],{"class":5204},[101,14461,118],{"class":111},[101,14463,14464],{"class":103,"line":1719},[101,14465,1533],{"class":111},[101,14467,14468,14470,14472,14475,14477],{"class":103,"line":1736},[101,14469,6517],{"class":111},[101,14471,1155],{"class":107},[101,14473,14474],{"class":216}," \"func2(int a) 调用\"",[101,14476,1431],{"class":107},[101,14478,8828],{"class":111},[101,14480,14481],{"class":103,"line":1741},[101,14482,1552],{"class":111},[101,14484,14485],{"class":103,"line":1746},[101,14486,2387],{"emptyLinePlaceholder":27},[101,14488,14489,14491,14493],{"class":103,"line":1751},[101,14490,115],{"class":107},[101,14492,1960],{"class":1950},[101,14494,10841],{"class":111},[101,14496,14497],{"class":103,"line":1765},[101,14498,13198],{"class":111},[101,14500,14501,14503,14505,14507,14509],{"class":103,"line":1770},[101,14502,1972],{"class":107},[101,14504,10857],{"class":111},[101,14506,157],{"class":107},[101,14508,2025],{"class":160},[101,14510,1277],{"class":111},[101,14512,14513,14515,14518],{"class":103,"line":2564},[101,14514,13273],{"class":1950},[101,14516,14517],{"class":111},"(a);",[101,14519,14520],{"class":170}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[101,14522,14523,14525,14527,14529,14531],{"class":103,"line":2578},[101,14524,13273],{"class":1950},[101,14526,112],{"class":111},[101,14528,557],{"class":160},[101,14530,5954],{"class":111},[101,14532,14533],{"class":170},"\u002F\u002F调用有const   10是个常量\n",[101,14535,14536],{"class":103,"line":2586},[101,14537,2387],{"emptyLinePlaceholder":27},[101,14539,14540],{"class":103,"line":2591},[101,14541,2387],{"emptyLinePlaceholder":27},[101,14543,14544,14547],{"class":103,"line":2597},[101,14545,14546],{"class":170},"    \u002F\u002Ffunc2(10);",[101,14548,14549],{"class":170}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[101,14551,14552],{"class":103,"line":2603},[101,14553,2387],{"emptyLinePlaceholder":27},[101,14555,14556,14558,14560,14562],{"class":103,"line":2608},[101,14557,2290],{"class":1950},[101,14559,112],{"class":111},[101,14561,2295],{"class":216},[101,14563,2706],{"class":111},[101,14565,14566],{"class":103,"line":7936},[101,14567,2387],{"emptyLinePlaceholder":27},[101,14569,14570,14572,14574],{"class":103,"line":7960},[101,14571,4077],{"class":107},[101,14573,4080],{"class":160},[101,14575,1277],{"class":111},[101,14577,14578],{"class":103,"line":7965},[101,14579,1552],{"class":111},[5114,14581,14582],{},"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":20,"searchDepth":21,"depth":21,"links":14584},[14585,14586,14587],{"id":13517,"depth":21,"text":13518},{"id":13774,"depth":21,"text":13775},{"id":13896,"depth":21,"text":13897,"children":14588},[14589,14590],{"id":13903,"depth":1166,"text":13904},{"id":14273,"depth":1166,"text":14274},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13509,"description":20},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14597,"title":14598,"body":14599,"description":23353,"extension":24,"meta":23354,"navigation":27,"path":23355,"seo":23356,"stem":23357,"__hash__":23358},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14600,"toc":23334},[14601,14604,14610,14617,14622,14625,14628,14631,14635,14639,14642,14645,14653,14658,14661,14668,14673,14832,14835,15088,15091,15094,15097,15102,15105,15108,15119,15124,15360,15364,15374,15377,15385,15532,15536,15539,15542,15546,15991,15995,16003,16011,16923,16930,16935,17563,17566,17569,17572,17691,17694,17781,17784,17910,17913,18007,18010,18363,18367,18375,18379,18386,18389,18392,18403,18409,18414,18426,18434,18454,18462,18479,18665,18668,18672,18675,18678,18681,18684,18687,18690,18693,19153,19159,19163,19166,19177,19764,19767,20256,20260,20263,20266,20269,20272,20275,20283,20679,20683,20686,20689,21136,21139,21142,21147,21150,21155,21158,21162,21165,21167,21173,21176,21482,21492,21533,21537,21540,21542,21575,21578,21885,21887,21902,21905,21928,21937,21943,21946,21950,21953,21956,21961,21972,21977,21985,21990,22120,22123,22126,22301,22306,22518,22522,22525,22639,22644,22883,22887,22891,22894,22897,22902,23007,23010,23013,23016,23020,23131,23134,23137,23142,23194,23197,23200,23205,23251,23254,23259,23327,23329,23332],[39,14602,14598],{"id":14603},"_8类和对象",[10,14605,14606,14607],{},"C++面向对象的三大特性为",[261,14608,14609],{},"封装、继承、多态",[10,14611,14612,14613,14616],{},"C++认为",[261,14614,14615],{},"万事万物都皆为对象","，对象上有其属性和行为",[10,14618,14619],{},[261,14620,14621],{},"例如：",[10,14623,14624],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[10,14626,14627],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[10,14629,14630],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[43,14632,14634],{"id":14633},"_81封装","8.1封装",[72,14636,14638],{"id":14637},"_811封装的意义","8.1.1封装的意义",[10,14640,14641],{},"封装是C++面向对象三大特性之一",[10,14643,14644],{},"封装的意义：",[1118,14646,14647,14650],{},[58,14648,14649],{},"将属性和行为作为一个整体，表现生活中的事物",[58,14651,14652],{},"将属性和行为加以权限控制",[10,14654,14655],{},[261,14656,14657],{},"封装意义一：",[10,14659,14660],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[10,14662,14663,13783,14665],{},[261,14664,5169],{},[98,14666,14667],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[55,14669,14670],{},[58,14671,14672],{},"**示例1：**设计一个圆类，求圆的周长",[92,14674,14676],{"className":94,"code":14675,"language":96,"meta":20,"style":20},"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",[98,14677,14678,14686,14690,14695,14700,14705,14710,14717,14722,14732,14736,14754,14758,14762,14770,14774,14779,14784,14789,14794,14805,14828],{"__ignoreMap":20},[101,14679,14680,14683],{"class":103,"line":104},[101,14681,14682],{"class":107},"class",[101,14684,14685],{"class":1950}," Circle\n",[101,14687,14688],{"class":103,"line":21},[101,14689,1533],{"class":111},[101,14691,14692],{"class":103,"line":1166},[101,14693,14694],{"class":170},"    \u002F\u002F访问权限\n",[101,14696,14697],{"class":103,"line":1181},[101,14698,14699],{"class":170},"    \u002F\u002F公共权限\n",[101,14701,14702],{"class":103,"line":1187},[101,14703,14704],{"class":107},"public:\n",[101,14706,14707],{"class":103,"line":1201},[101,14708,14709],{"class":170},"    \u002F\u002F属性\n",[101,14711,14712,14714],{"class":103,"line":1207},[101,14713,1972],{"class":107},[101,14715,14716],{"class":111}," m_r;\n",[101,14718,14719],{"class":103,"line":1298},[101,14720,14721],{"class":170},"    \u002F\u002F行为\n",[101,14723,14724,14727,14730],{"class":103,"line":1304},[101,14725,14726],{"class":107},"    double",[101,14728,14729],{"class":1950}," calculateZC",[101,14731,1963],{"class":111},[101,14733,14734],{"class":103,"line":1316},[101,14735,2017],{"class":111},[101,14737,14738,14741,14744,14746,14749,14751],{"class":103,"line":1599},[101,14739,14740],{"class":107},"        return",[101,14742,14743],{"class":160}," 2",[101,14745,566],{"class":107},[101,14747,14748],{"class":111},"PI",[101,14750,566],{"class":107},[101,14752,14753],{"class":111},"m_r;\n",[101,14755,14756],{"class":103,"line":1604},[101,14757,2174],{"class":111},[101,14759,14760],{"class":103,"line":1610},[101,14761,3982],{"class":111},[101,14763,14764,14766,14768],{"class":103,"line":1615},[101,14765,115],{"class":107},[101,14767,1960],{"class":1950},[101,14769,1963],{"class":111},[101,14771,14772],{"class":103,"line":1629},[101,14773,1533],{"class":111},[101,14775,14776],{"class":103,"line":1634},[101,14777,14778],{"class":170},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[101,14780,14781],{"class":103,"line":1640},[101,14782,14783],{"class":170},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[101,14785,14786],{"class":103,"line":1661},[101,14787,14788],{"class":111},"    Circle c1;\n",[101,14790,14791],{"class":103,"line":1666},[101,14792,14793],{"class":170},"    \u002F\u002F给圆对象 的属性进行赋值\n",[101,14795,14796,14799,14801,14803],{"class":103,"line":1680},[101,14797,14798],{"class":111},"    c1.m_r",[101,14800,157],{"class":107},[101,14802,557],{"class":160},[101,14804,1277],{"class":111},[101,14806,14807,14809,14811,14814,14816,14819,14822,14824,14826],{"class":103,"line":1685},[101,14808,1538],{"class":111},[101,14810,1155],{"class":107},[101,14812,14813],{"class":216},"\"圆的周长\"",[101,14815,1155],{"class":107},[101,14817,14818],{"class":111},"c1.",[101,14820,14821],{"class":1950},"calculateZC",[101,14823,2414],{"class":111},[101,14825,1155],{"class":107},[101,14827,1178],{"class":111},[101,14829,14830],{"class":103,"line":1714},[101,14831,1552],{"class":111},[10,14833,14834],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[92,14836,14838],{"className":94,"code":14837,"language":96,"meta":20,"style":20},"#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",[98,14839,14840,14846,14856,14862,14868,14872,14876,14881,14888,14893,14911,14915,14925,14929,14934,14950,14954,14964,14968,14973,14981,14985,15017,15021,15025,15033,15037,15042,15047,15061,15075,15084],{"__ignoreMap":20},[101,14841,14842,14844],{"class":103,"line":104},[101,14843,1936],{"class":107},[101,14845,1939],{"class":216},[101,14847,14848,14850,14852,14854],{"class":103,"line":21},[101,14849,1944],{"class":107},[101,14851,1947],{"class":107},[101,14853,1951],{"class":1950},[101,14855,1277],{"class":111},[101,14857,14858,14860],{"class":103,"line":1166},[101,14859,1936],{"class":107},[101,14861,7737],{"class":216},[101,14863,14864,14866],{"class":103,"line":1181},[101,14865,14682],{"class":107},[101,14867,7750],{"class":1950},[101,14869,14870],{"class":103,"line":1187},[101,14871,1533],{"class":111},[101,14873,14874],{"class":103,"line":1201},[101,14875,14704],{"class":107},[101,14877,14878],{"class":103,"line":1207},[101,14879,14880],{"class":111},"    string m_name;\n",[101,14882,14883,14885],{"class":103,"line":1298},[101,14884,1972],{"class":107},[101,14886,14887],{"class":111}," m_id;\n",[101,14889,14890],{"class":103,"line":1304},[101,14891,14892],{"class":170},"    \u002F\u002F赋值姓名\n",[101,14894,14895,14898,14901,14903,14906,14909],{"class":103,"line":1316},[101,14896,14897],{"class":107},"    void",[101,14899,14900],{"class":1950}," setName",[101,14902,112],{"class":111},[101,14904,14905],{"class":1950},"string",[101,14907,14908],{"class":5204}," name",[101,14910,118],{"class":111},[101,14912,14913],{"class":103,"line":1599},[101,14914,2017],{"class":111},[101,14916,14917,14920,14922],{"class":103,"line":1604},[101,14918,14919],{"class":111},"        m_name",[101,14921,157],{"class":107},[101,14923,14924],{"class":111},"name;\n",[101,14926,14927],{"class":103,"line":1610},[101,14928,2174],{"class":111},[101,14930,14931],{"class":103,"line":1615},[101,14932,14933],{"class":170},"    \u002F\u002F赋值学号\n",[101,14935,14936,14938,14941,14943,14945,14948],{"class":103,"line":1629},[101,14937,14897],{"class":107},[101,14939,14940],{"class":1950}," setId",[101,14942,112],{"class":111},[101,14944,115],{"class":107},[101,14946,14947],{"class":5204}," id",[101,14949,118],{"class":111},[101,14951,14952],{"class":103,"line":1634},[101,14953,2017],{"class":111},[101,14955,14956,14959,14961],{"class":103,"line":1640},[101,14957,14958],{"class":111},"        m_id",[101,14960,157],{"class":107},[101,14962,14963],{"class":111},"id;\n",[101,14965,14966],{"class":103,"line":1661},[101,14967,2174],{"class":111},[101,14969,14970],{"class":103,"line":1666},[101,14971,14972],{"class":170},"    \u002F\u002F打印学生信息\n",[101,14974,14975,14977,14979],{"class":103,"line":1680},[101,14976,14897],{"class":107},[101,14978,9603],{"class":1950},[101,14980,1963],{"class":111},[101,14982,14983],{"class":103,"line":1685},[101,14984,2017],{"class":111},[101,14986,14987,14989,14991,14994,14996,14999,15001,15003,15005,15008,15010,15013,15015],{"class":103,"line":1714},[101,14988,3438],{"class":111},[101,14990,1155],{"class":107},[101,14992,14993],{"class":216},"\"姓名：\"",[101,14995,1155],{"class":107},[101,14997,14998],{"class":111},"m_name",[101,15000,1155],{"class":107},[101,15002,4346],{"class":216},[101,15004,1155],{"class":107},[101,15006,15007],{"class":216},"\"学号：\"",[101,15009,1155],{"class":107},[101,15011,15012],{"class":111},"m_id",[101,15014,1155],{"class":107},[101,15016,1178],{"class":111},[101,15018,15019],{"class":103,"line":1719},[101,15020,2174],{"class":111},[101,15022,15023],{"class":103,"line":1736},[101,15024,3982],{"class":111},[101,15026,15027,15029,15031],{"class":103,"line":1741},[101,15028,115],{"class":107},[101,15030,1960],{"class":1950},[101,15032,1963],{"class":111},[101,15034,15035],{"class":103,"line":1746},[101,15036,1533],{"class":111},[101,15038,15039],{"class":103,"line":1751},[101,15040,15041],{"class":170},"    \u002F\u002F实例化\n",[101,15043,15044],{"class":103,"line":1765},[101,15045,15046],{"class":111},"    Student s1;\n",[101,15048,15049,15052,15055,15057,15059],{"class":103,"line":1770},[101,15050,15051],{"class":111},"    s1.",[101,15053,15054],{"class":1950},"setName",[101,15056,112],{"class":111},[101,15058,7904],{"class":216},[101,15060,2706],{"class":111},[101,15062,15063,15065,15068,15070,15073],{"class":103,"line":2564},[101,15064,15051],{"class":111},[101,15066,15067],{"class":1950},"setId",[101,15069,112],{"class":111},[101,15071,15072],{"class":160},"123456",[101,15074,2706],{"class":111},[101,15076,15077,15079,15082],{"class":103,"line":2578},[101,15078,15051],{"class":111},[101,15080,15081],{"class":1950},"printInfo",[101,15083,5624],{"class":111},[101,15085,15086],{"class":103,"line":2586},[101,15087,1552],{"class":111},[10,15089,15090],{},"类中的属性和行为统称为成员",[10,15092,15093],{},"属性：成员属性(成员变量)",[10,15095,15096],{},"方法：成员函数(成员方法)",[10,15098,15099],{},[261,15100,15101],{},"封装意义二：",[10,15103,15104],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[10,15106,15107],{},"访问权限有三种：",[55,15109,15110,15113,15116],{},[58,15111,15112],{},"public        公共权限",[58,15114,15115],{},"protected 保护权限",[58,15117,15118],{},"private      私有权限",[10,15120,15121],{},[261,15122,15123],{},"示例：",[92,15125,15127],{"className":9929,"code":15126,"language":9931,"meta":20,"style":20},"\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",[98,15128,15129,15134,15139,15144,15149,15153,15160,15164,15169,15173,15178,15182,15187,15192,15197,15201,15206,15211,15218,15222,15226,15234,15238,15249,15261,15273,15277,15281,15285,15293,15297,15302,15314,15322,15330,15334,15344,15348,15356],{"__ignoreMap":20},[101,15130,15131],{"class":103,"line":104},[101,15132,15133],{"class":170},"\u002F\u002F三种权限\n",[101,15135,15136],{"class":103,"line":21},[101,15137,15138],{"class":170},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[101,15140,15141],{"class":103,"line":1166},[101,15142,15143],{"class":170},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[101,15145,15146],{"class":103,"line":1181},[101,15147,15148],{"class":170},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[101,15150,15151],{"class":103,"line":1187},[101,15152,2387],{"emptyLinePlaceholder":27},[101,15154,15155,15157],{"class":103,"line":1201},[101,15156,14682],{"class":107},[101,15158,15159],{"class":1950}," Person\n",[101,15161,15162],{"class":103,"line":1207},[101,15163,1533],{"class":111},[101,15165,15166],{"class":103,"line":1298},[101,15167,15168],{"class":170},"    \u002F\u002F姓名  公共权限\n",[101,15170,15171],{"class":103,"line":1304},[101,15172,14704],{"class":107},[101,15174,15175],{"class":103,"line":1316},[101,15176,15177],{"class":111},"    string m_Name;\n",[101,15179,15180],{"class":103,"line":1599},[101,15181,2387],{"emptyLinePlaceholder":27},[101,15183,15184],{"class":103,"line":1604},[101,15185,15186],{"class":170},"    \u002F\u002F汽车  保护权限\n",[101,15188,15189],{"class":103,"line":1610},[101,15190,15191],{"class":107},"protected:\n",[101,15193,15194],{"class":103,"line":1615},[101,15195,15196],{"class":111},"    string m_Car;\n",[101,15198,15199],{"class":103,"line":1629},[101,15200,2387],{"emptyLinePlaceholder":27},[101,15202,15203],{"class":103,"line":1634},[101,15204,15205],{"class":170},"    \u002F\u002F银行卡密码  私有权限\n",[101,15207,15208],{"class":103,"line":1640},[101,15209,15210],{"class":107},"private:\n",[101,15212,15213,15215],{"class":103,"line":1661},[101,15214,1972],{"class":107},[101,15216,15217],{"class":111}," m_Password;\n",[101,15219,15220],{"class":103,"line":1666},[101,15221,2387],{"emptyLinePlaceholder":27},[101,15223,15224],{"class":103,"line":1680},[101,15225,14704],{"class":107},[101,15227,15228,15230,15232],{"class":103,"line":1685},[101,15229,14897],{"class":107},[101,15231,11373],{"class":1950},[101,15233,1963],{"class":111},[101,15235,15236],{"class":103,"line":1714},[101,15237,2017],{"class":111},[101,15239,15240,15243,15245,15247],{"class":103,"line":1719},[101,15241,15242],{"class":111},"        m_Name ",[101,15244,157],{"class":107},[101,15246,8926],{"class":216},[101,15248,1277],{"class":111},[101,15250,15251,15254,15256,15259],{"class":103,"line":1736},[101,15252,15253],{"class":111},"        m_Car ",[101,15255,157],{"class":107},[101,15257,15258],{"class":216}," \"拖拉机\"",[101,15260,1277],{"class":111},[101,15262,15263,15266,15268,15271],{"class":103,"line":1741},[101,15264,15265],{"class":111},"        m_Password ",[101,15267,157],{"class":107},[101,15269,15270],{"class":160}," 123456",[101,15272,1277],{"class":111},[101,15274,15275],{"class":103,"line":1746},[101,15276,2174],{"class":111},[101,15278,15279],{"class":103,"line":1751},[101,15280,3982],{"class":111},[101,15282,15283],{"class":103,"line":1765},[101,15284,2387],{"emptyLinePlaceholder":27},[101,15286,15287,15289,15291],{"class":103,"line":1770},[101,15288,115],{"class":107},[101,15290,1960],{"class":1950},[101,15292,10841],{"class":111},[101,15294,15295],{"class":103,"line":2564},[101,15296,2387],{"emptyLinePlaceholder":27},[101,15298,15299],{"class":103,"line":2578},[101,15300,15301],{"class":111},"    Person p;\n",[101,15303,15304,15307,15309,15312],{"class":103,"line":2586},[101,15305,15306],{"class":111},"    p.m_Name ",[101,15308,157],{"class":107},[101,15310,15311],{"class":216}," \"李四\"",[101,15313,1277],{"class":111},[101,15315,15316,15319],{"class":103,"line":2591},[101,15317,15318],{"class":170},"    \u002F\u002Fp.m_Car = \"奔驰\";",[101,15320,15321],{"class":170},"  \u002F\u002F保护权限类外访问不到\n",[101,15323,15324,15327],{"class":103,"line":2597},[101,15325,15326],{"class":170},"    \u002F\u002Fp.m_Password = 123;",[101,15328,15329],{"class":170}," \u002F\u002F私有权限类外访问不到\n",[101,15331,15332],{"class":103,"line":2603},[101,15333,2387],{"emptyLinePlaceholder":27},[101,15335,15336,15338,15340,15342],{"class":103,"line":2608},[101,15337,2290],{"class":1950},[101,15339,112],{"class":111},[101,15341,2295],{"class":216},[101,15343,2706],{"class":111},[101,15345,15346],{"class":103,"line":7936},[101,15347,2387],{"emptyLinePlaceholder":27},[101,15349,15350,15352,15354],{"class":103,"line":7960},[101,15351,4077],{"class":107},[101,15353,4080],{"class":160},[101,15355,1277],{"class":111},[101,15357,15358],{"class":103,"line":7965},[101,15359,1552],{"class":111},[72,15361,15363],{"id":15362},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[10,15365,15366,15367,15370,15371],{},"在C++中 struct和class唯一的",[261,15368,15369],{},"区别","就在于 ",[261,15372,15373],{},"默认的访问权限不同",[10,15375,15376],{},"区别：",[1118,15378,15379,15382],{},[58,15380,15381],{},"struct 默认权限为公共",[58,15383,15384],{},"class   默认权限为私有",[92,15386,15388],{"className":9929,"code":15387,"language":9931,"meta":20,"style":20},"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",[98,15389,15390,15397,15401,15411,15415,15419,15426,15430,15440,15444,15448,15456,15460,15465,15479,15483,15488,15502,15506,15516,15520,15528],{"__ignoreMap":20},[101,15391,15392,15394],{"class":103,"line":104},[101,15393,14682],{"class":107},[101,15395,15396],{"class":1950}," C1\n",[101,15398,15399],{"class":103,"line":21},[101,15400,1533],{"class":111},[101,15402,15403,15405,15408],{"class":103,"line":1166},[101,15404,1972],{"class":107},[101,15406,15407],{"class":111},"  m_A;",[101,15409,15410],{"class":170}," \u002F\u002F默认是私有权限\n",[101,15412,15413],{"class":103,"line":1181},[101,15414,3982],{"class":111},[101,15416,15417],{"class":103,"line":1187},[101,15418,2387],{"emptyLinePlaceholder":27},[101,15420,15421,15423],{"class":103,"line":1201},[101,15422,7747],{"class":107},[101,15424,15425],{"class":1950}," C2\n",[101,15427,15428],{"class":103,"line":1207},[101,15429,1533],{"class":111},[101,15431,15432,15434,15437],{"class":103,"line":1298},[101,15433,1972],{"class":107},[101,15435,15436],{"class":111}," m_A;",[101,15438,15439],{"class":170},"  \u002F\u002F默认是公共权限\n",[101,15441,15442],{"class":103,"line":1304},[101,15443,3982],{"class":111},[101,15445,15446],{"class":103,"line":1316},[101,15447,2387],{"emptyLinePlaceholder":27},[101,15449,15450,15452,15454],{"class":103,"line":1599},[101,15451,115],{"class":107},[101,15453,1960],{"class":1950},[101,15455,10841],{"class":111},[101,15457,15458],{"class":103,"line":1604},[101,15459,2387],{"emptyLinePlaceholder":27},[101,15461,15462],{"class":103,"line":1610},[101,15463,15464],{"class":111},"    C1 c1;\n",[101,15466,15467,15470,15472,15474,15476],{"class":103,"line":1615},[101,15468,15469],{"class":111},"    c1.m_A ",[101,15471,157],{"class":107},[101,15473,2025],{"class":160},[101,15475,167],{"class":111},[101,15477,15478],{"class":170}," \u002F\u002F错误，访问权限是私有\n",[101,15480,15481],{"class":103,"line":1629},[101,15482,2387],{"emptyLinePlaceholder":27},[101,15484,15485],{"class":103,"line":1634},[101,15486,15487],{"class":111},"    C2 c2;\n",[101,15489,15490,15493,15495,15497,15499],{"class":103,"line":1640},[101,15491,15492],{"class":111},"    c2.m_A ",[101,15494,157],{"class":107},[101,15496,2025],{"class":160},[101,15498,167],{"class":111},[101,15500,15501],{"class":170}," \u002F\u002F正确，访问权限是公共\n",[101,15503,15504],{"class":103,"line":1661},[101,15505,2387],{"emptyLinePlaceholder":27},[101,15507,15508,15510,15512,15514],{"class":103,"line":1666},[101,15509,2290],{"class":1950},[101,15511,112],{"class":111},[101,15513,2295],{"class":216},[101,15515,2706],{"class":111},[101,15517,15518],{"class":103,"line":1680},[101,15519,2387],{"emptyLinePlaceholder":27},[101,15521,15522,15524,15526],{"class":103,"line":1685},[101,15523,4077],{"class":107},[101,15525,4080],{"class":160},[101,15527,1277],{"class":111},[101,15529,15530],{"class":103,"line":1714},[101,15531,1552],{"class":111},[72,15533,15535],{"id":15534},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[10,15537,15538],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[10,15540,15541],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[10,15543,15544],{},[261,15545,15123],{},[92,15547,15549],{"className":9929,"code":15548,"language":9931,"meta":20,"style":20},"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",[98,15550,15551,15561,15565,15569,15574,15588,15597,15601,15611,15615,15622,15626,15630,15634,15639,15648,15655,15659,15664,15680,15703,15716,15723,15727,15736,15740,15744,15749,15765,15775,15779,15783,15787,15795,15799,15809,15813,15821,15825,15829,15837,15841,15845,15850,15863,15886,15890,15895,15908,15930,15934,15939,15953,15961,15965,15975,15979,15987],{"__ignoreMap":20},[101,15552,15553,15555,15558],{"class":103,"line":104},[101,15554,14682],{"class":107},[101,15556,15557],{"class":1950}," Person",[101,15559,15560],{"class":111}," {\n",[101,15562,15563],{"class":103,"line":21},[101,15564,14704],{"class":107},[101,15566,15567],{"class":103,"line":1166},[101,15568,2387],{"emptyLinePlaceholder":27},[101,15570,15571],{"class":103,"line":1181},[101,15572,15573],{"class":170},"    \u002F\u002F姓名设置可读可写\n",[101,15575,15576,15578,15580,15582,15584,15586],{"class":103,"line":1187},[101,15577,14897],{"class":107},[101,15579,14900],{"class":1950},[101,15581,112],{"class":111},[101,15583,14905],{"class":1950},[101,15585,14908],{"class":5204},[101,15587,12430],{"class":111},[101,15589,15590,15592,15594],{"class":103,"line":1201},[101,15591,15242],{"class":111},[101,15593,157],{"class":107},[101,15595,15596],{"class":111}," name;\n",[101,15598,15599],{"class":103,"line":1207},[101,15600,2174],{"class":111},[101,15602,15603,15606,15609],{"class":103,"line":1298},[101,15604,15605],{"class":1950},"    string",[101,15607,15608],{"class":1950}," getName",[101,15610,1963],{"class":111},[101,15612,15613],{"class":103,"line":1304},[101,15614,2017],{"class":111},[101,15616,15617,15619],{"class":103,"line":1316},[101,15618,14740],{"class":107},[101,15620,15621],{"class":111}," m_Name;\n",[101,15623,15624],{"class":103,"line":1599},[101,15625,2174],{"class":111},[101,15627,15628],{"class":103,"line":1604},[101,15629,2387],{"emptyLinePlaceholder":27},[101,15631,15632],{"class":103,"line":1610},[101,15633,2387],{"emptyLinePlaceholder":27},[101,15635,15636],{"class":103,"line":1615},[101,15637,15638],{"class":170},"    \u002F\u002F获取年龄 \n",[101,15640,15641,15643,15646],{"class":103,"line":1629},[101,15642,1972],{"class":107},[101,15644,15645],{"class":1950}," getAge",[101,15647,10841],{"class":111},[101,15649,15650,15652],{"class":103,"line":1634},[101,15651,14740],{"class":107},[101,15653,15654],{"class":111}," m_Age;\n",[101,15656,15657],{"class":103,"line":1640},[101,15658,2174],{"class":111},[101,15660,15661],{"class":103,"line":1661},[101,15662,15663],{"class":170},"    \u002F\u002F设置年龄\n",[101,15665,15666,15668,15671,15673,15675,15678],{"class":103,"line":1666},[101,15667,14897],{"class":107},[101,15669,15670],{"class":1950}," setAge",[101,15672,112],{"class":111},[101,15674,115],{"class":107},[101,15676,15677],{"class":5204}," age",[101,15679,12430],{"class":111},[101,15681,15682,15684,15687,15689,15691,15693,15696,15698,15701],{"class":103,"line":1680},[101,15683,2484],{"class":107},[101,15685,15686],{"class":111}," (age ",[101,15688,1021],{"class":107},[101,15690,4080],{"class":160},[101,15692,3242],{"class":107},[101,15694,15695],{"class":111}," age ",[101,15697,1071],{"class":107},[101,15699,15700],{"class":160}," 150",[101,15702,12430],{"class":111},[101,15704,15705,15707,15709,15712,15714],{"class":103,"line":1685},[101,15706,9707],{"class":111},[101,15708,1155],{"class":107},[101,15710,15711],{"class":216}," \"你个老妖精!\"",[101,15713,1431],{"class":107},[101,15715,8828],{"class":111},[101,15717,15718,15721],{"class":103,"line":1714},[101,15719,15720],{"class":107},"            return",[101,15722,1277],{"class":111},[101,15724,15725],{"class":103,"line":1719},[101,15726,2516],{"class":111},[101,15728,15729,15732,15734],{"class":103,"line":1736},[101,15730,15731],{"class":111},"        m_Age ",[101,15733,157],{"class":107},[101,15735,7785],{"class":111},[101,15737,15738],{"class":103,"line":1741},[101,15739,2174],{"class":111},[101,15741,15742],{"class":103,"line":1746},[101,15743,2387],{"emptyLinePlaceholder":27},[101,15745,15746],{"class":103,"line":1751},[101,15747,15748],{"class":170},"    \u002F\u002F情人设置为只写\n",[101,15750,15751,15753,15756,15758,15760,15763],{"class":103,"line":1765},[101,15752,14897],{"class":107},[101,15754,15755],{"class":1950}," setLover",[101,15757,112],{"class":111},[101,15759,14905],{"class":1950},[101,15761,15762],{"class":5204}," lover",[101,15764,12430],{"class":111},[101,15766,15767,15770,15772],{"class":103,"line":1770},[101,15768,15769],{"class":111},"        m_Lover ",[101,15771,157],{"class":107},[101,15773,15774],{"class":111}," lover;\n",[101,15776,15777],{"class":103,"line":2564},[101,15778,2174],{"class":111},[101,15780,15781],{"class":103,"line":2578},[101,15782,2387],{"emptyLinePlaceholder":27},[101,15784,15785],{"class":103,"line":2586},[101,15786,15210],{"class":107},[101,15788,15789,15792],{"class":103,"line":2591},[101,15790,15791],{"class":111},"    string m_Name;",[101,15793,15794],{"class":170}," \u002F\u002F可读可写  姓名\n",[101,15796,15797],{"class":103,"line":2597},[101,15798,13198],{"class":111},[101,15800,15801,15803,15806],{"class":103,"line":2603},[101,15802,1972],{"class":107},[101,15804,15805],{"class":111}," m_Age;",[101,15807,15808],{"class":170}," \u002F\u002F只读  年龄\n",[101,15810,15811],{"class":103,"line":2608},[101,15812,2387],{"emptyLinePlaceholder":27},[101,15814,15815,15818],{"class":103,"line":7936},[101,15816,15817],{"class":111},"    string m_Lover;",[101,15819,15820],{"class":170}," \u002F\u002F只写  情人\n",[101,15822,15823],{"class":103,"line":7960},[101,15824,3982],{"class":111},[101,15826,15827],{"class":103,"line":7965},[101,15828,2387],{"emptyLinePlaceholder":27},[101,15830,15831,15833,15835],{"class":103,"line":7971},[101,15832,115],{"class":107},[101,15834,1960],{"class":1950},[101,15836,10841],{"class":111},[101,15838,15839],{"class":103,"line":7998},[101,15840,2387],{"emptyLinePlaceholder":27},[101,15842,15843],{"class":103,"line":8003},[101,15844,15301],{"class":111},[101,15846,15847],{"class":103,"line":8009},[101,15848,15849],{"class":170},"    \u002F\u002F姓名设置\n",[101,15851,15852,15855,15857,15859,15861],{"class":103,"line":8021},[101,15853,15854],{"class":111},"    p.",[101,15856,15054],{"class":1950},[101,15858,112],{"class":111},[101,15860,7904],{"class":216},[101,15862,2706],{"class":111},[101,15864,15865,15867,15869,15872,15874,15877,15880,15882,15884],{"class":103,"line":8033},[101,15866,6517],{"class":111},[101,15868,1155],{"class":107},[101,15870,15871],{"class":216}," \"姓名： \"",[101,15873,1431],{"class":107},[101,15875,15876],{"class":111}," p.",[101,15878,15879],{"class":1950},"getName",[101,15881,13038],{"class":111},[101,15883,1155],{"class":107},[101,15885,8828],{"class":111},[101,15887,15888],{"class":103,"line":8045},[101,15889,2387],{"emptyLinePlaceholder":27},[101,15891,15892],{"class":103,"line":9704},[101,15893,15894],{"class":170},"    \u002F\u002F年龄设置\n",[101,15896,15897,15899,15902,15904,15906],{"class":103,"line":9729},[101,15898,15854],{"class":111},[101,15900,15901],{"class":1950},"setAge",[101,15903,112],{"class":111},[101,15905,767],{"class":160},[101,15907,2706],{"class":111},[101,15909,15910,15912,15914,15917,15919,15921,15924,15926,15928],{"class":103,"line":9752},[101,15911,6517],{"class":111},[101,15913,1155],{"class":107},[101,15915,15916],{"class":216}," \"年龄： \"",[101,15918,1431],{"class":107},[101,15920,15876],{"class":111},[101,15922,15923],{"class":1950},"getAge",[101,15925,13038],{"class":111},[101,15927,1155],{"class":107},[101,15929,8828],{"class":111},[101,15931,15932],{"class":103,"line":9776},[101,15933,2387],{"emptyLinePlaceholder":27},[101,15935,15936],{"class":103,"line":9781},[101,15937,15938],{"class":170},"    \u002F\u002F情人设置\n",[101,15940,15941,15943,15946,15948,15951],{"class":103,"line":9786},[101,15942,15854],{"class":111},[101,15944,15945],{"class":1950},"setLover",[101,15947,112],{"class":111},[101,15949,15950],{"class":216},"\"苍井\"",[101,15952,2706],{"class":111},[101,15954,15955,15958],{"class":103,"line":9791},[101,15956,15957],{"class":170},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[101,15959,15960],{"class":170},"  \u002F\u002F只写属性，不可以读取\n",[101,15962,15963],{"class":103,"line":9800},[101,15964,2387],{"emptyLinePlaceholder":27},[101,15966,15967,15969,15971,15973],{"class":103,"line":9805},[101,15968,2290],{"class":1950},[101,15970,112],{"class":111},[101,15972,2295],{"class":216},[101,15974,2706],{"class":111},[101,15976,15977],{"class":103,"line":9811},[101,15978,2387],{"emptyLinePlaceholder":27},[101,15980,15981,15983,15985],{"class":103,"line":9832},[101,15982,4077],{"class":107},[101,15984,4080],{"class":160},[101,15986,1277],{"class":111},[101,15988,15989],{"class":103,"line":9838},[101,15990,1552],{"class":111},[72,15992,15994],{"id":15993},"_814封装案例","8.1.4封装案例",[55,15996,15997],{},[58,15998,15999,16002],{},[261,16000,16001],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1118,16004,16005,16008],{},[58,16006,16007],{},"求出立方体的面积和体积",[58,16009,16010],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[92,16012,16014],{"className":94,"code":16013,"language":96,"meta":20,"style":20},"#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",[98,16015,16016,16022,16032,16039,16043,16047,16052,16082,16086,16096,16106,16116,16120,16129,16133,16169,16173,16182,16186,16202,16206,16211,16220,16224,16231,16235,16244,16248,16255,16259,16268,16272,16279,16283,16288,16305,16309,16355,16359,16368,16372,16376,16380,16389,16393,16397,16402,16406,16412,16418,16424,16428,16432,16437,16459,16463,16517,16521,16529,16533,16538,16543,16556,16563,16579,16590,16596,16619,16625,16648,16662,16682,16688,16699,16722,16744,16749,16755,16769,16782,16787,16801,16806,16812,16817,16831,16836,16841,16855,16867,16872,16885,16890,16895,16900,16913,16918],{"__ignoreMap":20},[101,16017,16018,16020],{"class":103,"line":104},[101,16019,1936],{"class":107},[101,16021,1939],{"class":216},[101,16023,16024,16026,16028,16030],{"class":103,"line":21},[101,16025,1944],{"class":107},[101,16027,1947],{"class":107},[101,16029,1951],{"class":1950},[101,16031,1277],{"class":111},[101,16033,16034,16036],{"class":103,"line":1166},[101,16035,14682],{"class":107},[101,16037,16038],{"class":1950}," Cube\n",[101,16040,16041],{"class":103,"line":1181},[101,16042,1533],{"class":111},[101,16044,16045],{"class":103,"line":1187},[101,16046,14704],{"class":107},[101,16048,16049],{"class":103,"line":1201},[101,16050,16051],{"class":170},"    \u002F\u002F输入长宽高\n",[101,16053,16054,16056,16059,16061,16063,16066,16068,16070,16073,16075,16077,16080],{"class":103,"line":1207},[101,16055,14897],{"class":107},[101,16057,16058],{"class":1950}," setLwh",[101,16060,112],{"class":111},[101,16062,115],{"class":107},[101,16064,16065],{"class":5204}," l",[101,16067,489],{"class":111},[101,16069,115],{"class":107},[101,16071,16072],{"class":5204}," w",[101,16074,489],{"class":111},[101,16076,115],{"class":107},[101,16078,16079],{"class":5204}," h",[101,16081,118],{"class":111},[101,16083,16084],{"class":103,"line":1298},[101,16085,2017],{"class":111},[101,16087,16088,16091,16093],{"class":103,"line":1304},[101,16089,16090],{"class":111},"        m_L",[101,16092,157],{"class":107},[101,16094,16095],{"class":111},"l;\n",[101,16097,16098,16101,16103],{"class":103,"line":1316},[101,16099,16100],{"class":111},"        m_W",[101,16102,157],{"class":107},[101,16104,16105],{"class":111},"w;\n",[101,16107,16108,16111,16113],{"class":103,"line":1599},[101,16109,16110],{"class":111},"        m_H",[101,16112,157],{"class":107},[101,16114,16115],{"class":111},"h;\n",[101,16117,16118],{"class":103,"line":1604},[101,16119,2174],{"class":111},[101,16121,16122,16124,16127],{"class":103,"line":1610},[101,16123,1972],{"class":107},[101,16125,16126],{"class":1950}," mianji",[101,16128,1963],{"class":111},[101,16130,16131],{"class":103,"line":1615},[101,16132,2017],{"class":111},[101,16134,16135,16137,16139,16141,16144,16146,16149,16151,16154,16156,16159,16161,16164,16166],{"class":103,"line":1629},[101,16136,14740],{"class":107},[101,16138,14743],{"class":160},[101,16140,566],{"class":107},[101,16142,16143],{"class":111},"(m_L",[101,16145,566],{"class":107},[101,16147,16148],{"class":111},"m_W ",[101,16150,592],{"class":107},[101,16152,16153],{"class":111}," m_L",[101,16155,566],{"class":107},[101,16157,16158],{"class":111},"m_H ",[101,16160,592],{"class":107},[101,16162,16163],{"class":111}," m_W",[101,16165,566],{"class":107},[101,16167,16168],{"class":111},"m_H);\n",[101,16170,16171],{"class":103,"line":1634},[101,16172,2174],{"class":111},[101,16174,16175,16177,16180],{"class":103,"line":1640},[101,16176,1972],{"class":107},[101,16178,16179],{"class":1950}," tiji",[101,16181,1963],{"class":111},[101,16183,16184],{"class":103,"line":1661},[101,16185,2017],{"class":111},[101,16187,16188,16190,16192,16194,16197,16199],{"class":103,"line":1666},[101,16189,14740],{"class":107},[101,16191,16153],{"class":111},[101,16193,566],{"class":107},[101,16195,16196],{"class":111},"m_W",[101,16198,566],{"class":107},[101,16200,16201],{"class":111},"m_H;\n",[101,16203,16204],{"class":103,"line":1680},[101,16205,2174],{"class":111},[101,16207,16208],{"class":103,"line":1685},[101,16209,16210],{"class":170},"    \u002F\u002F获取长宽高\n",[101,16212,16213,16215,16218],{"class":103,"line":1714},[101,16214,1972],{"class":107},[101,16216,16217],{"class":1950}," getLength",[101,16219,1963],{"class":111},[101,16221,16222],{"class":103,"line":1719},[101,16223,2017],{"class":111},[101,16225,16226,16228],{"class":103,"line":1736},[101,16227,14740],{"class":107},[101,16229,16230],{"class":111}," m_L;\n",[101,16232,16233],{"class":103,"line":1741},[101,16234,2174],{"class":111},[101,16236,16237,16239,16242],{"class":103,"line":1746},[101,16238,1972],{"class":107},[101,16240,16241],{"class":1950}," getWidth",[101,16243,1963],{"class":111},[101,16245,16246],{"class":103,"line":1751},[101,16247,2017],{"class":111},[101,16249,16250,16252],{"class":103,"line":1765},[101,16251,14740],{"class":107},[101,16253,16254],{"class":111}," m_W;\n",[101,16256,16257],{"class":103,"line":1770},[101,16258,2174],{"class":111},[101,16260,16261,16263,16266],{"class":103,"line":2564},[101,16262,1972],{"class":107},[101,16264,16265],{"class":1950}," getHeight",[101,16267,1963],{"class":111},[101,16269,16270],{"class":103,"line":2578},[101,16271,2017],{"class":111},[101,16273,16274,16276],{"class":103,"line":2586},[101,16275,14740],{"class":107},[101,16277,16278],{"class":111}," m_H;\n",[101,16280,16281],{"class":103,"line":2591},[101,16282,2174],{"class":111},[101,16284,16285],{"class":103,"line":2597},[101,16286,16287],{"class":170},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[101,16289,16290,16293,16296,16298,16301,16303],{"class":103,"line":2603},[101,16291,16292],{"class":107},"    bool",[101,16294,16295],{"class":1950}," isEqual",[101,16297,112],{"class":111},[101,16299,16300],{"class":1950},"Cube",[101,16302,2836],{"class":5204},[101,16304,118],{"class":111},[101,16306,16307],{"class":103,"line":2608},[101,16308,2017],{"class":111},[101,16310,16311,16313,16316,16319,16321,16323,16326,16328,16331,16334,16336,16338,16341,16343,16345,16348,16350,16352],{"class":103,"line":7936},[101,16312,2484],{"class":107},[101,16314,16315],{"class":111}," (c.",[101,16317,16318],{"class":1950},"getLength",[101,16320,13038],{"class":111},[101,16322,2936],{"class":107},[101,16324,16325],{"class":111}," m_L ",[101,16327,1702],{"class":107},[101,16329,16330],{"class":111}," c.",[101,16332,16333],{"class":1950},"getWidth",[101,16335,13038],{"class":111},[101,16337,2936],{"class":107},[101,16339,16340],{"class":111}," m_W ",[101,16342,1702],{"class":107},[101,16344,16330],{"class":111},[101,16346,16347],{"class":1950},"getHeight",[101,16349,13038],{"class":111},[101,16351,2936],{"class":107},[101,16353,16354],{"class":111}," m_H)\n",[101,16356,16357],{"class":103,"line":7960},[101,16358,2497],{"class":111},[101,16360,16361,16363,16366],{"class":103,"line":7965},[101,16362,15720],{"class":107},[101,16364,16365],{"class":160}," true",[101,16367,1277],{"class":111},[101,16369,16370],{"class":103,"line":7971},[101,16371,2516],{"class":111},[101,16373,16374],{"class":103,"line":7998},[101,16375,2557],{"class":107},[101,16377,16378],{"class":103,"line":8003},[101,16379,2497],{"class":111},[101,16381,16382,16384,16387],{"class":103,"line":8009},[101,16383,15720],{"class":107},[101,16385,16386],{"class":160}," false",[101,16388,1277],{"class":111},[101,16390,16391],{"class":103,"line":8021},[101,16392,2516],{"class":111},[101,16394,16395],{"class":103,"line":8033},[101,16396,2174],{"class":111},[101,16398,16399],{"class":103,"line":8045},[101,16400,16401],{"class":170},"    \u002F\u002F私有属性\n",[101,16403,16404],{"class":103,"line":9704},[101,16405,15210],{"class":107},[101,16407,16408,16410],{"class":103,"line":9729},[101,16409,1972],{"class":107},[101,16411,16230],{"class":111},[101,16413,16414,16416],{"class":103,"line":9752},[101,16415,1972],{"class":107},[101,16417,16254],{"class":111},[101,16419,16420,16422],{"class":103,"line":9776},[101,16421,1972],{"class":107},[101,16423,16278],{"class":111},[101,16425,16426],{"class":103,"line":9781},[101,16427,2387],{"emptyLinePlaceholder":27},[101,16429,16430],{"class":103,"line":9786},[101,16431,3982],{"class":111},[101,16433,16434],{"class":103,"line":9791},[101,16435,16436],{"class":170},"\u002F\u002F全局函数判断两个立方体是否相等\n",[101,16438,16439,16441,16443,16445,16447,16450,16452,16454,16457],{"class":103,"line":9800},[101,16440,1341],{"class":107},[101,16442,16295],{"class":1950},[101,16444,112],{"class":111},[101,16446,16300],{"class":1950},[101,16448,16449],{"class":5204}," c1",[101,16451,489],{"class":111},[101,16453,16300],{"class":1950},[101,16455,16456],{"class":5204}," c2",[101,16458,118],{"class":111},[101,16460,16461],{"class":103,"line":9805},[101,16462,1533],{"class":111},[101,16464,16465,16467,16470,16472,16474,16476,16479,16481,16484,16486,16488,16490,16492,16494,16496,16498,16500,16502,16504,16506,16508,16510,16512,16514],{"class":103,"line":9811},[101,16466,4077],{"class":107},[101,16468,16469],{"class":111}," (c1.",[101,16471,16318],{"class":1950},[101,16473,13038],{"class":111},[101,16475,2936],{"class":107},[101,16477,16478],{"class":111}," c2.",[101,16480,16318],{"class":1950},[101,16482,16483],{"class":111},"()) ",[101,16485,1702],{"class":107},[101,16487,16469],{"class":111},[101,16489,16333],{"class":1950},[101,16491,13038],{"class":111},[101,16493,2936],{"class":107},[101,16495,16478],{"class":111},[101,16497,16333],{"class":1950},[101,16499,16483],{"class":111},[101,16501,1702],{"class":107},[101,16503,16469],{"class":111},[101,16505,16347],{"class":1950},[101,16507,13038],{"class":111},[101,16509,2936],{"class":107},[101,16511,16478],{"class":111},[101,16513,16347],{"class":1950},[101,16515,16516],{"class":111},"());\n",[101,16518,16519],{"class":103,"line":9832},[101,16520,1552],{"class":111},[101,16522,16523,16525,16527],{"class":103,"line":9838},[101,16524,115],{"class":107},[101,16526,1960],{"class":1950},[101,16528,1963],{"class":111},[101,16530,16531],{"class":103,"line":9852},[101,16532,1533],{"class":111},[101,16534,16535],{"class":103,"line":9858},[101,16536,16537],{"class":111},"    Cube c1;\n",[101,16539,16540],{"class":103,"line":9885},[101,16541,16542],{"class":170},"    \u002F\u002F输入立方体的长宽高\n",[101,16544,16545,16547,16549,16552,16554],{"class":103,"line":9894},[101,16546,1538],{"class":111},[101,16548,1155],{"class":107},[101,16550,16551],{"class":216},"\"请输入第一个立方体的长、宽、高：\"",[101,16553,1155],{"class":107},[101,16555,1178],{"class":111},[101,16557,16558,16560],{"class":103,"line":9900},[101,16559,1972],{"class":107},[101,16561,16562],{"class":111}," l,w,h,l1,w1,h1;\n",[101,16564,16565,16567,16569,16571,16573,16575,16577],{"class":103,"line":9908},[101,16566,1999],{"class":111},[101,16568,1416],{"class":107},[101,16570,629],{"class":111},[101,16572,1416],{"class":107},[101,16574,906],{"class":111},[101,16576,1416],{"class":107},[101,16578,16115],{"class":111},[101,16580,16581,16584,16587],{"class":103,"line":9913},[101,16582,16583],{"class":111},"    c1.",[101,16585,16586],{"class":1950},"setLwh",[101,16588,16589],{"class":111},"(l,w,h);\n",[101,16591,16593],{"class":103,"line":16592},66,[101,16594,16595],{"class":170},"    \u002F\u002F面积\n",[101,16597,16599,16601,16603,16606,16608,16610,16613,16615,16617],{"class":103,"line":16598},67,[101,16600,1538],{"class":111},[101,16602,1155],{"class":107},[101,16604,16605],{"class":216},"\"立方体的表面积为：\"",[101,16607,1155],{"class":107},[101,16609,14818],{"class":111},[101,16611,16612],{"class":1950},"mianji",[101,16614,2414],{"class":111},[101,16616,1155],{"class":107},[101,16618,1178],{"class":111},[101,16620,16622],{"class":103,"line":16621},68,[101,16623,16624],{"class":170},"    \u002F\u002F体积\n",[101,16626,16628,16630,16632,16635,16637,16639,16642,16644,16646],{"class":103,"line":16627},69,[101,16629,1538],{"class":111},[101,16631,1155],{"class":107},[101,16633,16634],{"class":216},"\"立方体的体积为：\"",[101,16636,1155],{"class":107},[101,16638,14818],{"class":111},[101,16640,16641],{"class":1950},"tiji",[101,16643,2414],{"class":111},[101,16645,1155],{"class":107},[101,16647,1178],{"class":111},[101,16649,16651,16653,16655,16658,16660],{"class":103,"line":16650},70,[101,16652,1538],{"class":111},[101,16654,1155],{"class":107},[101,16656,16657],{"class":216},"\"请输入第二个立方体的长、宽、高：\"",[101,16659,1155],{"class":107},[101,16661,1178],{"class":111},[101,16663,16665,16667,16669,16672,16674,16677,16679],{"class":103,"line":16664},71,[101,16666,1999],{"class":111},[101,16668,1416],{"class":107},[101,16670,16671],{"class":111},"l1",[101,16673,1416],{"class":107},[101,16675,16676],{"class":111},"w1",[101,16678,1416],{"class":107},[101,16680,16681],{"class":111},"h1;\n",[101,16683,16685],{"class":103,"line":16684},72,[101,16686,16687],{"class":111},"    Cube c2;\n",[101,16689,16691,16694,16696],{"class":103,"line":16690},73,[101,16692,16693],{"class":111},"    c2.",[101,16695,16586],{"class":1950},[101,16697,16698],{"class":111},"(l1,w1,h1);\n",[101,16700,16702,16704,16706,16709,16711,16714,16716,16718,16720],{"class":103,"line":16701},74,[101,16703,1538],{"class":111},[101,16705,1155],{"class":107},[101,16707,16708],{"class":216},"\"第二个立方体的表面积为：\"",[101,16710,1155],{"class":107},[101,16712,16713],{"class":111},"c2.",[101,16715,16612],{"class":1950},[101,16717,2414],{"class":111},[101,16719,1155],{"class":107},[101,16721,1178],{"class":111},[101,16723,16725,16727,16729,16732,16734,16736,16738,16740,16742],{"class":103,"line":16724},75,[101,16726,1538],{"class":111},[101,16728,1155],{"class":107},[101,16730,16731],{"class":216},"\"第二个立方体的体积为：\"",[101,16733,1155],{"class":107},[101,16735,16713],{"class":111},[101,16737,16641],{"class":1950},[101,16739,2414],{"class":111},[101,16741,1155],{"class":107},[101,16743,1178],{"class":111},[101,16745,16747],{"class":103,"line":16746},76,[101,16748,2387],{"emptyLinePlaceholder":27},[101,16750,16752],{"class":103,"line":16751},77,[101,16753,16754],{"class":170},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[101,16756,16758,16760,16762,16765,16767],{"class":103,"line":16757},78,[101,16759,1538],{"class":111},[101,16761,1155],{"class":107},[101,16763,16764],{"class":216},"\"内部函数判断结果：\"",[101,16766,1155],{"class":107},[101,16768,1178],{"class":111},[101,16770,16772,16774,16776,16779],{"class":103,"line":16771},79,[101,16773,3088],{"class":107},[101,16775,16469],{"class":111},[101,16777,16778],{"class":1950},"isEqual",[101,16780,16781],{"class":111},"(c2))\n",[101,16783,16785],{"class":103,"line":16784},80,[101,16786,2017],{"class":111},[101,16788,16790,16792,16794,16797,16799],{"class":103,"line":16789},81,[101,16791,3438],{"class":111},[101,16793,1155],{"class":107},[101,16795,16796],{"class":216},"\"两个立方体相等\"",[101,16798,1155],{"class":107},[101,16800,1178],{"class":111},[101,16802,16804],{"class":103,"line":16803},82,[101,16805,2174],{"class":111},[101,16807,16809],{"class":103,"line":16808},83,[101,16810,16811],{"class":107},"    else\n",[101,16813,16815],{"class":103,"line":16814},84,[101,16816,2017],{"class":111},[101,16818,16820,16822,16824,16827,16829],{"class":103,"line":16819},85,[101,16821,3438],{"class":111},[101,16823,1155],{"class":107},[101,16825,16826],{"class":216},"\"两个立方体不相等\"",[101,16828,1155],{"class":107},[101,16830,1178],{"class":111},[101,16832,16834],{"class":103,"line":16833},86,[101,16835,2174],{"class":111},[101,16837,16839],{"class":103,"line":16838},87,[101,16840,2387],{"emptyLinePlaceholder":27},[101,16842,16844,16846,16848,16851,16853],{"class":103,"line":16843},88,[101,16845,1538],{"class":111},[101,16847,1155],{"class":107},[101,16849,16850],{"class":216},"\"全局函数判断结果：\"",[101,16852,1155],{"class":107},[101,16854,1178],{"class":111},[101,16856,16858,16860,16862,16864],{"class":103,"line":16857},89,[101,16859,3088],{"class":107},[101,16861,1645],{"class":111},[101,16863,16778],{"class":1950},[101,16865,16866],{"class":111},"(c1, c2))\n",[101,16868,16870],{"class":103,"line":16869},90,[101,16871,2017],{"class":111},[101,16873,16875,16877,16879,16881,16883],{"class":103,"line":16874},91,[101,16876,3438],{"class":111},[101,16878,1155],{"class":107},[101,16880,16796],{"class":216},[101,16882,1155],{"class":107},[101,16884,1178],{"class":111},[101,16886,16888],{"class":103,"line":16887},92,[101,16889,2174],{"class":111},[101,16891,16893],{"class":103,"line":16892},93,[101,16894,16811],{"class":107},[101,16896,16898],{"class":103,"line":16897},94,[101,16899,2017],{"class":111},[101,16901,16903,16905,16907,16909,16911],{"class":103,"line":16902},95,[101,16904,3438],{"class":111},[101,16906,1155],{"class":107},[101,16908,16826],{"class":216},[101,16910,1155],{"class":107},[101,16912,1178],{"class":111},[101,16914,16916],{"class":103,"line":16915},96,[101,16917,2174],{"class":111},[101,16919,16921],{"class":103,"line":16920},97,[101,16922,1552],{"class":111},[55,16924,16925],{"start":21},[58,16926,16927],{},[261,16928,16929],{},"练习案例2：点和圆的关系",[1118,16931,16932],{},[58,16933,16934],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[92,16936,16938],{"className":94,"code":16937,"language":96,"meta":20,"style":20},"#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",[98,16939,16940,16946,16956,16963,16970,16974,16978,16983,17017,17022,17038,17052,17056,17060,17067,17074,17078,17084,17088,17092,17096,17118,17141,17146,17160,17175,17179,17183,17189,17194,17199,17203,17229,17233,17263,17291,17319,17336,17340,17353,17357,17361,17365,17378,17382,17386,17394,17398,17402,17406,17411,17415,17426,17433,17442,17452,17463,17470,17483,17494,17504,17515,17522,17536,17541,17551,17559],{"__ignoreMap":20},[101,16941,16942,16944],{"class":103,"line":104},[101,16943,1936],{"class":107},[101,16945,1939],{"class":216},[101,16947,16948,16950,16952,16954],{"class":103,"line":21},[101,16949,1944],{"class":107},[101,16951,1947],{"class":107},[101,16953,1951],{"class":1950},[101,16955,1277],{"class":111},[101,16957,16958,16960],{"class":103,"line":1166},[101,16959,1936],{"class":107},[101,16961,16962],{"class":216},"\u003Ccmath>\n",[101,16964,16965,16967],{"class":103,"line":1181},[101,16966,14682],{"class":107},[101,16968,16969],{"class":1950}," Point\n",[101,16971,16972],{"class":103,"line":1187},[101,16973,1533],{"class":111},[101,16975,16976],{"class":103,"line":1201},[101,16977,14704],{"class":107},[101,16979,16980],{"class":103,"line":1207},[101,16981,16982],{"class":170},"    \u002F\u002F赋值\n",[101,16984,16985,16987,16990,16992,16994,16997,16999,17001,17004,17007,17009,17012,17014],{"class":103,"line":1298},[101,16986,14897],{"class":107},[101,16988,16989],{"class":1950}," setPoint",[101,16991,112],{"class":111},[101,16993,14025],{"class":107},[101,16995,16996],{"class":5204}," x",[101,16998,12423],{"class":111},[101,17000,14025],{"class":107},[101,17002,17003],{"class":5204}," y",[101,17005,17006],{"class":111},") { m_x ",[101,17008,157],{"class":107},[101,17010,17011],{"class":111}," x; m_y ",[101,17013,157],{"class":107},[101,17015,17016],{"class":111}," y; }\n",[101,17018,17019],{"class":103,"line":1304},[101,17020,17021],{"class":170},"    \u002F\u002F获取坐标\n",[101,17023,17024,17026,17029,17032,17035],{"class":103,"line":1316},[101,17025,14726],{"class":107},[101,17027,17028],{"class":1950}," getX",[101,17030,17031],{"class":111},"() { ",[101,17033,17034],{"class":107},"return",[101,17036,17037],{"class":111}," m_x; }\n",[101,17039,17040,17042,17045,17047,17049],{"class":103,"line":1599},[101,17041,14726],{"class":107},[101,17043,17044],{"class":1950}," getY",[101,17046,17031],{"class":111},[101,17048,17034],{"class":107},[101,17050,17051],{"class":111}," m_y; }\n",[101,17053,17054],{"class":103,"line":1604},[101,17055,2387],{"emptyLinePlaceholder":27},[101,17057,17058],{"class":103,"line":1610},[101,17059,15210],{"class":107},[101,17061,17062,17064],{"class":103,"line":1615},[101,17063,14726],{"class":107},[101,17065,17066],{"class":111}," m_x;\n",[101,17068,17069,17071],{"class":103,"line":1629},[101,17070,14726],{"class":107},[101,17072,17073],{"class":111}," m_y;\n",[101,17075,17076],{"class":103,"line":1634},[101,17077,3982],{"class":111},[101,17079,17080,17082],{"class":103,"line":1640},[101,17081,14682],{"class":107},[101,17083,14685],{"class":1950},[101,17085,17086],{"class":103,"line":1661},[101,17087,1533],{"class":111},[101,17089,17090],{"class":103,"line":1666},[101,17091,14704],{"class":107},[101,17093,17094],{"class":103,"line":1680},[101,17095,16982],{"class":170},[101,17097,17098,17100,17103,17105,17107,17110,17113,17115],{"class":103,"line":1685},[101,17099,14897],{"class":107},[101,17101,17102],{"class":1950}," setRadius",[101,17104,112],{"class":111},[101,17106,14025],{"class":107},[101,17108,17109],{"class":5204}," r",[101,17111,17112],{"class":111},") { m_r ",[101,17114,157],{"class":107},[101,17116,17117],{"class":111}," r; }\n",[101,17119,17120,17122,17125,17127,17130,17133,17136,17138],{"class":103,"line":1714},[101,17121,14897],{"class":107},[101,17123,17124],{"class":1950}," setCenter",[101,17126,112],{"class":111},[101,17128,17129],{"class":1950},"Point",[101,17131,17132],{"class":5204}," center",[101,17134,17135],{"class":111},") { m_center ",[101,17137,157],{"class":107},[101,17139,17140],{"class":111}," center; }\n",[101,17142,17143],{"class":103,"line":1719},[101,17144,17145],{"class":170},"    \u002F\u002F获取属性\n",[101,17147,17148,17150,17153,17155,17157],{"class":103,"line":1736},[101,17149,14726],{"class":107},[101,17151,17152],{"class":1950}," getRadius",[101,17154,17031],{"class":111},[101,17156,17034],{"class":107},[101,17158,17159],{"class":111}," m_r; }\n",[101,17161,17162,17165,17168,17170,17172],{"class":103,"line":1741},[101,17163,17164],{"class":1950},"    Point",[101,17166,17167],{"class":1950}," getCenter",[101,17169,17031],{"class":111},[101,17171,17034],{"class":107},[101,17173,17174],{"class":111}," m_center; }\n",[101,17176,17177],{"class":103,"line":1746},[101,17178,2387],{"emptyLinePlaceholder":27},[101,17180,17181],{"class":103,"line":1751},[101,17182,15210],{"class":107},[101,17184,17185,17187],{"class":103,"line":1765},[101,17186,14726],{"class":107},[101,17188,14716],{"class":111},[101,17190,17191],{"class":103,"line":1770},[101,17192,17193],{"class":170},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[101,17195,17196],{"class":103,"line":2564},[101,17197,17198],{"class":111},"    Point m_center;\n",[101,17200,17201],{"class":103,"line":2578},[101,17202,3982],{"class":111},[101,17204,17205,17207,17210,17212,17215,17217,17219,17221,17223,17225,17227],{"class":103,"line":2586},[101,17206,5352],{"class":107},[101,17208,17209],{"class":1950}," isInCircle",[101,17211,112],{"class":111},[101,17213,17214],{"class":1950},"Circle",[101,17216,10572],{"class":107},[101,17218,399],{"class":5204},[101,17220,489],{"class":111},[101,17222,17129],{"class":1950},[101,17224,10572],{"class":107},[101,17226,10],{"class":5204},[101,17228,118],{"class":111},[101,17230,17231],{"class":103,"line":2591},[101,17232,1533],{"class":111},[101,17234,17235,17237,17240,17242,17244,17247,17250,17253,17255,17257,17259,17261],{"class":103,"line":2597},[101,17236,14726],{"class":107},[101,17238,17239],{"class":111}," dx ",[101,17241,157],{"class":107},[101,17243,16330],{"class":111},[101,17245,17246],{"class":1950},"getCenter",[101,17248,17249],{"class":111},"().",[101,17251,17252],{"class":1950},"getX",[101,17254,13038],{"class":111},[101,17256,643],{"class":107},[101,17258,15876],{"class":111},[101,17260,17252],{"class":1950},[101,17262,5624],{"class":111},[101,17264,17265,17267,17270,17272,17274,17276,17278,17281,17283,17285,17287,17289],{"class":103,"line":2603},[101,17266,14726],{"class":107},[101,17268,17269],{"class":111}," dy ",[101,17271,157],{"class":107},[101,17273,16330],{"class":111},[101,17275,17246],{"class":1950},[101,17277,17249],{"class":111},[101,17279,17280],{"class":1950},"getY",[101,17282,13038],{"class":111},[101,17284,643],{"class":107},[101,17286,15876],{"class":111},[101,17288,17280],{"class":1950},[101,17290,5624],{"class":111},[101,17292,17293,17295,17298,17300,17303,17306,17308,17310,17312,17314,17316],{"class":103,"line":2608},[101,17294,14726],{"class":107},[101,17296,17297],{"class":111}," distance ",[101,17299,157],{"class":107},[101,17301,17302],{"class":1950}," sqrt",[101,17304,17305],{"class":111},"(dx ",[101,17307,566],{"class":107},[101,17309,17239],{"class":111},[101,17311,592],{"class":107},[101,17313,17269],{"class":111},[101,17315,566],{"class":107},[101,17317,17318],{"class":111}," dy);\n",[101,17320,17321,17323,17326,17328,17330,17333],{"class":103,"line":7936},[101,17322,3088],{"class":107},[101,17324,17325],{"class":111}," (distance ",[101,17327,1021],{"class":107},[101,17329,16330],{"class":111},[101,17331,17332],{"class":1950},"getRadius",[101,17334,17335],{"class":111},"())\n",[101,17337,17338],{"class":103,"line":7960},[101,17339,2017],{"class":111},[101,17341,17342,17344,17346,17349,17351],{"class":103,"line":7965},[101,17343,9657],{"class":111},[101,17345,1155],{"class":107},[101,17347,17348],{"class":216}," \"点在圆内\"",[101,17350,1431],{"class":107},[101,17352,8828],{"class":111},[101,17354,17355],{"class":103,"line":7971},[101,17356,2174],{"class":111},[101,17358,17359],{"class":103,"line":7998},[101,17360,16811],{"class":107},[101,17362,17363],{"class":103,"line":8003},[101,17364,2017],{"class":111},[101,17366,17367,17369,17371,17374,17376],{"class":103,"line":8009},[101,17368,9657],{"class":111},[101,17370,1155],{"class":107},[101,17372,17373],{"class":216}," \"点在圆外\"",[101,17375,1431],{"class":107},[101,17377,8828],{"class":111},[101,17379,17380],{"class":103,"line":8021},[101,17381,2174],{"class":111},[101,17383,17384],{"class":103,"line":8033},[101,17385,1552],{"class":111},[101,17387,17388,17390,17392],{"class":103,"line":8045},[101,17389,115],{"class":107},[101,17391,1960],{"class":1950},[101,17393,1963],{"class":111},[101,17395,17396],{"class":103,"line":9704},[101,17397,1533],{"class":111},[101,17399,17400],{"class":103,"line":9729},[101,17401,15041],{"class":170},[101,17403,17404],{"class":103,"line":9752},[101,17405,14788],{"class":111},[101,17407,17408],{"class":103,"line":9776},[101,17409,17410],{"class":111},"    Point p1;\n",[101,17412,17413],{"class":103,"line":9781},[101,17414,16982],{"class":170},[101,17416,17417,17419,17421,17424],{"class":103,"line":9786},[101,17418,1538],{"class":111},[101,17420,1155],{"class":107},[101,17422,17423],{"class":216},"\"请输入圆的半径：\"",[101,17425,1277],{"class":111},[101,17427,17428,17430],{"class":103,"line":9791},[101,17429,14726],{"class":107},[101,17431,17432],{"class":111}," r;\n",[101,17434,17435,17437,17439],{"class":103,"line":9800},[101,17436,1999],{"class":111},[101,17438,1416],{"class":107},[101,17440,17441],{"class":111},"r;\n",[101,17443,17444,17446,17449],{"class":103,"line":9805},[101,17445,16583],{"class":111},[101,17447,17448],{"class":1950},"setRadius",[101,17450,17451],{"class":111},"(r);\n",[101,17453,17454,17456,17458,17461],{"class":103,"line":9811},[101,17455,1538],{"class":111},[101,17457,1155],{"class":107},[101,17459,17460],{"class":216},"\"请输入圆心坐标：\"",[101,17462,1277],{"class":111},[101,17464,17465,17467],{"class":103,"line":9832},[101,17466,14726],{"class":107},[101,17468,17469],{"class":111}," x, y;\n",[101,17471,17472,17474,17476,17478,17480],{"class":103,"line":9838},[101,17473,1999],{"class":111},[101,17475,1416],{"class":107},[101,17477,931],{"class":111},[101,17479,1416],{"class":107},[101,17481,17482],{"class":111},"y;\n",[101,17484,17485,17488,17491],{"class":103,"line":9852},[101,17486,17487],{"class":111},"    p1.",[101,17489,17490],{"class":1950},"setPoint",[101,17492,17493],{"class":111},"(x, y);\n",[101,17495,17496,17498,17501],{"class":103,"line":9858},[101,17497,16583],{"class":111},[101,17499,17500],{"class":1950},"setCenter",[101,17502,17503],{"class":111},"(p1);\n",[101,17505,17506,17508,17510,17513],{"class":103,"line":9885},[101,17507,1538],{"class":111},[101,17509,1155],{"class":107},[101,17511,17512],{"class":216},"\"请输入测试点坐标：\"",[101,17514,1277],{"class":111},[101,17516,17517,17519],{"class":103,"line":9894},[101,17518,14726],{"class":107},[101,17520,17521],{"class":111}," x1, y1;\n",[101,17523,17524,17526,17528,17531,17533],{"class":103,"line":9900},[101,17525,1999],{"class":111},[101,17527,1416],{"class":107},[101,17529,17530],{"class":111},"x1",[101,17532,1416],{"class":107},[101,17534,17535],{"class":111},"y1;\n",[101,17537,17538],{"class":103,"line":9908},[101,17539,17540],{"class":111},"    Point p2;\n",[101,17542,17543,17546,17548],{"class":103,"line":9913},[101,17544,17545],{"class":111},"    p2.",[101,17547,17490],{"class":1950},[101,17549,17550],{"class":111},"(x1, y1);\n",[101,17552,17553,17556],{"class":103,"line":16592},[101,17554,17555],{"class":1950},"    isInCircle",[101,17557,17558],{"class":111},"(c1, p2);\n",[101,17560,17561],{"class":103,"line":16598},[101,17562,1552],{"class":111},[10,17564,17565],{},"在类中可以让另一个类作为本来的成员",[10,17567,17568],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[10,17570,17571],{},"创建point.h",[92,17573,17575],{"className":94,"code":17574,"language":96,"meta":20,"style":20},"#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",[98,17576,17577,17588,17594,17604,17610,17614,17619,17623,17627,17647,17651,17659,17667,17671,17675,17681,17687],{"__ignoreMap":20},[101,17578,17579,17582,17585],{"class":103,"line":104},[101,17580,17581],{"class":107},"#pragma",[101,17583,17584],{"class":1950}," once",[101,17586,17587],{"class":170}," \u002F\u002F防止头文件重复包含\n",[101,17589,17590,17592],{"class":103,"line":21},[101,17591,1936],{"class":107},[101,17593,1939],{"class":216},[101,17595,17596,17598,17600,17602],{"class":103,"line":1166},[101,17597,1944],{"class":107},[101,17599,1947],{"class":107},[101,17601,1951],{"class":1950},[101,17603,1277],{"class":111},[101,17605,17606,17608],{"class":103,"line":1181},[101,17607,14682],{"class":107},[101,17609,16969],{"class":1950},[101,17611,17612],{"class":103,"line":1187},[101,17613,1533],{"class":111},[101,17615,17616],{"class":103,"line":1201},[101,17617,17618],{"class":170},"\u002F\u002F做好声明与变量定义就可以\n",[101,17620,17621],{"class":103,"line":1207},[101,17622,14704],{"class":107},[101,17624,17625],{"class":103,"line":1298},[101,17626,16982],{"class":170},[101,17628,17629,17631,17633,17635,17637,17639,17641,17643,17645],{"class":103,"line":1304},[101,17630,14897],{"class":107},[101,17632,16989],{"class":1950},[101,17634,112],{"class":111},[101,17636,14025],{"class":107},[101,17638,16996],{"class":5204},[101,17640,12423],{"class":111},[101,17642,14025],{"class":107},[101,17644,17003],{"class":5204},[101,17646,2706],{"class":111},[101,17648,17649],{"class":103,"line":1316},[101,17650,17021],{"class":170},[101,17652,17653,17655,17657],{"class":103,"line":1599},[101,17654,14726],{"class":107},[101,17656,17028],{"class":1950},[101,17658,5624],{"class":111},[101,17660,17661,17663,17665],{"class":103,"line":1604},[101,17662,14726],{"class":107},[101,17664,17044],{"class":1950},[101,17666,5624],{"class":111},[101,17668,17669],{"class":103,"line":1610},[101,17670,2387],{"emptyLinePlaceholder":27},[101,17672,17673],{"class":103,"line":1615},[101,17674,15210],{"class":107},[101,17676,17677,17679],{"class":103,"line":1629},[101,17678,14726],{"class":107},[101,17680,17066],{"class":111},[101,17682,17683,17685],{"class":103,"line":1634},[101,17684,14726],{"class":107},[101,17686,17073],{"class":111},[101,17688,17689],{"class":103,"line":1640},[101,17690,3982],{"class":111},[10,17692,17693],{},"创建point.cpp",[92,17695,17697],{"className":94,"code":17696,"language":96,"meta":20,"style":20},"#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",[98,17698,17699,17706,17711,17745,17749,17765],{"__ignoreMap":20},[101,17700,17701,17703],{"class":103,"line":104},[101,17702,1936],{"class":107},[101,17704,17705],{"class":216},"\u003Cpoint.h>\n",[101,17707,17708],{"class":103,"line":21},[101,17709,17710],{"class":170},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[101,17712,17713,17715,17718,17721,17723,17725,17727,17729,17731,17733,17735,17737,17739,17741,17743],{"class":103,"line":1166},[101,17714,14897],{"class":107},[101,17716,17717],{"class":1950}," Point",[101,17719,17720],{"class":111},"::",[101,17722,17490],{"class":1950},[101,17724,112],{"class":111},[101,17726,14025],{"class":107},[101,17728,16996],{"class":5204},[101,17730,12423],{"class":111},[101,17732,14025],{"class":107},[101,17734,17003],{"class":5204},[101,17736,17006],{"class":111},[101,17738,157],{"class":107},[101,17740,17011],{"class":111},[101,17742,157],{"class":107},[101,17744,17016],{"class":111},[101,17746,17747],{"class":103,"line":1181},[101,17748,17021],{"class":170},[101,17750,17751,17753,17755,17757,17759,17761,17763],{"class":103,"line":1187},[101,17752,14726],{"class":107},[101,17754,17717],{"class":1950},[101,17756,17720],{"class":111},[101,17758,17252],{"class":1950},[101,17760,17031],{"class":111},[101,17762,17034],{"class":107},[101,17764,17037],{"class":111},[101,17766,17767,17769,17771,17773,17775,17777,17779],{"class":103,"line":1201},[101,17768,14726],{"class":107},[101,17770,17717],{"class":1950},[101,17772,17720],{"class":111},[101,17774,17280],{"class":1950},[101,17776,17031],{"class":111},[101,17778,17034],{"class":107},[101,17780,17051],{"class":111},[10,17782,17783],{},"创建circle.h",[92,17785,17787],{"className":94,"code":17786,"language":96,"meta":20,"style":20},"#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",[98,17788,17789,17796,17802,17812,17818,17824,17828,17832,17836,17850,17864,17868,17876,17884,17888,17892,17898,17902,17906],{"__ignoreMap":20},[101,17790,17791,17793],{"class":103,"line":104},[101,17792,17581],{"class":107},[101,17794,17795],{"class":1950}," once\n",[101,17797,17798,17800],{"class":103,"line":21},[101,17799,1936],{"class":107},[101,17801,1939],{"class":216},[101,17803,17804,17806,17808,17810],{"class":103,"line":1166},[101,17805,1944],{"class":107},[101,17807,1947],{"class":107},[101,17809,1951],{"class":1950},[101,17811,1277],{"class":111},[101,17813,17814,17816],{"class":103,"line":1181},[101,17815,1936],{"class":107},[101,17817,17705],{"class":216},[101,17819,17820,17822],{"class":103,"line":1187},[101,17821,14682],{"class":107},[101,17823,14685],{"class":1950},[101,17825,17826],{"class":103,"line":1201},[101,17827,1533],{"class":111},[101,17829,17830],{"class":103,"line":1207},[101,17831,14704],{"class":107},[101,17833,17834],{"class":103,"line":1298},[101,17835,16982],{"class":170},[101,17837,17838,17840,17842,17844,17846,17848],{"class":103,"line":1304},[101,17839,14897],{"class":107},[101,17841,17102],{"class":1950},[101,17843,112],{"class":111},[101,17845,14025],{"class":107},[101,17847,17109],{"class":5204},[101,17849,2706],{"class":111},[101,17851,17852,17854,17856,17858,17860,17862],{"class":103,"line":1316},[101,17853,14897],{"class":107},[101,17855,17124],{"class":1950},[101,17857,112],{"class":111},[101,17859,17129],{"class":1950},[101,17861,17132],{"class":5204},[101,17863,2706],{"class":111},[101,17865,17866],{"class":103,"line":1599},[101,17867,17145],{"class":170},[101,17869,17870,17872,17874],{"class":103,"line":1604},[101,17871,14726],{"class":107},[101,17873,17152],{"class":1950},[101,17875,5624],{"class":111},[101,17877,17878,17880,17882],{"class":103,"line":1610},[101,17879,17164],{"class":1950},[101,17881,17167],{"class":1950},[101,17883,5624],{"class":111},[101,17885,17886],{"class":103,"line":1615},[101,17887,2387],{"emptyLinePlaceholder":27},[101,17889,17890],{"class":103,"line":1629},[101,17891,15210],{"class":107},[101,17893,17894,17896],{"class":103,"line":1634},[101,17895,14726],{"class":107},[101,17897,14716],{"class":111},[101,17899,17900],{"class":103,"line":1640},[101,17901,17193],{"class":170},[101,17903,17904],{"class":103,"line":1661},[101,17905,17198],{"class":111},[101,17907,17908],{"class":103,"line":1666},[101,17909,3982],{"class":111},[10,17911,17912],{},"创建circle.cpp",[92,17914,17916],{"className":94,"code":17915,"language":96,"meta":20,"style":20},"#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",[98,17917,17918,17925,17948,17970,17975,17991],{"__ignoreMap":20},[101,17919,17920,17922],{"class":103,"line":104},[101,17921,1936],{"class":107},[101,17923,17924],{"class":216},"\u003Ccircle.h>\n",[101,17926,17927,17929,17932,17934,17936,17938,17940,17942,17944,17946],{"class":103,"line":21},[101,17928,5352],{"class":107},[101,17930,17931],{"class":1950}," Circle",[101,17933,17720],{"class":111},[101,17935,17448],{"class":1950},[101,17937,112],{"class":111},[101,17939,14025],{"class":107},[101,17941,17109],{"class":5204},[101,17943,17112],{"class":111},[101,17945,157],{"class":107},[101,17947,17117],{"class":111},[101,17949,17950,17952,17954,17956,17958,17960,17962,17964,17966,17968],{"class":103,"line":1166},[101,17951,5352],{"class":107},[101,17953,17931],{"class":1950},[101,17955,17720],{"class":111},[101,17957,17500],{"class":1950},[101,17959,112],{"class":111},[101,17961,17129],{"class":1950},[101,17963,17132],{"class":5204},[101,17965,17135],{"class":111},[101,17967,157],{"class":107},[101,17969,17140],{"class":111},[101,17971,17972],{"class":103,"line":1181},[101,17973,17974],{"class":170},"\u002F\u002F获取属性\n",[101,17976,17977,17979,17981,17983,17985,17987,17989],{"class":103,"line":1187},[101,17978,14025],{"class":107},[101,17980,17931],{"class":1950},[101,17982,17720],{"class":111},[101,17984,17332],{"class":1950},[101,17986,17031],{"class":111},[101,17988,17034],{"class":107},[101,17990,17159],{"class":111},[101,17992,17993,17995,17997,17999,18001,18003,18005],{"class":103,"line":1201},[101,17994,17129],{"class":1950},[101,17996,17931],{"class":1950},[101,17998,17720],{"class":111},[101,18000,17246],{"class":1950},[101,18002,17031],{"class":111},[101,18004,17034],{"class":107},[101,18006,17174],{"class":111},[10,18008,18009],{},"使用封装的类",[92,18011,18013],{"className":94,"code":18012,"language":96,"meta":20,"style":20},"#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",[98,18014,18015,18021,18031,18037,18043,18067,18071,18097,18123,18147,18161,18165,18177,18181,18185,18189,18201,18205,18209,18217,18221,18225,18229,18233,18237,18247,18253,18261,18269,18279,18285,18297,18305,18313,18323,18329,18341,18345,18353,18359],{"__ignoreMap":20},[101,18016,18017,18019],{"class":103,"line":104},[101,18018,1936],{"class":107},[101,18020,1939],{"class":216},[101,18022,18023,18025,18027,18029],{"class":103,"line":21},[101,18024,1944],{"class":107},[101,18026,1947],{"class":107},[101,18028,1951],{"class":1950},[101,18030,1277],{"class":111},[101,18032,18033,18035],{"class":103,"line":1166},[101,18034,1936],{"class":107},[101,18036,17924],{"class":216},[101,18038,18039,18041],{"class":103,"line":1181},[101,18040,1936],{"class":107},[101,18042,17705],{"class":216},[101,18044,18045,18047,18049,18051,18053,18055,18057,18059,18061,18063,18065],{"class":103,"line":1187},[101,18046,5352],{"class":107},[101,18048,17209],{"class":1950},[101,18050,112],{"class":111},[101,18052,17214],{"class":1950},[101,18054,10572],{"class":107},[101,18056,399],{"class":5204},[101,18058,489],{"class":111},[101,18060,17129],{"class":1950},[101,18062,10572],{"class":107},[101,18064,10],{"class":5204},[101,18066,118],{"class":111},[101,18068,18069],{"class":103,"line":1201},[101,18070,1533],{"class":111},[101,18072,18073,18075,18077,18079,18081,18083,18085,18087,18089,18091,18093,18095],{"class":103,"line":1207},[101,18074,14726],{"class":107},[101,18076,17239],{"class":111},[101,18078,157],{"class":107},[101,18080,16330],{"class":111},[101,18082,17246],{"class":1950},[101,18084,17249],{"class":111},[101,18086,17252],{"class":1950},[101,18088,13038],{"class":111},[101,18090,643],{"class":107},[101,18092,15876],{"class":111},[101,18094,17252],{"class":1950},[101,18096,5624],{"class":111},[101,18098,18099,18101,18103,18105,18107,18109,18111,18113,18115,18117,18119,18121],{"class":103,"line":1298},[101,18100,14726],{"class":107},[101,18102,17269],{"class":111},[101,18104,157],{"class":107},[101,18106,16330],{"class":111},[101,18108,17246],{"class":1950},[101,18110,17249],{"class":111},[101,18112,17280],{"class":1950},[101,18114,13038],{"class":111},[101,18116,643],{"class":107},[101,18118,15876],{"class":111},[101,18120,17280],{"class":1950},[101,18122,5624],{"class":111},[101,18124,18125,18127,18129,18131,18133,18135,18137,18139,18141,18143,18145],{"class":103,"line":1304},[101,18126,14726],{"class":107},[101,18128,17297],{"class":111},[101,18130,157],{"class":107},[101,18132,17302],{"class":1950},[101,18134,17305],{"class":111},[101,18136,566],{"class":107},[101,18138,17239],{"class":111},[101,18140,592],{"class":107},[101,18142,17269],{"class":111},[101,18144,566],{"class":107},[101,18146,17318],{"class":111},[101,18148,18149,18151,18153,18155,18157,18159],{"class":103,"line":1316},[101,18150,3088],{"class":107},[101,18152,17325],{"class":111},[101,18154,1021],{"class":107},[101,18156,16330],{"class":111},[101,18158,17332],{"class":1950},[101,18160,17335],{"class":111},[101,18162,18163],{"class":103,"line":1599},[101,18164,2017],{"class":111},[101,18166,18167,18169,18171,18173,18175],{"class":103,"line":1604},[101,18168,9657],{"class":111},[101,18170,1155],{"class":107},[101,18172,17348],{"class":216},[101,18174,1431],{"class":107},[101,18176,8828],{"class":111},[101,18178,18179],{"class":103,"line":1610},[101,18180,2174],{"class":111},[101,18182,18183],{"class":103,"line":1615},[101,18184,16811],{"class":107},[101,18186,18187],{"class":103,"line":1629},[101,18188,2017],{"class":111},[101,18190,18191,18193,18195,18197,18199],{"class":103,"line":1634},[101,18192,9657],{"class":111},[101,18194,1155],{"class":107},[101,18196,17373],{"class":216},[101,18198,1431],{"class":107},[101,18200,8828],{"class":111},[101,18202,18203],{"class":103,"line":1640},[101,18204,2174],{"class":111},[101,18206,18207],{"class":103,"line":1661},[101,18208,1552],{"class":111},[101,18210,18211,18213,18215],{"class":103,"line":1666},[101,18212,115],{"class":107},[101,18214,1960],{"class":1950},[101,18216,1963],{"class":111},[101,18218,18219],{"class":103,"line":1680},[101,18220,1533],{"class":111},[101,18222,18223],{"class":103,"line":1685},[101,18224,15041],{"class":170},[101,18226,18227],{"class":103,"line":1714},[101,18228,14788],{"class":111},[101,18230,18231],{"class":103,"line":1719},[101,18232,17410],{"class":111},[101,18234,18235],{"class":103,"line":1736},[101,18236,16982],{"class":170},[101,18238,18239,18241,18243,18245],{"class":103,"line":1741},[101,18240,1538],{"class":111},[101,18242,1155],{"class":107},[101,18244,17423],{"class":216},[101,18246,1277],{"class":111},[101,18248,18249,18251],{"class":103,"line":1746},[101,18250,14726],{"class":107},[101,18252,17432],{"class":111},[101,18254,18255,18257,18259],{"class":103,"line":1751},[101,18256,1999],{"class":111},[101,18258,1416],{"class":107},[101,18260,17441],{"class":111},[101,18262,18263,18265,18267],{"class":103,"line":1765},[101,18264,16583],{"class":111},[101,18266,17448],{"class":1950},[101,18268,17451],{"class":111},[101,18270,18271,18273,18275,18277],{"class":103,"line":1770},[101,18272,1538],{"class":111},[101,18274,1155],{"class":107},[101,18276,17460],{"class":216},[101,18278,1277],{"class":111},[101,18280,18281,18283],{"class":103,"line":2564},[101,18282,14726],{"class":107},[101,18284,17469],{"class":111},[101,18286,18287,18289,18291,18293,18295],{"class":103,"line":2578},[101,18288,1999],{"class":111},[101,18290,1416],{"class":107},[101,18292,931],{"class":111},[101,18294,1416],{"class":107},[101,18296,17482],{"class":111},[101,18298,18299,18301,18303],{"class":103,"line":2586},[101,18300,17487],{"class":111},[101,18302,17490],{"class":1950},[101,18304,17493],{"class":111},[101,18306,18307,18309,18311],{"class":103,"line":2591},[101,18308,16583],{"class":111},[101,18310,17500],{"class":1950},[101,18312,17503],{"class":111},[101,18314,18315,18317,18319,18321],{"class":103,"line":2597},[101,18316,1538],{"class":111},[101,18318,1155],{"class":107},[101,18320,17512],{"class":216},[101,18322,1277],{"class":111},[101,18324,18325,18327],{"class":103,"line":2603},[101,18326,14726],{"class":107},[101,18328,17521],{"class":111},[101,18330,18331,18333,18335,18337,18339],{"class":103,"line":2608},[101,18332,1999],{"class":111},[101,18334,1416],{"class":107},[101,18336,17530],{"class":111},[101,18338,1416],{"class":107},[101,18340,17535],{"class":111},[101,18342,18343],{"class":103,"line":7936},[101,18344,17540],{"class":111},[101,18346,18347,18349,18351],{"class":103,"line":7960},[101,18348,17545],{"class":111},[101,18350,17490],{"class":1950},[101,18352,17550],{"class":111},[101,18354,18355,18357],{"class":103,"line":7965},[101,18356,17555],{"class":1950},[101,18358,17558],{"class":111},[101,18360,18361],{"class":103,"line":7971},[101,18362,1552],{"class":111},[43,18364,18366],{"id":18365},"_82对象的初始化清理","8.2对象的初始化清理",[1118,18368,18369,18372],{},[58,18370,18371],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[58,18373,18374],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[72,18376,18378],{"id":18377},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[10,18380,18381,18382,18385],{},"对象的",[261,18383,18384],{},"初始化和清理","也是两个非常重要的安全问题",[10,18387,18388],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[10,18390,18391],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[10,18393,18394,18395,18398,18399,18402],{},"c++利用了",[261,18396,18397],{},"构造函数","和",[261,18400,18401],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[10,18404,18405,18406],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[261,18407,18408],{},"我们不提供构造和析构，编译器会提供",[10,18410,18411],{},[261,18412,18413],{},"编译器提供的构造函数和析构函数是空实现。",[1118,18415,18416,18419],{},[58,18417,18418],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[58,18420,18421,18422,18425],{},"析构函数：主要作用在于对象",[261,18423,18424],{},"销毁前","系统自动调用，执行一些清理工作。",[10,18427,18428,18431],{},[261,18429,18430],{},"构造函数语法：",[98,18432,18433],{},"类名(){}",[55,18435,18436,18439,18442,18445,18448],{},[58,18437,18438],{},"构造函数，没有返回值也不写void",[58,18440,18441],{},"函数名称与类名相同",[58,18443,18444],{},"构造函数可以有参数，因此可以发生重载",[58,18446,18447],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[58,18449,18450,18451,540],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[98,18452,18453],{},"Person(){}",[10,18455,18456,13783,18459],{},[261,18457,18458],{},"析构函数语法：",[98,18460,18461],{},"~类名(){}",[55,18463,18464,18467,18470,18476],{},[58,18465,18466],{},"析构函数，没有返回值也不写void",[58,18468,18469],{},"函数名称与类名相同,在名称前加上符号  ~",[58,18471,18472,18473],{},"析构函数不可以有参数，因此",[261,18474,18475],{},"不可以发生重载",[58,18477,18478],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[92,18480,18482],{"className":94,"code":18481,"language":96,"meta":20,"style":20},"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",[98,18483,18484,18490,18494,18498,18503,18510,18514,18527,18531,18536,18543,18547,18560,18564,18568,18572,18576,18584,18588,18596,18600,18604,18612,18616,18621,18625,18632,18636,18649,18653,18661],{"__ignoreMap":20},[101,18485,18486,18488],{"class":103,"line":104},[101,18487,14682],{"class":107},[101,18489,15159],{"class":1950},[101,18491,18492],{"class":103,"line":21},[101,18493,1533],{"class":111},[101,18495,18496],{"class":103,"line":1166},[101,18497,14704],{"class":107},[101,18499,18500],{"class":103,"line":1181},[101,18501,18502],{"class":170},"    \u002F\u002F构造函数\n",[101,18504,18505,18508],{"class":103,"line":1187},[101,18506,18507],{"class":1950},"    Person",[101,18509,1963],{"class":111},[101,18511,18512],{"class":103,"line":1201},[101,18513,2017],{"class":111},[101,18515,18516,18518,18520,18523,18525],{"class":103,"line":1207},[101,18517,9657],{"class":111},[101,18519,1155],{"class":107},[101,18521,18522],{"class":216}," \"Person的构造函数调用\"",[101,18524,1431],{"class":107},[101,18526,8828],{"class":111},[101,18528,18529],{"class":103,"line":1298},[101,18530,2174],{"class":111},[101,18532,18533],{"class":103,"line":1304},[101,18534,18535],{"class":170},"    \u002F\u002F析构函数\n",[101,18537,18538,18541],{"class":103,"line":1316},[101,18539,18540],{"class":1950},"    ~Person",[101,18542,1963],{"class":111},[101,18544,18545],{"class":103,"line":1599},[101,18546,2017],{"class":111},[101,18548,18549,18551,18553,18556,18558],{"class":103,"line":1604},[101,18550,9657],{"class":111},[101,18552,1155],{"class":107},[101,18554,18555],{"class":216}," \"Person的析构函数调用\"",[101,18557,1431],{"class":107},[101,18559,8828],{"class":111},[101,18561,18562],{"class":103,"line":1610},[101,18563,2174],{"class":111},[101,18565,18566],{"class":103,"line":1615},[101,18567,2387],{"emptyLinePlaceholder":27},[101,18569,18570],{"class":103,"line":1629},[101,18571,3982],{"class":111},[101,18573,18574],{"class":103,"line":1634},[101,18575,2387],{"emptyLinePlaceholder":27},[101,18577,18578,18580,18582],{"class":103,"line":1640},[101,18579,5352],{"class":107},[101,18581,5576],{"class":1950},[101,18583,1963],{"class":111},[101,18585,18586],{"class":103,"line":1661},[101,18587,1533],{"class":111},[101,18589,18590,18593],{"class":103,"line":1666},[101,18591,18592],{"class":111},"    Person p;",[101,18594,18595],{"class":170},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[101,18597,18598],{"class":103,"line":1680},[101,18599,1552],{"class":111},[101,18601,18602],{"class":103,"line":1685},[101,18603,2387],{"emptyLinePlaceholder":27},[101,18605,18606,18608,18610],{"class":103,"line":1714},[101,18607,115],{"class":107},[101,18609,1960],{"class":1950},[101,18611,10841],{"class":111},[101,18613,18614],{"class":103,"line":1719},[101,18615,13198],{"class":111},[101,18617,18618],{"class":103,"line":1736},[101,18619,18620],{"class":170},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[101,18622,18623],{"class":103,"line":1741},[101,18624,2387],{"emptyLinePlaceholder":27},[101,18626,18627,18629],{"class":103,"line":1746},[101,18628,18592],{"class":111},[101,18630,18631],{"class":170},"\u002F\u002F只有构造函数\n",[101,18633,18634],{"class":103,"line":1751},[101,18635,2387],{"emptyLinePlaceholder":27},[101,18637,18638,18640,18642,18644,18646],{"class":103,"line":1765},[101,18639,2290],{"class":1950},[101,18641,112],{"class":111},[101,18643,2295],{"class":216},[101,18645,5954],{"class":111},[101,18647,18648],{"class":170},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[101,18650,18651],{"class":103,"line":1770},[101,18652,2387],{"emptyLinePlaceholder":27},[101,18654,18655,18657,18659],{"class":103,"line":2564},[101,18656,4077],{"class":107},[101,18658,4080],{"class":160},[101,18660,1277],{"class":111},[101,18662,18663],{"class":103,"line":2578},[101,18664,1552],{"class":111},[10,18666,18667],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[72,18669,18671],{"id":18670},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[10,18673,18674],{},"两种分类方式：",[10,18676,18677],{},"​\t按参数分为： 有参构造和无参构造",[10,18679,18680],{},"​\t按类型分为： 普通构造和拷贝构造",[10,18682,18683],{},"三种调用方式：",[10,18685,18686],{},"​\t括号法",[10,18688,18689],{},"​\t显示法",[10,18691,18692],{},"​\t隐式转换法",[92,18694,18696],{"className":94,"code":18695,"language":96,"meta":20,"style":20},"#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",[98,18697,18698,18704,18714,18719,18724,18729,18734,18738,18746,18750,18754,18758,18764,18768,18781,18785,18797,18801,18810,18823,18827,18831,18837,18841,18854,18858,18863,18879,18883,18888,18897,18910,18914,18920,18924,18929,18937,18941,18946,18950,18958,18962,18967,18972,18977,18982,18987,18991,18996,19001,19006,19011,19015,19020,19025,19041,19053,19058,19062,19067,19072,19077,19081,19086,19100,19113,19117,19125,19129,19135,19141,19149],{"__ignoreMap":20},[101,18699,18700,18702],{"class":103,"line":104},[101,18701,1936],{"class":107},[101,18703,1939],{"class":216},[101,18705,18706,18708,18710,18712],{"class":103,"line":21},[101,18707,1944],{"class":107},[101,18709,1947],{"class":107},[101,18711,1951],{"class":1950},[101,18713,1277],{"class":111},[101,18715,18716],{"class":103,"line":1166},[101,18717,18718],{"class":170},"\u002F\u002F1.构造函数的分类及调用\n",[101,18720,18721],{"class":103,"line":1181},[101,18722,18723],{"class":170},"\u002F\u002F分类\n",[101,18725,18726],{"class":103,"line":1187},[101,18727,18728],{"class":170},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[101,18730,18731],{"class":103,"line":1201},[101,18732,18733],{"class":170},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[101,18735,18736],{"class":103,"line":1207},[101,18737,2387],{"emptyLinePlaceholder":27},[101,18739,18740,18742,18744],{"class":103,"line":1298},[101,18741,14682],{"class":107},[101,18743,15557],{"class":1950},[101,18745,2661],{"class":111},[101,18747,18748],{"class":103,"line":1304},[101,18749,1533],{"class":111},[101,18751,18752],{"class":103,"line":1316},[101,18753,14704],{"class":107},[101,18755,18756],{"class":103,"line":1599},[101,18757,18502],{"class":170},[101,18759,18760,18762],{"class":103,"line":1604},[101,18761,18507],{"class":1950},[101,18763,1963],{"class":111},[101,18765,18766],{"class":103,"line":1610},[101,18767,2017],{"class":111},[101,18769,18770,18772,18774,18777,18779],{"class":103,"line":1615},[101,18771,3438],{"class":111},[101,18773,1155],{"class":107},[101,18775,18776],{"class":216},"\"Person构造函数无参构造\"",[101,18778,1155],{"class":107},[101,18780,1178],{"class":111},[101,18782,18783],{"class":103,"line":1629},[101,18784,2174],{"class":111},[101,18786,18787,18789,18791,18793,18795],{"class":103,"line":1634},[101,18788,18507],{"class":1950},[101,18790,112],{"class":111},[101,18792,115],{"class":107},[101,18794,1385],{"class":5204},[101,18796,118],{"class":111},[101,18798,18799],{"class":103,"line":1640},[101,18800,2017],{"class":111},[101,18802,18803,18806,18808],{"class":103,"line":1661},[101,18804,18805],{"class":111},"        age",[101,18807,157],{"class":107},[101,18809,6185],{"class":111},[101,18811,18812,18814,18816,18819,18821],{"class":103,"line":1666},[101,18813,3438],{"class":111},[101,18815,1155],{"class":107},[101,18817,18818],{"class":216},"\"Person构造函数有参构造\"",[101,18820,1155],{"class":107},[101,18822,1178],{"class":111},[101,18824,18825],{"class":103,"line":1680},[101,18826,2174],{"class":111},[101,18828,18829],{"class":103,"line":1685},[101,18830,18535],{"class":170},[101,18832,18833,18835],{"class":103,"line":1714},[101,18834,18540],{"class":1950},[101,18836,1963],{"class":111},[101,18838,18839],{"class":103,"line":1719},[101,18840,2017],{"class":111},[101,18842,18843,18845,18847,18850,18852],{"class":103,"line":1736},[101,18844,3438],{"class":111},[101,18846,1155],{"class":107},[101,18848,18849],{"class":216},"\"Person析构函数被调用\"",[101,18851,1155],{"class":107},[101,18853,1178],{"class":111},[101,18855,18856],{"class":103,"line":1741},[101,18857,2174],{"class":111},[101,18859,18860],{"class":103,"line":1746},[101,18861,18862],{"class":170},"    \u002F\u002F拷贝构造函数\n",[101,18864,18865,18867,18869,18871,18873,18875,18877],{"class":103,"line":1751},[101,18866,18507],{"class":1950},[101,18868,112],{"class":111},[101,18870,6780],{"class":107},[101,18872,15557],{"class":1950},[101,18874,10572],{"class":107},[101,18876,10],{"class":5204},[101,18878,118],{"class":111},[101,18880,18881],{"class":103,"line":1765},[101,18882,2017],{"class":111},[101,18884,18885],{"class":103,"line":1770},[101,18886,18887],{"class":170},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[101,18889,18890,18892,18894],{"class":103,"line":2564},[101,18891,18805],{"class":111},[101,18893,157],{"class":107},[101,18895,18896],{"class":111},"p.age;\n",[101,18898,18899,18901,18903,18906,18908],{"class":103,"line":2578},[101,18900,3438],{"class":111},[101,18902,1155],{"class":107},[101,18904,18905],{"class":216},"\"Person拷贝构造函数被调用\"",[101,18907,1155],{"class":107},[101,18909,1178],{"class":111},[101,18911,18912],{"class":103,"line":2586},[101,18913,2174],{"class":111},[101,18915,18916,18918],{"class":103,"line":2591},[101,18917,1972],{"class":107},[101,18919,7785],{"class":111},[101,18921,18922],{"class":103,"line":2597},[101,18923,3982],{"class":111},[101,18925,18926],{"class":103,"line":2603},[101,18927,18928],{"class":170},"\u002F\u002F调用\n",[101,18930,18931,18933,18935],{"class":103,"line":2608},[101,18932,5352],{"class":107},[101,18934,5576],{"class":1950},[101,18936,1963],{"class":111},[101,18938,18939],{"class":103,"line":7936},[101,18940,1533],{"class":111},[101,18942,18943],{"class":103,"line":7960},[101,18944,18945],{"class":170},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[101,18947,18948],{"class":103,"line":7965},[101,18949,1552],{"class":111},[101,18951,18952,18954,18956],{"class":103,"line":7971},[101,18953,5352],{"class":107},[101,18955,5645],{"class":1950},[101,18957,1963],{"class":111},[101,18959,18960],{"class":103,"line":7998},[101,18961,1533],{"class":111},[101,18963,18964],{"class":103,"line":8003},[101,18965,18966],{"class":170},"    \u002F\u002F1.括号法\n",[101,18968,18969],{"class":103,"line":8009},[101,18970,18971],{"class":170},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[101,18973,18974],{"class":103,"line":8021},[101,18975,18976],{"class":170},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[101,18978,18979],{"class":103,"line":8033},[101,18980,18981],{"class":170},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[101,18983,18984],{"class":103,"line":8045},[101,18985,18986],{"class":170},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[101,18988,18989],{"class":103,"line":9704},[101,18990,2387],{"emptyLinePlaceholder":27},[101,18992,18993],{"class":103,"line":9729},[101,18994,18995],{"class":170},"    \u002F\u002F注意事项\n",[101,18997,18998],{"class":103,"line":9752},[101,18999,19000],{"class":170},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[101,19002,19003],{"class":103,"line":9776},[101,19004,19005],{"class":170},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[101,19007,19008],{"class":103,"line":9781},[101,19009,19010],{"class":170},"    \u002F\u002F Person p4();\n",[101,19012,19013],{"class":103,"line":9786},[101,19014,2387],{"emptyLinePlaceholder":27},[101,19016,19017],{"class":103,"line":9791},[101,19018,19019],{"class":170},"    \u002F\u002F2.显示法\n",[101,19021,19022],{"class":103,"line":9800},[101,19023,19024],{"class":111},"    Person p1;\n",[101,19026,19027,19030,19032,19035,19037,19039],{"class":103,"line":9805},[101,19028,19029],{"class":111},"    Person p2",[101,19031,157],{"class":107},[101,19033,19034],{"class":1950},"Person",[101,19036,112],{"class":111},[101,19038,557],{"class":160},[101,19040,2706],{"class":111},[101,19042,19043,19046,19048,19050],{"class":103,"line":9811},[101,19044,19045],{"class":111},"    Person p3",[101,19047,157],{"class":107},[101,19049,19034],{"class":1950},[101,19051,19052],{"class":111},"(p2);\n",[101,19054,19055],{"class":103,"line":9832},[101,19056,19057],{"class":170},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[101,19059,19060],{"class":103,"line":9838},[101,19061,2387],{"emptyLinePlaceholder":27},[101,19063,19064],{"class":103,"line":9852},[101,19065,19066],{"class":170},"    \u002F\u002F 注意事项2\n",[101,19068,19069],{"class":103,"line":9858},[101,19070,19071],{"class":170},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[101,19073,19074],{"class":103,"line":9885},[101,19075,19076],{"class":170},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[101,19078,19079],{"class":103,"line":9894},[101,19080,2387],{"emptyLinePlaceholder":27},[101,19082,19083],{"class":103,"line":9900},[101,19084,19085],{"class":170},"    \u002F\u002F3.隐士转换法\n",[101,19087,19088,19091,19093,19095,19097],{"class":103,"line":9908},[101,19089,19090],{"class":111},"    Person p4",[101,19092,157],{"class":107},[101,19094,557],{"class":160},[101,19096,167],{"class":111},[101,19098,19099],{"class":170},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[101,19101,19102,19105,19107,19110],{"class":103,"line":9913},[101,19103,19104],{"class":111},"    Person p5",[101,19106,157],{"class":107},[101,19108,19109],{"class":111},"p4;",[101,19111,19112],{"class":170}," \u002F\u002F 这里会调用拷贝构造函数\n",[101,19114,19115],{"class":103,"line":16592},[101,19116,1552],{"class":111},[101,19118,19119,19121,19123],{"class":103,"line":16598},[101,19120,115],{"class":107},[101,19122,1960],{"class":1950},[101,19124,1963],{"class":111},[101,19126,19127],{"class":103,"line":16621},[101,19128,1533],{"class":111},[101,19130,19131,19133],{"class":103,"line":16627},[101,19132,5621],{"class":1950},[101,19134,5624],{"class":111},[101,19136,19137,19139],{"class":103,"line":16650},[101,19138,5690],{"class":1950},[101,19140,5624],{"class":111},[101,19142,19143,19145,19147],{"class":103,"line":16664},[101,19144,4077],{"class":107},[101,19146,4080],{"class":160},[101,19148,1277],{"class":111},[101,19150,19151],{"class":103,"line":16684},[101,19152,1552],{"class":111},[10,19154,19155,19158],{},[261,19156,19157],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[72,19160,19162],{"id":19161},"_823拷贝构造函数","8.2.3拷贝构造函数",[10,19164,19165],{},"C++中拷贝构造函数调用时机通常有三种情况",[1118,19167,19168,19171,19174],{},[58,19169,19170],{},"使用一个已经创建完毕的对象来初始化一个新对象",[58,19172,19173],{},"值传递的方式给函数参数传值",[58,19175,19176],{},"以值方式返回局部对象",[92,19178,19180],{"className":94,"code":19179,"language":96,"meta":20,"style":20},"#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",[98,19181,19182,19188,19198,19202,19207,19211,19216,19221,19226,19232,19236,19240,19246,19250,19263,19267,19272,19284,19288,19296,19309,19313,19317,19333,19337,19346,19359,19363,19369,19373,19385,19389,19395,19399,19403,19411,19415,19428,19436,19454,19458,19463,19468,19483,19487,19500,19504,19512,19516,19520,19528,19532,19537,19546,19550,19554,19579,19589,19593,19601,19605,19616,19641,19645,19649,19653,19661,19665,19670,19675,19682,19687,19692,19697,19702,19706,19711,19715,19720,19724,19729,19734,19738,19742,19747,19752,19760],{"__ignoreMap":20},[101,19183,19184,19186],{"class":103,"line":104},[101,19185,1936],{"class":107},[101,19187,1939],{"class":216},[101,19189,19190,19192,19194,19196],{"class":103,"line":21},[101,19191,1944],{"class":107},[101,19193,1947],{"class":107},[101,19195,1951],{"class":1950},[101,19197,1277],{"class":111},[101,19199,19200],{"class":103,"line":1166},[101,19201,2387],{"emptyLinePlaceholder":27},[101,19203,19204],{"class":103,"line":1181},[101,19205,19206],{"class":170},"\u002F\u002F拷贝构造函数调用时机\n",[101,19208,19209],{"class":103,"line":1187},[101,19210,2387],{"emptyLinePlaceholder":27},[101,19212,19213],{"class":103,"line":1201},[101,19214,19215],{"class":170},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[101,19217,19218],{"class":103,"line":1207},[101,19219,19220],{"class":170},"\u002F\u002F2.值传递的方式给函数参数传值\n",[101,19222,19223],{"class":103,"line":1298},[101,19224,19225],{"class":170},"\u002F\u002F3.以值方式返回局部对象\n",[101,19227,19228,19230],{"class":103,"line":1304},[101,19229,14682],{"class":107},[101,19231,15159],{"class":1950},[101,19233,19234],{"class":103,"line":1316},[101,19235,1533],{"class":111},[101,19237,19238],{"class":103,"line":1599},[101,19239,14704],{"class":107},[101,19241,19242,19244],{"class":103,"line":1604},[101,19243,18507],{"class":1950},[101,19245,1963],{"class":111},[101,19247,19248],{"class":103,"line":1610},[101,19249,2017],{"class":111},[101,19251,19252,19254,19256,19259,19261],{"class":103,"line":1615},[101,19253,9657],{"class":111},[101,19255,1155],{"class":107},[101,19257,19258],{"class":216}," \"Person的默认构造函数调用\"",[101,19260,1431],{"class":107},[101,19262,8828],{"class":111},[101,19264,19265],{"class":103,"line":1629},[101,19266,2174],{"class":111},[101,19268,19269],{"class":103,"line":1634},[101,19270,19271],{"class":170},"    \u002F\u002F有参构造\n",[101,19273,19274,19276,19278,19280,19282],{"class":103,"line":1640},[101,19275,18507],{"class":1950},[101,19277,112],{"class":111},[101,19279,115],{"class":107},[101,19281,15677],{"class":5204},[101,19283,118],{"class":111},[101,19285,19286],{"class":103,"line":1661},[101,19287,2017],{"class":111},[101,19289,19290,19292,19294],{"class":103,"line":1666},[101,19291,15731],{"class":111},[101,19293,157],{"class":107},[101,19295,7785],{"class":111},[101,19297,19298,19300,19302,19305,19307],{"class":103,"line":1680},[101,19299,9657],{"class":111},[101,19301,1155],{"class":107},[101,19303,19304],{"class":216}," \"Person的有参构造函数调用\"",[101,19306,1431],{"class":107},[101,19308,8828],{"class":111},[101,19310,19311],{"class":103,"line":1685},[101,19312,2174],{"class":111},[101,19314,19315],{"class":103,"line":1714},[101,19316,18862],{"class":170},[101,19318,19319,19321,19323,19325,19327,19329,19331],{"class":103,"line":1719},[101,19320,18507],{"class":1950},[101,19322,112],{"class":111},[101,19324,6780],{"class":107},[101,19326,15557],{"class":1950},[101,19328,10572],{"class":107},[101,19330,10],{"class":5204},[101,19332,118],{"class":111},[101,19334,19335],{"class":103,"line":1736},[101,19336,2017],{"class":111},[101,19338,19339,19341,19343],{"class":103,"line":1741},[101,19340,15731],{"class":111},[101,19342,157],{"class":107},[101,19344,19345],{"class":111}," p.m_Age;\n",[101,19347,19348,19350,19352,19355,19357],{"class":103,"line":1746},[101,19349,9657],{"class":111},[101,19351,1155],{"class":107},[101,19353,19354],{"class":216}," \"Person的拷贝构造函数调用\"",[101,19356,1431],{"class":107},[101,19358,8828],{"class":111},[101,19360,19361],{"class":103,"line":1751},[101,19362,2174],{"class":111},[101,19364,19365,19367],{"class":103,"line":1765},[101,19366,18540],{"class":1950},[101,19368,1963],{"class":111},[101,19370,19371],{"class":103,"line":1770},[101,19372,2017],{"class":111},[101,19374,19375,19377,19379,19381,19383],{"class":103,"line":2564},[101,19376,9657],{"class":111},[101,19378,1155],{"class":107},[101,19380,18555],{"class":216},[101,19382,1431],{"class":107},[101,19384,8828],{"class":111},[101,19386,19387],{"class":103,"line":2578},[101,19388,2174],{"class":111},[101,19390,19391,19393],{"class":103,"line":2586},[101,19392,1972],{"class":107},[101,19394,15654],{"class":111},[101,19396,19397],{"class":103,"line":2591},[101,19398,3982],{"class":111},[101,19400,19401],{"class":103,"line":2597},[101,19402,19215],{"class":170},[101,19404,19405,19407,19409],{"class":103,"line":2603},[101,19406,5352],{"class":107},[101,19408,5576],{"class":1950},[101,19410,1963],{"class":111},[101,19412,19413],{"class":103,"line":2608},[101,19414,1533],{"class":111},[101,19416,19417,19420,19422,19424,19426],{"class":103,"line":7936},[101,19418,19419],{"class":111},"    Person ",[101,19421,7118],{"class":1950},[101,19423,112],{"class":111},[101,19425,811],{"class":160},[101,19427,2706],{"class":111},[101,19429,19430,19432,19434],{"class":103,"line":7960},[101,19431,19419],{"class":111},[101,19433,7021],{"class":1950},[101,19435,17503],{"class":111},[101,19437,19438,19440,19442,19445,19447,19450,19452],{"class":103,"line":7965},[101,19439,1538],{"class":111},[101,19441,1155],{"class":107},[101,19443,19444],{"class":216},"\"P2的年龄为：\"",[101,19446,1155],{"class":107},[101,19448,19449],{"class":111},"p2.m_Age",[101,19451,1155],{"class":107},[101,19453,1178],{"class":111},[101,19455,19456],{"class":103,"line":7971},[101,19457,1552],{"class":111},[101,19459,19460],{"class":103,"line":7998},[101,19461,19462],{"class":170},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[101,19464,19465],{"class":103,"line":8003},[101,19466,19467],{"class":170},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[101,19469,19470,19472,19475,19477,19479,19481],{"class":103,"line":8009},[101,19471,5352],{"class":107},[101,19473,19474],{"class":1950}," doWork",[101,19476,112],{"class":111},[101,19478,19034],{"class":1950},[101,19480,6813],{"class":5204},[101,19482,118],{"class":111},[101,19484,19485],{"class":103,"line":8021},[101,19486,1533],{"class":111},[101,19488,19489,19491,19493,19496,19498],{"class":103,"line":8033},[101,19490,6517],{"class":111},[101,19492,1155],{"class":107},[101,19494,19495],{"class":216}," \"doWork函数调用\"",[101,19497,1431],{"class":107},[101,19499,8828],{"class":111},[101,19501,19502],{"class":103,"line":8045},[101,19503,1552],{"class":111},[101,19505,19506,19508,19510],{"class":103,"line":9704},[101,19507,5352],{"class":107},[101,19509,5645],{"class":1950},[101,19511,1963],{"class":111},[101,19513,19514],{"class":103,"line":9729},[101,19515,1533],{"class":111},[101,19517,19518],{"class":103,"line":9752},[101,19519,15301],{"class":111},[101,19521,19522,19525],{"class":103,"line":9776},[101,19523,19524],{"class":1950},"    doWork",[101,19526,19527],{"class":111},"(p);\n",[101,19529,19530],{"class":103,"line":9781},[101,19531,1552],{"class":111},[101,19533,19534],{"class":103,"line":9786},[101,19535,19536],{"class":170},"\u002F\u002F 3.以值方式返回局部对象\n",[101,19538,19539,19541,19544],{"class":103,"line":9791},[101,19540,19034],{"class":1950},[101,19542,19543],{"class":1950}," doWork2",[101,19545,1963],{"class":111},[101,19547,19548],{"class":103,"line":9800},[101,19549,1533],{"class":111},[101,19551,19552],{"class":103,"line":9805},[101,19553,19024],{"class":111},[101,19555,19556,19558,19560,19562,19564,19566,19568,19570,19572,19574,19576],{"class":103,"line":9811},[101,19557,1538],{"class":111},[101,19559,1155],{"class":107},[101,19561,112],{"class":111},[101,19563,115],{"class":107},[101,19565,6506],{"class":107},[101,19567,540],{"class":111},[101,19569,464],{"class":107},[101,19571,7118],{"class":111},[101,19573,1155],{"class":107},[101,19575,1225],{"class":111},[101,19577,19578],{"class":170},"\u002F\u002F打印p1的地址\n",[101,19580,19581,19583,19586],{"class":103,"line":9832},[101,19582,4077],{"class":107},[101,19584,19585],{"class":111}," p1;",[101,19587,19588],{"class":170},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[101,19590,19591],{"class":103,"line":9838},[101,19592,1552],{"class":111},[101,19594,19595,19597,19599],{"class":103,"line":9852},[101,19596,5352],{"class":107},[101,19598,5717],{"class":1950},[101,19600,1963],{"class":111},[101,19602,19603],{"class":103,"line":9858},[101,19604,1533],{"class":111},[101,19606,19607,19610,19612,19614],{"class":103,"line":9885},[101,19608,19609],{"class":111},"    Person p ",[101,19611,157],{"class":107},[101,19613,19543],{"class":1950},[101,19615,5624],{"class":111},[101,19617,19618,19620,19622,19624,19626,19628,19630,19632,19634,19636,19638],{"class":103,"line":9894},[101,19619,1538],{"class":111},[101,19621,1155],{"class":107},[101,19623,112],{"class":111},[101,19625,115],{"class":107},[101,19627,6506],{"class":107},[101,19629,540],{"class":111},[101,19631,464],{"class":107},[101,19633,10],{"class":111},[101,19635,1155],{"class":107},[101,19637,1225],{"class":111},[101,19639,19640],{"class":170},"\u002F\u002F打印p的地址\n",[101,19642,19643],{"class":103,"line":9900},[101,19644,1552],{"class":111},[101,19646,19647],{"class":103,"line":9908},[101,19648,2387],{"emptyLinePlaceholder":27},[101,19650,19651],{"class":103,"line":9913},[101,19652,2387],{"emptyLinePlaceholder":27},[101,19654,19655,19657,19659],{"class":103,"line":16592},[101,19656,115],{"class":107},[101,19658,1960],{"class":1950},[101,19660,1963],{"class":111},[101,19662,19663],{"class":103,"line":16598},[101,19664,1533],{"class":111},[101,19666,19667],{"class":103,"line":16621},[101,19668,19669],{"class":170},"    \u002F\u002F test01();\n",[101,19671,19672],{"class":103,"line":16627},[101,19673,19674],{"class":170},"    \u002F\u002F test02();\n",[101,19676,19677,19680],{"class":103,"line":16650},[101,19678,19679],{"class":1950},"    test03",[101,19681,5624],{"class":111},[101,19683,19684],{"class":103,"line":16664},[101,19685,19686],{"class":170},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[101,19688,19689],{"class":103,"line":16684},[101,19690,19691],{"class":170},"\u002F\u002F 输出结果如下：\n",[101,19693,19694],{"class":103,"line":16690},[101,19695,19696],{"class":170},"\u002F\u002F Person的默认构造函数调用\n",[101,19698,19699],{"class":103,"line":16701},[101,19700,19701],{"class":170},"\u002F\u002F 0x7fffffffceec\n",[101,19703,19704],{"class":103,"line":16724},[101,19705,19701],{"class":170},[101,19707,19708],{"class":103,"line":16746},[101,19709,19710],{"class":170},"\u002F\u002F Person的析构函数调用\n",[101,19712,19713],{"class":103,"line":16751},[101,19714,2387],{"emptyLinePlaceholder":27},[101,19716,19717],{"class":103,"line":16757},[101,19718,19719],{"class":170},"\u002F\u002F 之前的输出结果如下：\n",[101,19721,19722],{"class":103,"line":16771},[101,19723,19696],{"class":170},[101,19725,19726],{"class":103,"line":16784},[101,19727,19728],{"class":170},"\u002F\u002F 地址\n",[101,19730,19731],{"class":103,"line":16789},[101,19732,19733],{"class":170},"\u002F\u002F Person的拷贝构造函数调用\n",[101,19735,19736],{"class":103,"line":16803},[101,19737,19710],{"class":170},[101,19739,19740],{"class":103,"line":16808},[101,19741,19728],{"class":170},[101,19743,19744],{"class":103,"line":16814},[101,19745,19746],{"class":170},"\u002F\u002F (这两次输出的地址也是不同的) \n",[101,19748,19749],{"class":103,"line":16819},[101,19750,19751],{"class":170},"\u002F\u002F Person的析构函数调用     \n",[101,19753,19754,19756,19758],{"class":103,"line":16833},[101,19755,4077],{"class":107},[101,19757,4080],{"class":160},[101,19759,1277],{"class":111},[101,19761,19762],{"class":103,"line":16838},[101,19763,1552],{"class":111},[10,19765,19766],{},"简化版理解",[92,19768,19770],{"className":94,"code":19769,"language":96,"meta":20,"style":20},"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",[98,19771,19772,19780,19784,19790,19803,19814,19818,19830,19843,19851,19855,19871,19884,19893,19897,19902,19908,19921,19925,19929,19936,19940,19944,19949,19957,19961,19977,19990,20003,20007,20012,20020,20024,20028,20033,20038,20054,20062,20069,20075,20079,20083,20088,20096,20100,20104,20127,20134,20138,20142,20150,20154,20164,20186,20190,20194,20198,20206,20210,20215,20220,20226,20230,20240,20244,20252],{"__ignoreMap":20},[101,19773,19774,19776,19778],{"class":103,"line":104},[101,19775,14682],{"class":107},[101,19777,15557],{"class":1950},[101,19779,15560],{"class":111},[101,19781,19782],{"class":103,"line":21},[101,19783,14704],{"class":107},[101,19785,19786,19788],{"class":103,"line":1166},[101,19787,18507],{"class":1950},[101,19789,10841],{"class":111},[101,19791,19792,19794,19796,19799,19801],{"class":103,"line":1181},[101,19793,9657],{"class":111},[101,19795,1155],{"class":107},[101,19797,19798],{"class":216}," \"无参构造函数!\"",[101,19800,1431],{"class":107},[101,19802,8828],{"class":111},[101,19804,19805,19808,19810,19812],{"class":103,"line":1187},[101,19806,19807],{"class":111},"        mAge ",[101,19809,157],{"class":107},[101,19811,4080],{"class":160},[101,19813,1277],{"class":111},[101,19815,19816],{"class":103,"line":1201},[101,19817,2174],{"class":111},[101,19819,19820,19822,19824,19826,19828],{"class":103,"line":1207},[101,19821,18507],{"class":1950},[101,19823,112],{"class":111},[101,19825,115],{"class":107},[101,19827,15677],{"class":5204},[101,19829,12430],{"class":111},[101,19831,19832,19834,19836,19839,19841],{"class":103,"line":1298},[101,19833,9657],{"class":111},[101,19835,1155],{"class":107},[101,19837,19838],{"class":216}," \"有参构造函数!\"",[101,19840,1431],{"class":107},[101,19842,8828],{"class":111},[101,19844,19845,19847,19849],{"class":103,"line":1304},[101,19846,19807],{"class":111},[101,19848,157],{"class":107},[101,19850,7785],{"class":111},[101,19852,19853],{"class":103,"line":1316},[101,19854,2174],{"class":111},[101,19856,19857,19859,19861,19863,19865,19867,19869],{"class":103,"line":1599},[101,19858,18507],{"class":1950},[101,19860,112],{"class":111},[101,19862,6780],{"class":107},[101,19864,15557],{"class":1950},[101,19866,464],{"class":107},[101,19868,6813],{"class":5204},[101,19870,12430],{"class":111},[101,19872,19873,19875,19877,19880,19882],{"class":103,"line":1604},[101,19874,9657],{"class":111},[101,19876,1155],{"class":107},[101,19878,19879],{"class":216}," \"拷贝构造函数!\"",[101,19881,1431],{"class":107},[101,19883,8828],{"class":111},[101,19885,19886,19888,19890],{"class":103,"line":1610},[101,19887,19807],{"class":111},[101,19889,157],{"class":107},[101,19891,19892],{"class":111}," p.mAge;\n",[101,19894,19895],{"class":103,"line":1615},[101,19896,2174],{"class":111},[101,19898,19899],{"class":103,"line":1629},[101,19900,19901],{"class":170},"    \u002F\u002F析构函数在释放内存之前调用\n",[101,19903,19904,19906],{"class":103,"line":1634},[101,19905,18540],{"class":1950},[101,19907,10841],{"class":111},[101,19909,19910,19912,19914,19917,19919],{"class":103,"line":1640},[101,19911,9657],{"class":111},[101,19913,1155],{"class":107},[101,19915,19916],{"class":216}," \"析构函数!\"",[101,19918,1431],{"class":107},[101,19920,8828],{"class":111},[101,19922,19923],{"class":103,"line":1661},[101,19924,2174],{"class":111},[101,19926,19927],{"class":103,"line":1666},[101,19928,14704],{"class":107},[101,19930,19931,19933],{"class":103,"line":1680},[101,19932,1972],{"class":107},[101,19934,19935],{"class":111}," mAge;\n",[101,19937,19938],{"class":103,"line":1685},[101,19939,3982],{"class":111},[101,19941,19942],{"class":103,"line":1714},[101,19943,2387],{"emptyLinePlaceholder":27},[101,19945,19946],{"class":103,"line":1719},[101,19947,19948],{"class":170},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[101,19950,19951,19953,19955],{"class":103,"line":1736},[101,19952,5352],{"class":107},[101,19954,5576],{"class":1950},[101,19956,10841],{"class":111},[101,19958,19959],{"class":103,"line":1741},[101,19960,2387],{"emptyLinePlaceholder":27},[101,19962,19963,19965,19968,19970,19972,19974],{"class":103,"line":1746},[101,19964,19419],{"class":111},[101,19966,19967],{"class":1950},"man",[101,19969,112],{"class":111},[101,19971,422],{"class":160},[101,19973,5954],{"class":111},[101,19975,19976],{"class":170}," \u002F\u002Fp对象已经创建完毕\n",[101,19978,19979,19981,19984,19987],{"class":103,"line":1751},[101,19980,19419],{"class":111},[101,19982,19983],{"class":1950},"newman",[101,19985,19986],{"class":111},"(man);",[101,19988,19989],{"class":170}," \u002F\u002F调用拷贝构造函数\n",[101,19991,19992,19995,19997,20000],{"class":103,"line":1765},[101,19993,19994],{"class":111},"    Person newman2 ",[101,19996,157],{"class":107},[101,19998,19999],{"class":111}," man;",[101,20001,20002],{"class":170}," \u002F\u002F拷贝构造\n",[101,20004,20005],{"class":103,"line":1770},[101,20006,2387],{"emptyLinePlaceholder":27},[101,20008,20009],{"class":103,"line":2564},[101,20010,20011],{"class":170},"    \u002F\u002FPerson newman3;\n",[101,20013,20014,20017],{"class":103,"line":2578},[101,20015,20016],{"class":170},"    \u002F\u002Fnewman3 = man;",[101,20018,20019],{"class":170}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[101,20021,20022],{"class":103,"line":2586},[101,20023,1552],{"class":111},[101,20025,20026],{"class":103,"line":2591},[101,20027,2387],{"emptyLinePlaceholder":27},[101,20029,20030],{"class":103,"line":2597},[101,20031,20032],{"class":170},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[101,20034,20035],{"class":103,"line":2603},[101,20036,20037],{"class":170},"\u002F\u002F相当于Person p1 = p;\n",[101,20039,20040,20042,20044,20046,20048,20051],{"class":103,"line":2608},[101,20041,5352],{"class":107},[101,20043,19474],{"class":1950},[101,20045,112],{"class":111},[101,20047,19034],{"class":1950},[101,20049,20050],{"class":5204}," p1",[101,20052,20053],{"class":111},") {}\n",[101,20055,20056,20058,20060],{"class":103,"line":7936},[101,20057,5352],{"class":107},[101,20059,5645],{"class":1950},[101,20061,10841],{"class":111},[101,20063,20064,20066],{"class":103,"line":7960},[101,20065,18592],{"class":111},[101,20067,20068],{"class":170}," \u002F\u002F无参构造函数\n",[101,20070,20071,20073],{"class":103,"line":7965},[101,20072,19524],{"class":1950},[101,20074,19527],{"class":111},[101,20076,20077],{"class":103,"line":7971},[101,20078,1552],{"class":111},[101,20080,20081],{"class":103,"line":7998},[101,20082,2387],{"emptyLinePlaceholder":27},[101,20084,20085],{"class":103,"line":8003},[101,20086,20087],{"class":170},"\u002F\u002F3. 以值方式返回局部对象\n",[101,20089,20090,20092,20094],{"class":103,"line":8009},[101,20091,19034],{"class":1950},[101,20093,19543],{"class":1950},[101,20095,1963],{"class":111},[101,20097,20098],{"class":103,"line":8021},[101,20099,1533],{"class":111},[101,20101,20102],{"class":103,"line":8033},[101,20103,19024],{"class":111},[101,20105,20106,20108,20110,20112,20114,20116,20118,20120,20123,20125],{"class":103,"line":8045},[101,20107,6517],{"class":111},[101,20109,1155],{"class":107},[101,20111,1645],{"class":111},[101,20113,115],{"class":107},[101,20115,6506],{"class":107},[101,20117,540],{"class":111},[101,20119,464],{"class":107},[101,20121,20122],{"class":111},"p1 ",[101,20124,1155],{"class":107},[101,20126,8828],{"class":111},[101,20128,20129,20131],{"class":103,"line":9704},[101,20130,4077],{"class":107},[101,20132,20133],{"class":111}," p1;\n",[101,20135,20136],{"class":103,"line":9729},[101,20137,1552],{"class":111},[101,20139,20140],{"class":103,"line":9752},[101,20141,2387],{"emptyLinePlaceholder":27},[101,20143,20144,20146,20148],{"class":103,"line":9776},[101,20145,5352],{"class":107},[101,20147,5717],{"class":1950},[101,20149,1963],{"class":111},[101,20151,20152],{"class":103,"line":9781},[101,20153,1533],{"class":111},[101,20155,20156,20158,20160,20162],{"class":103,"line":9786},[101,20157,19609],{"class":111},[101,20159,157],{"class":107},[101,20161,19543],{"class":1950},[101,20163,5624],{"class":111},[101,20165,20166,20168,20170,20172,20174,20176,20178,20180,20182,20184],{"class":103,"line":9791},[101,20167,6517],{"class":111},[101,20169,1155],{"class":107},[101,20171,1645],{"class":111},[101,20173,115],{"class":107},[101,20175,6506],{"class":107},[101,20177,540],{"class":111},[101,20179,464],{"class":107},[101,20181,11436],{"class":111},[101,20183,1155],{"class":107},[101,20185,8828],{"class":111},[101,20187,20188],{"class":103,"line":9800},[101,20189,1552],{"class":111},[101,20191,20192],{"class":103,"line":9805},[101,20193,2387],{"emptyLinePlaceholder":27},[101,20195,20196],{"class":103,"line":9811},[101,20197,2387],{"emptyLinePlaceholder":27},[101,20199,20200,20202,20204],{"class":103,"line":9832},[101,20201,115],{"class":107},[101,20203,1960],{"class":1950},[101,20205,10841],{"class":111},[101,20207,20208],{"class":103,"line":9838},[101,20209,2387],{"emptyLinePlaceholder":27},[101,20211,20212],{"class":103,"line":9852},[101,20213,20214],{"class":170},"    \u002F\u002Ftest01();\n",[101,20216,20217],{"class":103,"line":9858},[101,20218,20219],{"class":170},"    \u002F\u002Ftest02();\n",[101,20221,20222,20224],{"class":103,"line":9885},[101,20223,19679],{"class":1950},[101,20225,5624],{"class":111},[101,20227,20228],{"class":103,"line":9894},[101,20229,2387],{"emptyLinePlaceholder":27},[101,20231,20232,20234,20236,20238],{"class":103,"line":9900},[101,20233,2290],{"class":1950},[101,20235,112],{"class":111},[101,20237,2295],{"class":216},[101,20239,2706],{"class":111},[101,20241,20242],{"class":103,"line":9908},[101,20243,2387],{"emptyLinePlaceholder":27},[101,20245,20246,20248,20250],{"class":103,"line":9913},[101,20247,4077],{"class":107},[101,20249,4080],{"class":160},[101,20251,1277],{"class":111},[101,20253,20254],{"class":103,"line":16592},[101,20255,1552],{"class":111},[72,20257,20259],{"id":20258},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[10,20261,20262],{},"默认情况下，c++编译器至少给一个类添加3个函数",[10,20264,20265],{},"1．默认构造函数(无参，函数体为空)",[10,20267,20268],{},"2．默认析构函数(无参，函数体为空)",[10,20270,20271],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[10,20273,20274],{},"构造函数调用规则如下：",[1118,20276,20277,20280],{},[58,20278,20279],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[58,20281,20282],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[92,20284,20286],{"className":94,"code":20285,"language":96,"meta":20,"style":20},"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",[98,20287,20288,20296,20300,20305,20311,20323,20327,20332,20344,20353,20365,20369,20373,20389,20398,20410,20414,20418,20424,20436,20440,20444,20450,20454,20458,20466,20470,20482,20487,20495,20499,20517,20521,20525,20533,20537,20542,20550,20565,20578,20582,20587,20594,20610,20623,20627,20631,20639,20643,20649,20653,20663,20667,20675],{"__ignoreMap":20},[101,20289,20290,20292,20294],{"class":103,"line":104},[101,20291,14682],{"class":107},[101,20293,15557],{"class":1950},[101,20295,15560],{"class":111},[101,20297,20298],{"class":103,"line":21},[101,20299,14704],{"class":107},[101,20301,20302],{"class":103,"line":1166},[101,20303,20304],{"class":170},"    \u002F\u002F无参（默认）构造函数\n",[101,20306,20307,20309],{"class":103,"line":1181},[101,20308,18507],{"class":1950},[101,20310,10841],{"class":111},[101,20312,20313,20315,20317,20319,20321],{"class":103,"line":1187},[101,20314,9657],{"class":111},[101,20316,1155],{"class":107},[101,20318,19798],{"class":216},[101,20320,1431],{"class":107},[101,20322,8828],{"class":111},[101,20324,20325],{"class":103,"line":1201},[101,20326,2174],{"class":111},[101,20328,20329],{"class":103,"line":1207},[101,20330,20331],{"class":170},"    \u002F\u002F有参构造函数\n",[101,20333,20334,20336,20338,20340,20342],{"class":103,"line":1298},[101,20335,18507],{"class":1950},[101,20337,112],{"class":111},[101,20339,115],{"class":107},[101,20341,1385],{"class":5204},[101,20343,12430],{"class":111},[101,20345,20346,20349,20351],{"class":103,"line":1304},[101,20347,20348],{"class":111},"        age ",[101,20350,157],{"class":107},[101,20352,1419],{"class":111},[101,20354,20355,20357,20359,20361,20363],{"class":103,"line":1316},[101,20356,9657],{"class":111},[101,20358,1155],{"class":107},[101,20360,19838],{"class":216},[101,20362,1431],{"class":107},[101,20364,8828],{"class":111},[101,20366,20367],{"class":103,"line":1599},[101,20368,2174],{"class":111},[101,20370,20371],{"class":103,"line":1604},[101,20372,18862],{"class":170},[101,20374,20375,20377,20379,20381,20383,20385,20387],{"class":103,"line":1610},[101,20376,18507],{"class":1950},[101,20378,112],{"class":111},[101,20380,6780],{"class":107},[101,20382,15557],{"class":1950},[101,20384,464],{"class":107},[101,20386,6813],{"class":5204},[101,20388,12430],{"class":111},[101,20390,20391,20393,20395],{"class":103,"line":1615},[101,20392,20348],{"class":111},[101,20394,157],{"class":107},[101,20396,20397],{"class":111}," p.age;\n",[101,20399,20400,20402,20404,20406,20408],{"class":103,"line":1629},[101,20401,9657],{"class":111},[101,20403,1155],{"class":107},[101,20405,19879],{"class":216},[101,20407,1431],{"class":107},[101,20409,8828],{"class":111},[101,20411,20412],{"class":103,"line":1634},[101,20413,2174],{"class":111},[101,20415,20416],{"class":103,"line":1640},[101,20417,18535],{"class":170},[101,20419,20420,20422],{"class":103,"line":1661},[101,20421,18540],{"class":1950},[101,20423,10841],{"class":111},[101,20425,20426,20428,20430,20432,20434],{"class":103,"line":1666},[101,20427,9657],{"class":111},[101,20429,1155],{"class":107},[101,20431,19916],{"class":216},[101,20433,1431],{"class":107},[101,20435,8828],{"class":111},[101,20437,20438],{"class":103,"line":1680},[101,20439,2174],{"class":111},[101,20441,20442],{"class":103,"line":1685},[101,20443,14704],{"class":107},[101,20445,20446,20448],{"class":103,"line":1714},[101,20447,1972],{"class":107},[101,20449,7785],{"class":111},[101,20451,20452],{"class":103,"line":1719},[101,20453,3982],{"class":111},[101,20455,20456],{"class":103,"line":1736},[101,20457,2387],{"emptyLinePlaceholder":27},[101,20459,20460,20462,20464],{"class":103,"line":1741},[101,20461,5352],{"class":107},[101,20463,5576],{"class":1950},[101,20465,1963],{"class":111},[101,20467,20468],{"class":103,"line":1746},[101,20469,1533],{"class":111},[101,20471,20472,20474,20476,20478,20480],{"class":103,"line":1751},[101,20473,19419],{"class":111},[101,20475,7118],{"class":1950},[101,20477,112],{"class":111},[101,20479,761],{"class":160},[101,20481,2706],{"class":111},[101,20483,20484],{"class":103,"line":1765},[101,20485,20486],{"class":170},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[101,20488,20489,20491,20493],{"class":103,"line":1770},[101,20490,19419],{"class":111},[101,20492,7021],{"class":1950},[101,20494,17503],{"class":111},[101,20496,20497],{"class":103,"line":2564},[101,20498,2387],{"emptyLinePlaceholder":27},[101,20500,20501,20503,20505,20508,20510,20513,20515],{"class":103,"line":2578},[101,20502,6517],{"class":111},[101,20504,1155],{"class":107},[101,20506,20507],{"class":216}," \"p2的年龄为： \"",[101,20509,1431],{"class":107},[101,20511,20512],{"class":111}," p2.age ",[101,20514,1155],{"class":107},[101,20516,8828],{"class":111},[101,20518,20519],{"class":103,"line":2586},[101,20520,1552],{"class":111},[101,20522,20523],{"class":103,"line":2591},[101,20524,2387],{"emptyLinePlaceholder":27},[101,20526,20527,20529,20531],{"class":103,"line":2597},[101,20528,5352],{"class":107},[101,20530,5645],{"class":1950},[101,20532,1963],{"class":111},[101,20534,20535],{"class":103,"line":2603},[101,20536,1533],{"class":111},[101,20538,20539],{"class":103,"line":2608},[101,20540,20541],{"class":170},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[101,20543,20544,20547],{"class":103,"line":7936},[101,20545,20546],{"class":111},"    Person p1;",[101,20548,20549],{"class":170}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[101,20551,20552,20554,20556,20558,20560,20562],{"class":103,"line":7960},[101,20553,19419],{"class":111},[101,20555,7021],{"class":1950},[101,20557,112],{"class":111},[101,20559,557],{"class":160},[101,20561,5954],{"class":111},[101,20563,20564],{"class":170}," \u002F\u002F用户提供的有参\n",[101,20566,20567,20569,20572,20575],{"class":103,"line":7965},[101,20568,19419],{"class":111},[101,20570,20571],{"class":1950},"p3",[101,20573,20574],{"class":111},"(p2);",[101,20576,20577],{"class":170}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[101,20579,20580],{"class":103,"line":7971},[101,20581,2387],{"emptyLinePlaceholder":27},[101,20583,20584],{"class":103,"line":7998},[101,20585,20586],{"class":170},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[101,20588,20589,20592],{"class":103,"line":8003},[101,20590,20591],{"class":111},"    Person p4;",[101,20593,20549],{"class":170},[101,20595,20596,20598,20601,20603,20605,20607],{"class":103,"line":8009},[101,20597,19419],{"class":111},[101,20599,20600],{"class":1950},"p5",[101,20602,112],{"class":111},[101,20604,557],{"class":160},[101,20606,5954],{"class":111},[101,20608,20609],{"class":170}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[101,20611,20612,20614,20617,20620],{"class":103,"line":8021},[101,20613,19419],{"class":111},[101,20615,20616],{"class":1950},"p6",[101,20618,20619],{"class":111},"(p5);",[101,20621,20622],{"class":170}," \u002F\u002F用户自己提供拷贝构造\n",[101,20624,20625],{"class":103,"line":8033},[101,20626,1552],{"class":111},[101,20628,20629],{"class":103,"line":8045},[101,20630,2387],{"emptyLinePlaceholder":27},[101,20632,20633,20635,20637],{"class":103,"line":9704},[101,20634,115],{"class":107},[101,20636,1960],{"class":1950},[101,20638,10841],{"class":111},[101,20640,20641],{"class":103,"line":9729},[101,20642,2387],{"emptyLinePlaceholder":27},[101,20644,20645,20647],{"class":103,"line":9752},[101,20646,5621],{"class":1950},[101,20648,5624],{"class":111},[101,20650,20651],{"class":103,"line":9776},[101,20652,2387],{"emptyLinePlaceholder":27},[101,20654,20655,20657,20659,20661],{"class":103,"line":9781},[101,20656,2290],{"class":1950},[101,20658,112],{"class":111},[101,20660,2295],{"class":216},[101,20662,2706],{"class":111},[101,20664,20665],{"class":103,"line":9786},[101,20666,2387],{"emptyLinePlaceholder":27},[101,20668,20669,20671,20673],{"class":103,"line":9791},[101,20670,4077],{"class":107},[101,20672,4080],{"class":160},[101,20674,1277],{"class":111},[101,20676,20677],{"class":103,"line":9800},[101,20678,1552],{"class":111},[72,20680,20682],{"id":20681},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[10,20684,20685],{},"浅拷贝：简单的赋值拷贝操作",[10,20687,20688],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[92,20690,20692],{"className":94,"code":20691,"language":96,"meta":20,"style":20},"#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",[98,20693,20694,20700,20710,20716,20720,20724,20729,20735,20739,20752,20756,20760,20767,20771,20781,20796,20809,20813,20818,20823,20839,20843,20856,20861,20866,20871,20880,20885,20900,20904,20908,20912,20918,20922,20927,20942,20946,20957,20971,20975,20984,20988,20994,21006,21010,21018,21022,21039,21070,21078,21106,21110,21114,21122,21126,21132],{"__ignoreMap":20},[101,20695,20696,20698],{"class":103,"line":104},[101,20697,1936],{"class":107},[101,20699,1939],{"class":216},[101,20701,20702,20704,20706,20708],{"class":103,"line":21},[101,20703,1944],{"class":107},[101,20705,1947],{"class":107},[101,20707,1951],{"class":1950},[101,20709,1277],{"class":111},[101,20711,20712,20714],{"class":103,"line":1166},[101,20713,14682],{"class":107},[101,20715,15159],{"class":1950},[101,20717,20718],{"class":103,"line":1181},[101,20719,1533],{"class":111},[101,20721,20722],{"class":103,"line":1187},[101,20723,14704],{"class":107},[101,20725,20726],{"class":103,"line":1201},[101,20727,20728],{"class":170},"    \u002F\u002F默认构造函数\n",[101,20730,20731,20733],{"class":103,"line":1207},[101,20732,18507],{"class":1950},[101,20734,1963],{"class":111},[101,20736,20737],{"class":103,"line":1298},[101,20738,2017],{"class":111},[101,20740,20741,20743,20745,20748,20750],{"class":103,"line":1304},[101,20742,3438],{"class":111},[101,20744,1155],{"class":107},[101,20746,20747],{"class":216},"\"默认构造函数\"",[101,20749,1155],{"class":107},[101,20751,1178],{"class":111},[101,20753,20754],{"class":103,"line":1316},[101,20755,2174],{"class":111},[101,20757,20758],{"class":103,"line":1599},[101,20759,20331],{"class":170},[101,20761,20762,20764],{"class":103,"line":1604},[101,20763,18540],{"class":1950},[101,20765,20766],{"class":111},"(int age,int height)\n",[101,20768,20769],{"class":103,"line":1610},[101,20770,2017],{"class":111},[101,20772,20773,20776,20778],{"class":103,"line":1615},[101,20774,20775],{"class":111},"        m_Age",[101,20777,157],{"class":107},[101,20779,20780],{"class":111},"age;\n",[101,20782,20783,20786,20788,20790,20793],{"class":103,"line":1629},[101,20784,20785],{"class":111},"        m_Height",[101,20787,11705],{"class":107},[101,20789,2369],{"class":107},[101,20791,20792],{"class":111},"(height);",[101,20794,20795],{"class":170},"\u002F\u002F放到堆区\n",[101,20797,20798,20800,20802,20805,20807],{"class":103,"line":1634},[101,20799,3438],{"class":111},[101,20801,1155],{"class":107},[101,20803,20804],{"class":216},"\"有参构造函数\"",[101,20806,1155],{"class":107},[101,20808,1178],{"class":111},[101,20810,20811],{"class":103,"line":1640},[101,20812,2174],{"class":111},[101,20814,20815],{"class":103,"line":1661},[101,20816,20817],{"class":170},"    \u002F\u002F深拷贝解决上述问题\n",[101,20819,20820],{"class":103,"line":1666},[101,20821,20822],{"class":170},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[101,20824,20825,20827,20829,20831,20833,20835,20837],{"class":103,"line":1680},[101,20826,18507],{"class":1950},[101,20828,112],{"class":111},[101,20830,6780],{"class":107},[101,20832,15557],{"class":1950},[101,20834,10572],{"class":107},[101,20836,10],{"class":5204},[101,20838,118],{"class":111},[101,20840,20841],{"class":103,"line":1685},[101,20842,2017],{"class":111},[101,20844,20845,20847,20849,20852,20854],{"class":103,"line":1714},[101,20846,3438],{"class":111},[101,20848,1155],{"class":107},[101,20850,20851],{"class":216},"\"拷贝构造函数\"",[101,20853,1155],{"class":107},[101,20855,1178],{"class":111},[101,20857,20858],{"class":103,"line":1719},[101,20859,20860],{"class":170},"        \u002F\u002F编译器默认的写如下注释部分\n",[101,20862,20863],{"class":103,"line":1736},[101,20864,20865],{"class":170},"        \u002F\u002Fm_Age=p.m_Age;\n",[101,20867,20868],{"class":103,"line":1741},[101,20869,20870],{"class":170},"        \u002F\u002Fm_Height=p.m_Height;\n",[101,20872,20873,20875,20877],{"class":103,"line":1746},[101,20874,20775],{"class":111},[101,20876,157],{"class":107},[101,20878,20879],{"class":111},"p.m_Age;\n",[101,20881,20882],{"class":103,"line":1751},[101,20883,20884],{"class":170},"        \u002F\u002F深拷贝操作\n",[101,20886,20887,20889,20891,20893,20895,20897],{"class":103,"line":1765},[101,20888,20785],{"class":111},[101,20890,11705],{"class":107},[101,20892,2369],{"class":107},[101,20894,112],{"class":111},[101,20896,566],{"class":107},[101,20898,20899],{"class":111},"p.m_Height);\n",[101,20901,20902],{"class":103,"line":1770},[101,20903,2174],{"class":111},[101,20905,20906],{"class":103,"line":2564},[101,20907,2387],{"emptyLinePlaceholder":27},[101,20909,20910],{"class":103,"line":2578},[101,20911,18535],{"class":170},[101,20913,20914,20916],{"class":103,"line":2586},[101,20915,18540],{"class":1950},[101,20917,1963],{"class":111},[101,20919,20920],{"class":103,"line":2591},[101,20921,2017],{"class":111},[101,20923,20924],{"class":103,"line":2597},[101,20925,20926],{"class":170},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[101,20928,20929,20931,20934,20937,20940],{"class":103,"line":2603},[101,20930,2484],{"class":107},[101,20932,20933],{"class":111},"(m_Height ",[101,20935,20936],{"class":107},"!=",[101,20938,20939],{"class":160}," NULL",[101,20941,118],{"class":111},[101,20943,20944],{"class":103,"line":2608},[101,20945,2497],{"class":111},[101,20947,20948,20951,20954],{"class":103,"line":7936},[101,20949,20950],{"class":107},"            delete",[101,20952,20953],{"class":111}," m_Height;",[101,20955,20956],{"class":170}," \u002F\u002F释放堆区内存\n",[101,20958,20959,20962,20964,20966,20968],{"class":103,"line":7960},[101,20960,20961],{"class":111},"            m_Height",[101,20963,157],{"class":107},[101,20965,2379],{"class":160},[101,20967,167],{"class":111},[101,20969,20970],{"class":170}," \u002F\u002F防止野指针\n",[101,20972,20973],{"class":103,"line":7965},[101,20974,2516],{"class":111},[101,20976,20977,20979,20981],{"class":103,"line":7971},[101,20978,3438],{"class":111},[101,20980,1155],{"class":107},[101,20982,20983],{"class":216},"\"Person的析构函数调用\"\n",[101,20985,20986],{"class":103,"line":7998},[101,20987,2174],{"class":111},[101,20989,20990,20992],{"class":103,"line":8003},[101,20991,1972],{"class":107},[101,20993,15654],{"class":111},[101,20995,20996,20998,21000,21003],{"class":103,"line":8009},[101,20997,1972],{"class":107},[101,20999,6506],{"class":107},[101,21001,21002],{"class":111},"m_Height;",[101,21004,21005],{"class":170}," \u002F\u002F定义一个指针，指向身高\n",[101,21007,21008],{"class":103,"line":8021},[101,21009,3982],{"class":111},[101,21011,21012,21014,21016],{"class":103,"line":8033},[101,21013,5352],{"class":107},[101,21015,5576],{"class":1950},[101,21017,1963],{"class":111},[101,21019,21020],{"class":103,"line":8045},[101,21021,1533],{"class":111},[101,21023,21024,21026,21028,21030,21032,21034,21037],{"class":103,"line":9704},[101,21025,19419],{"class":111},[101,21027,7118],{"class":1950},[101,21029,112],{"class":111},[101,21031,761],{"class":160},[101,21033,489],{"class":111},[101,21035,21036],{"class":160},"160",[101,21038,2706],{"class":111},[101,21040,21041,21043,21045,21048,21050,21053,21055,21058,21060,21063,21065,21067],{"class":103,"line":9729},[101,21042,1538],{"class":111},[101,21044,1155],{"class":107},[101,21046,21047],{"class":216},"\"p1的年龄为:\"",[101,21049,1155],{"class":107},[101,21051,21052],{"class":111},"p1.m_Age",[101,21054,1155],{"class":107},[101,21056,21057],{"class":216},"\"身高为：\"",[101,21059,6407],{"class":107},[101,21061,21062],{"class":111},"p1.m_Height",[101,21064,1155],{"class":107},[101,21066,1225],{"class":111},[101,21068,21069],{"class":170},"  \u002F\u002F18\n",[101,21071,21072,21074,21076],{"class":103,"line":9752},[101,21073,19419],{"class":111},[101,21075,7021],{"class":1950},[101,21077,17503],{"class":111},[101,21079,21080,21082,21084,21087,21089,21091,21093,21095,21097,21100,21102,21104],{"class":103,"line":9776},[101,21081,1538],{"class":111},[101,21083,1155],{"class":107},[101,21085,21086],{"class":216},"\"p2的年龄为：\"",[101,21088,1155],{"class":107},[101,21090,19449],{"class":111},[101,21092,1155],{"class":107},[101,21094,21057],{"class":216},[101,21096,6407],{"class":107},[101,21098,21099],{"class":111},"p2.m_Height",[101,21101,1155],{"class":107},[101,21103,1225],{"class":111},[101,21105,21069],{"class":170},[101,21107,21108],{"class":103,"line":9781},[101,21109,13198],{"class":111},[101,21111,21112],{"class":103,"line":9786},[101,21113,1552],{"class":111},[101,21115,21116,21118,21120],{"class":103,"line":9791},[101,21117,115],{"class":107},[101,21119,1960],{"class":1950},[101,21121,1963],{"class":111},[101,21123,21124],{"class":103,"line":9800},[101,21125,1533],{"class":111},[101,21127,21128,21130],{"class":103,"line":9805},[101,21129,5621],{"class":1950},[101,21131,5624],{"class":111},[101,21133,21134],{"class":103,"line":9811},[101,21135,1552],{"class":111},[10,21137,21138],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[10,21140,21141],{},"浅拷贝带来的问题是堆区的内存重复释放",[10,21143,21144],{},[1449,21145],{"alt":20,"src":21146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[10,21148,21149],{},"浅拷贝问题要使用深拷贝来解决",[10,21151,21152],{},[1449,21153],{"alt":20,"src":21154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[10,21156,21157],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[72,21159,21161],{"id":21160},"_826初始化列表","8.2.6初始化列表",[10,21163,21164],{},"作用：初始化属性",[10,21166,5169],{},[92,21168,21171],{"className":21169,"code":21170,"language":5175},[5173],"构造函数():属性1(值1),属性2(值2).....{}\n",[98,21172,21170],{"__ignoreMap":20},[10,21174,21175],{},"例子",[92,21177,21179],{"className":94,"code":21178,"language":96,"meta":20,"style":20},"#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",[98,21180,21181,21187,21197,21203,21207,21212,21216,21221,21226,21231,21236,21241,21246,21250,21255,21260,21303,21312,21330,21348,21366,21370,21374,21381,21388,21395,21399,21403,21411,21415,21419,21439,21448,21452,21456,21466,21470,21478],{"__ignoreMap":20},[101,21182,21183,21185],{"class":103,"line":104},[101,21184,1936],{"class":107},[101,21186,1939],{"class":216},[101,21188,21189,21191,21193,21195],{"class":103,"line":21},[101,21190,1944],{"class":107},[101,21192,1947],{"class":107},[101,21194,1951],{"class":1950},[101,21196,1277],{"class":111},[101,21198,21199,21201],{"class":103,"line":1166},[101,21200,14682],{"class":107},[101,21202,15159],{"class":1950},[101,21204,21205],{"class":103,"line":1181},[101,21206,1533],{"class":111},[101,21208,21209],{"class":103,"line":1187},[101,21210,21211],{"class":107},"    public:\n",[101,21213,21214],{"class":103,"line":1201},[101,21215,2387],{"emptyLinePlaceholder":27},[101,21217,21218],{"class":103,"line":1207},[101,21219,21220],{"class":170},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[101,21222,21223],{"class":103,"line":1298},[101,21224,21225],{"class":170},"    \u002F\u002FPerson(int a, int b, int c) {\n",[101,21227,21228],{"class":103,"line":1304},[101,21229,21230],{"class":170},"    \u002F\u002F  m_A = a;\n",[101,21232,21233],{"class":103,"line":1316},[101,21234,21235],{"class":170},"    \u002F\u002F  m_B = b;\n",[101,21237,21238],{"class":103,"line":1599},[101,21239,21240],{"class":170},"    \u002F\u002F  m_C = c;\n",[101,21242,21243],{"class":103,"line":1604},[101,21244,21245],{"class":170},"    \u002F\u002F}\n",[101,21247,21248],{"class":103,"line":1610},[101,21249,2387],{"emptyLinePlaceholder":27},[101,21251,21252],{"class":103,"line":1615},[101,21253,21254],{"class":170},"    \u002F\u002F初始化列表方式初始化\n",[101,21256,21257],{"class":103,"line":1629},[101,21258,21259],{"class":170},"    \u002F\u002F使用有参构造函数\n",[101,21261,21262,21264,21266,21268,21270,21272,21274,21276,21278,21280,21282,21285,21288,21291,21294,21297,21300],{"class":103,"line":1634},[101,21263,18507],{"class":1950},[101,21265,112],{"class":111},[101,21267,115],{"class":107},[101,21269,1385],{"class":5204},[101,21271,12423],{"class":111},[101,21273,115],{"class":107},[101,21275,2820],{"class":5204},[101,21277,12423],{"class":111},[101,21279,115],{"class":107},[101,21281,2836],{"class":5204},[101,21283,21284],{"class":111},") :",[101,21286,21287],{"class":1950},"m_A",[101,21289,21290],{"class":111},"(a), ",[101,21292,21293],{"class":1950},"m_B",[101,21295,21296],{"class":111},"(b), ",[101,21298,21299],{"class":1950},"m_C",[101,21301,21302],{"class":111},"(c) {}\n",[101,21304,21305,21307,21310],{"class":103,"line":1640},[101,21306,14897],{"class":107},[101,21308,21309],{"class":1950}," PrintPerson",[101,21311,10841],{"class":111},[101,21313,21314,21316,21318,21321,21323,21326,21328],{"class":103,"line":1661},[101,21315,9657],{"class":111},[101,21317,1155],{"class":107},[101,21319,21320],{"class":216}," \"mA:\"",[101,21322,1431],{"class":107},[101,21324,21325],{"class":111}," m_A ",[101,21327,1155],{"class":107},[101,21329,8828],{"class":111},[101,21331,21332,21334,21336,21339,21341,21344,21346],{"class":103,"line":1666},[101,21333,9657],{"class":111},[101,21335,1155],{"class":107},[101,21337,21338],{"class":216}," \"mB:\"",[101,21340,1431],{"class":107},[101,21342,21343],{"class":111}," m_B ",[101,21345,1155],{"class":107},[101,21347,8828],{"class":111},[101,21349,21350,21352,21354,21357,21359,21362,21364],{"class":103,"line":1680},[101,21351,9657],{"class":111},[101,21353,1155],{"class":107},[101,21355,21356],{"class":216}," \"mC:\"",[101,21358,1431],{"class":107},[101,21360,21361],{"class":111}," m_C ",[101,21363,1155],{"class":107},[101,21365,8828],{"class":111},[101,21367,21368],{"class":103,"line":1685},[101,21369,2174],{"class":111},[101,21371,21372],{"class":103,"line":1714},[101,21373,15210],{"class":107},[101,21375,21376,21378],{"class":103,"line":1719},[101,21377,1972],{"class":107},[101,21379,21380],{"class":111}," m_A;\n",[101,21382,21383,21385],{"class":103,"line":1736},[101,21384,1972],{"class":107},[101,21386,21387],{"class":111}," m_B;\n",[101,21389,21390,21392],{"class":103,"line":1741},[101,21391,1972],{"class":107},[101,21393,21394],{"class":111}," m_C;\n",[101,21396,21397],{"class":103,"line":1746},[101,21398,3982],{"class":111},[101,21400,21401],{"class":103,"line":1751},[101,21402,2387],{"emptyLinePlaceholder":27},[101,21404,21405,21407,21409],{"class":103,"line":1765},[101,21406,115],{"class":107},[101,21408,1960],{"class":1950},[101,21410,5966],{"class":111},[101,21412,21413],{"class":103,"line":1770},[101,21414,1533],{"class":111},[101,21416,21417],{"class":103,"line":2564},[101,21418,2387],{"emptyLinePlaceholder":27},[101,21420,21421,21423,21425,21427,21429,21431,21433,21435,21437],{"class":103,"line":2578},[101,21422,19419],{"class":111},[101,21424,10],{"class":1950},[101,21426,112],{"class":111},[101,21428,329],{"class":160},[101,21430,12423],{"class":111},[101,21432,189],{"class":160},[101,21434,12423],{"class":111},[101,21436,183],{"class":160},[101,21438,2706],{"class":111},[101,21440,21441,21443,21446],{"class":103,"line":2586},[101,21442,15854],{"class":111},[101,21444,21445],{"class":1950},"PrintPerson",[101,21447,5624],{"class":111},[101,21449,21450],{"class":103,"line":2591},[101,21451,2387],{"emptyLinePlaceholder":27},[101,21453,21454],{"class":103,"line":2597},[101,21455,2387],{"emptyLinePlaceholder":27},[101,21457,21458,21460,21462,21464],{"class":103,"line":2603},[101,21459,2290],{"class":1950},[101,21461,112],{"class":111},[101,21463,2295],{"class":216},[101,21465,2706],{"class":111},[101,21467,21468],{"class":103,"line":2608},[101,21469,2387],{"emptyLinePlaceholder":27},[101,21471,21472,21474,21476],{"class":103,"line":7936},[101,21473,4077],{"class":107},[101,21475,4080],{"class":160},[101,21477,1277],{"class":111},[101,21479,21480],{"class":103,"line":7960},[101,21481,1552],{"class":111},[10,21483,21484,21485,21488,21489],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[261,21486,21487],{},"参数名就是定义的对象属性","，",[261,21490,21491],{},"属性后面的值为有参构造函数的形参",[92,21493,21495],{"className":94,"code":21494,"language":96,"meta":20,"style":20},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[98,21496,21497],{"__ignoreMap":20},[101,21498,21499,21501,21503,21505,21508,21510,21513,21515,21518,21520,21523,21525,21528,21530],{"class":103,"line":104},[101,21500,19034],{"class":1950},[101,21502,112],{"class":111},[101,21504,115],{"class":107},[101,21506,21507],{"class":111}," a.",[101,21509,115],{"class":107},[101,21511,21512],{"class":111}," b,",[101,21514,115],{"class":107},[101,21516,21517],{"class":111}," b):",[101,21519,21287],{"class":1950},[101,21521,21522],{"class":111},"(a),",[101,21524,21293],{"class":1950},[101,21526,21527],{"class":111},"(c),",[101,21529,21299],{"class":1950},[101,21531,21532],{"class":111},"(b) {}\n",[72,21534,21536],{"id":21535},"_827类对象作为类成员","8.2.7类对象作为类成员",[10,21538,21539],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[10,21541,14621],{},[92,21543,21545],{"className":94,"code":21544,"language":96,"meta":20,"style":20},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[98,21546,21547,21552,21557,21561,21566,21570],{"__ignoreMap":20},[101,21548,21549],{"class":103,"line":104},[101,21550,21551],{"class":111},"A{};\n",[101,21553,21554],{"class":103,"line":21},[101,21555,21556],{"class":111},"B\n",[101,21558,21559],{"class":103,"line":1166},[101,21560,1533],{"class":111},[101,21562,21563],{"class":103,"line":1181},[101,21564,21565],{"class":111},"    A a;\n",[101,21567,21568],{"class":103,"line":1187},[101,21569,1552],{"class":111},[101,21571,21572],{"class":103,"line":1201},[101,21573,21574],{"class":170},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[10,21576,21577],{},"案例",[92,21579,21581],{"className":94,"code":21580,"language":96,"meta":20,"style":20},"\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",[98,21582,21583,21588,21595,21599,21604,21609,21623,21627,21637,21648,21652,21659,21663,21676,21680,21685,21690,21694,21700,21704,21708,21712,21743,21747,21758,21762,21768,21772,21785,21789,21793,21797,21802,21807,21811,21819,21823,21840,21859,21863,21871,21875,21881],{"__ignoreMap":20},[101,21584,21585],{"class":103,"line":104},[101,21586,21587],{"class":170},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[101,21589,21590,21592],{"class":103,"line":21},[101,21591,14682],{"class":107},[101,21593,21594],{"class":1950}," Phone\n",[101,21596,21597],{"class":103,"line":1166},[101,21598,1533],{"class":111},[101,21600,21601],{"class":103,"line":1181},[101,21602,21603],{"class":111},"public：\n",[101,21605,21606],{"class":103,"line":1187},[101,21607,21608],{"class":170},"    \u002F\u002F 赋值(构造函数)\n",[101,21610,21611,21614,21616,21618,21621],{"class":103,"line":1201},[101,21612,21613],{"class":1950},"    Phone",[101,21615,112],{"class":111},[101,21617,14905],{"class":1950},[101,21619,21620],{"class":5204}," pName",[101,21622,118],{"class":111},[101,21624,21625],{"class":103,"line":1207},[101,21626,2017],{"class":111},[101,21628,21629,21632,21634],{"class":103,"line":1298},[101,21630,21631],{"class":111},"        m_pName",[101,21633,157],{"class":107},[101,21635,21636],{"class":111},"pName;\n",[101,21638,21639,21641,21643,21646],{"class":103,"line":1304},[101,21640,3438],{"class":111},[101,21642,1155],{"class":107},[101,21644,21645],{"class":216},"\"Phone的构造函数调用\"",[101,21647,1277],{"class":111},[101,21649,21650],{"class":103,"line":1316},[101,21651,2174],{"class":111},[101,21653,21654,21657],{"class":103,"line":1599},[101,21655,21656],{"class":1950},"    ~Phone",[101,21658,1963],{"class":111},[101,21660,21661],{"class":103,"line":1604},[101,21662,2017],{"class":111},[101,21664,21665,21667,21669,21672,21674],{"class":103,"line":1610},[101,21666,3438],{"class":111},[101,21668,1155],{"class":107},[101,21670,21671],{"class":216},"\"Phone析构函数调用\"",[101,21673,1155],{"class":107},[101,21675,1178],{"class":111},[101,21677,21678],{"class":103,"line":1615},[101,21679,2174],{"class":111},[101,21681,21682],{"class":103,"line":1629},[101,21683,21684],{"class":170},"    \u002F\u002F\n",[101,21686,21687],{"class":103,"line":1634},[101,21688,21689],{"class":111},"    string m_PName;\n",[101,21691,21692],{"class":103,"line":1640},[101,21693,3982],{"class":111},[101,21695,21696,21698],{"class":103,"line":1661},[101,21697,14682],{"class":107},[101,21699,15159],{"class":1950},[101,21701,21702],{"class":103,"line":1666},[101,21703,1533],{"class":111},[101,21705,21706],{"class":103,"line":1680},[101,21707,14704],{"class":107},[101,21709,21710],{"class":103,"line":1685},[101,21711,16982],{"class":170},[101,21713,21714,21716,21718,21720,21722,21724,21726,21729,21732,21734,21737,21740],{"class":103,"line":1714},[101,21715,18507],{"class":1950},[101,21717,112],{"class":111},[101,21719,14905],{"class":1950},[101,21721,14908],{"class":5204},[101,21723,489],{"class":111},[101,21725,14905],{"class":1950},[101,21727,21728],{"class":5204}," pname",[101,21730,21731],{"class":111},"):",[101,21733,14998],{"class":1950},[101,21735,21736],{"class":111},"(name),m_phone.",[101,21738,21739],{"class":1950},"m_PName",[101,21741,21742],{"class":111},"(pname) \n",[101,21744,21745],{"class":103,"line":1719},[101,21746,2017],{"class":111},[101,21748,21749,21751,21753,21756],{"class":103,"line":1736},[101,21750,3438],{"class":111},[101,21752,1155],{"class":107},[101,21754,21755],{"class":216},"\"Person的构造函数调用\"",[101,21757,1277],{"class":111},[101,21759,21760],{"class":103,"line":1741},[101,21761,2174],{"class":111},[101,21763,21764,21766],{"class":103,"line":1746},[101,21765,18540],{"class":1950},[101,21767,1963],{"class":111},[101,21769,21770],{"class":103,"line":1751},[101,21771,2017],{"class":111},[101,21773,21774,21776,21778,21781,21783],{"class":103,"line":1765},[101,21775,3438],{"class":111},[101,21777,1155],{"class":107},[101,21779,21780],{"class":216},"\"Person析构函数调用\"",[101,21782,1155],{"class":107},[101,21784,1178],{"class":111},[101,21786,21787],{"class":103,"line":1770},[101,21788,2174],{"class":111},[101,21790,21791],{"class":103,"line":2564},[101,21792,7768],{"class":170},[101,21794,21795],{"class":103,"line":2578},[101,21796,14880],{"class":111},[101,21798,21799],{"class":103,"line":2586},[101,21800,21801],{"class":170},"    \u002F\u002F手机\n",[101,21803,21804],{"class":103,"line":2591},[101,21805,21806],{"class":111},"    Phone m_Phone;\n",[101,21808,21809],{"class":103,"line":2597},[101,21810,3982],{"class":111},[101,21812,21813,21815,21817],{"class":103,"line":2603},[101,21814,5352],{"class":107},[101,21816,5576],{"class":1950},[101,21818,1963],{"class":111},[101,21820,21821],{"class":103,"line":2608},[101,21822,1533],{"class":111},[101,21824,21825,21827,21829,21831,21833,21835,21838],{"class":103,"line":7936},[101,21826,19419],{"class":111},[101,21828,10],{"class":1950},[101,21830,112],{"class":111},[101,21832,7904],{"class":216},[101,21834,489],{"class":111},[101,21836,21837],{"class":216},"\"安卓\"",[101,21839,2706],{"class":111},[101,21841,21842,21844,21846,21849,21851,21854,21856],{"class":103,"line":7960},[101,21843,1538],{"class":111},[101,21845,1155],{"class":107},[101,21847,21848],{"class":111},"p.Name",[101,21850,1155],{"class":107},[101,21852,21853],{"class":216},"\"拿着：\"",[101,21855,1155],{"class":107},[101,21857,21858],{"class":111},"p.m_phone.m_PName;\n",[101,21860,21861],{"class":103,"line":7965},[101,21862,1552],{"class":111},[101,21864,21865,21867,21869],{"class":103,"line":7971},[101,21866,115],{"class":107},[101,21868,1960],{"class":1950},[101,21870,1963],{"class":111},[101,21872,21873],{"class":103,"line":7998},[101,21874,1533],{"class":111},[101,21876,21877,21879],{"class":103,"line":8003},[101,21878,5621],{"class":1950},[101,21880,5624],{"class":111},[101,21882,21883],{"class":103,"line":8009},[101,21884,1552],{"class":111},[10,21886,9013],{},[92,21888,21890],{"className":94,"code":21889,"language":96,"meta":20,"style":20},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[98,21891,21892,21897],{"__ignoreMap":20},[101,21893,21894],{"class":103,"line":104},[101,21895,21896],{"class":170},"    \u002F\u002F不需要写这个：\n",[101,21898,21899],{"class":103,"line":21},[101,21900,21901],{"class":170},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[10,21903,21904],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[92,21906,21908],{"className":94,"code":21907,"language":96,"meta":20,"style":20},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[98,21909,21910],{"__ignoreMap":20},[101,21911,21912,21914,21917,21919,21922,21925],{"class":103,"line":104},[101,21913,19034],{"class":1950},[101,21915,21916],{"class":111},"(string name.string pname):",[101,21918,14998],{"class":1950},[101,21920,21921],{"class":111},"(name),",[101,21923,21924],{"class":1950},"m_phone",[101,21926,21927],{"class":111},"(pname) {}\n",[10,21929,21930,21931,157,21934],{},"采用的是隐式转换法，实际为如下：\n",[98,21932,21933],{},"m_phone(pname)",[98,21935,21936],{},"Phone m_phone=pname",[10,21938,21939,21942],{},[261,21940,21941],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[10,21944,21945],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[72,21947,21949],{"id":21948},"_828静态对象","8.2.8静态对象",[10,21951,21952],{},"静态对象在成员对象前static，称为静态对象",[10,21954,21955],{},"静态对象分为两类：",[55,21957,21958],{},[58,21959,21960],{},"静态成员变量",[1118,21962,21963,21966,21969],{},[58,21964,21965],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[58,21967,21968],{},"②在编译阶段分配内存",[58,21970,21971],{},"③类内声明，类外初始化",[55,21973,21974],{"start":21},[58,21975,21976],{},"静态成员函数",[1118,21978,21979,21982],{},[58,21980,21981],{},"①所有对象共享同一个函数",[58,21983,21984],{},"②静态成员函数只能访问静态成员变量",[21986,21987,21989],"h4",{"id":21988},"_8281静态成员变量","8.2.8.1静态成员变量",[92,21991,21993],{"className":94,"code":21992,"language":96,"meta":20,"style":20},"#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",[98,21994,21995,22001,22011,22017,22021,22025,22030,22035,22040,22048,22052,22056,22060,22068,22072,22076,22081,22094,22098,22106,22110,22116],{"__ignoreMap":20},[101,21996,21997,21999],{"class":103,"line":104},[101,21998,1936],{"class":107},[101,22000,1939],{"class":216},[101,22002,22003,22005,22007,22009],{"class":103,"line":21},[101,22004,1944],{"class":107},[101,22006,1947],{"class":107},[101,22008,1951],{"class":1950},[101,22010,1277],{"class":111},[101,22012,22013,22015],{"class":103,"line":1166},[101,22014,14682],{"class":107},[101,22016,15159],{"class":1950},[101,22018,22019],{"class":103,"line":1181},[101,22020,1533],{"class":111},[101,22022,22023],{"class":103,"line":1187},[101,22024,14704],{"class":107},[101,22026,22027],{"class":103,"line":1201},[101,22028,22029],{"class":170},"    \u002F\u002F非静态成员变量\n",[101,22031,22032],{"class":103,"line":1207},[101,22033,22034],{"class":170},"    \u002F\u002F int m_A;\n",[101,22036,22037],{"class":103,"line":1298},[101,22038,22039],{"class":170},"    \u002F\u002F定义静态成员变量\n",[101,22041,22042,22044,22046],{"class":103,"line":1304},[101,22043,11008],{"class":107},[101,22045,2369],{"class":107},[101,22047,21380],{"class":111},[101,22049,22050],{"class":103,"line":1316},[101,22051,2387],{"emptyLinePlaceholder":27},[101,22053,22054],{"class":103,"line":1599},[101,22055,2387],{"emptyLinePlaceholder":27},[101,22057,22058],{"class":103,"line":1604},[101,22059,3982],{"class":111},[101,22061,22062,22064,22066],{"class":103,"line":1610},[101,22063,5352],{"class":107},[101,22065,5576],{"class":1950},[101,22067,1963],{"class":111},[101,22069,22070],{"class":103,"line":1615},[101,22071,1533],{"class":111},[101,22073,22074],{"class":103,"line":1629},[101,22075,15301],{"class":111},[101,22077,22078],{"class":103,"line":1634},[101,22079,22080],{"class":170},"    \u002F\u002F输出类成员变量这块内存\n",[101,22082,22083,22085,22087,22090,22092],{"class":103,"line":1640},[101,22084,1538],{"class":111},[101,22086,1155],{"class":107},[101,22088,22089],{"class":111},"p.m_A",[101,22091,1155],{"class":107},[101,22093,1178],{"class":111},[101,22095,22096],{"class":103,"line":1661},[101,22097,1552],{"class":111},[101,22099,22100,22102,22104],{"class":103,"line":1666},[101,22101,115],{"class":107},[101,22103,1960],{"class":1950},[101,22105,1963],{"class":111},[101,22107,22108],{"class":103,"line":1680},[101,22109,1533],{"class":111},[101,22111,22112,22114],{"class":103,"line":1685},[101,22113,5621],{"class":1950},[101,22115,1963],{"class":111},[101,22117,22118],{"class":103,"line":1714},[101,22119,1552],{"class":111},[10,22121,22122],{},"此时输出是报错的：无法解析外部命令",[10,22124,22125],{},"解决这一问题：必须用到类内声明，类外初始化操作",[92,22127,22129],{"className":94,"code":22128,"language":96,"meta":20,"style":20},"#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",[98,22130,22131,22137,22147,22153,22157,22161,22166,22174,22178,22183,22198,22206,22210,22214,22219,22224,22236,22241,22252,22257,22262,22275,22279,22287,22291,22297],{"__ignoreMap":20},[101,22132,22133,22135],{"class":103,"line":104},[101,22134,1936],{"class":107},[101,22136,1939],{"class":216},[101,22138,22139,22141,22143,22145],{"class":103,"line":21},[101,22140,1944],{"class":107},[101,22142,1947],{"class":107},[101,22144,1951],{"class":1950},[101,22146,1277],{"class":111},[101,22148,22149,22151],{"class":103,"line":1166},[101,22150,14682],{"class":107},[101,22152,15159],{"class":1950},[101,22154,22155],{"class":103,"line":1181},[101,22156,1533],{"class":111},[101,22158,22159],{"class":103,"line":1187},[101,22160,14704],{"class":107},[101,22162,22163],{"class":103,"line":1201},[101,22164,22165],{"class":170},"    \u002F\u002F类内声明\n",[101,22167,22168,22170,22172],{"class":103,"line":1207},[101,22169,11008],{"class":107},[101,22171,2369],{"class":107},[101,22173,21380],{"class":111},[101,22175,22176],{"class":103,"line":1298},[101,22177,3982],{"class":111},[101,22179,22180],{"class":103,"line":1304},[101,22181,22182],{"class":170},"\u002F\u002F类外初始化\n",[101,22184,22185,22187,22189,22192,22194,22196],{"class":103,"line":1316},[101,22186,115],{"class":107},[101,22188,15557],{"class":1950},[101,22190,22191],{"class":111},"::m_A",[101,22193,157],{"class":107},[101,22195,557],{"class":160},[101,22197,1277],{"class":111},[101,22199,22200,22202,22204],{"class":103,"line":1599},[101,22201,5352],{"class":107},[101,22203,5576],{"class":1950},[101,22205,1963],{"class":111},[101,22207,22208],{"class":103,"line":1604},[101,22209,1533],{"class":111},[101,22211,22212],{"class":103,"line":1610},[101,22213,15301],{"class":111},[101,22215,22216],{"class":103,"line":1615},[101,22217,22218],{"class":170},"    \u002F\u002F访问变量的原内存空间\n",[101,22220,22221],{"class":103,"line":1629},[101,22222,22223],{"class":170},"    \u002F\u002F100\n",[101,22225,22226,22228,22230,22232,22234],{"class":103,"line":1634},[101,22227,1538],{"class":111},[101,22229,1155],{"class":107},[101,22231,22089],{"class":111},[101,22233,1155],{"class":107},[101,22235,1178],{"class":111},[101,22237,22238],{"class":103,"line":1640},[101,22239,22240],{"class":111},"    Person p2;\n",[101,22242,22243,22246,22248,22250],{"class":103,"line":1661},[101,22244,22245],{"class":111},"    p2.m_A",[101,22247,157],{"class":107},[101,22249,1709],{"class":160},[101,22251,1277],{"class":111},[101,22253,22254],{"class":103,"line":1666},[101,22255,22256],{"class":170},"    \u002F\u002F继续访问这片空间\n",[101,22258,22259],{"class":103,"line":1680},[101,22260,22261],{"class":170},"    \u002F\u002F200\n",[101,22263,22264,22266,22268,22271,22273],{"class":103,"line":1685},[101,22265,1538],{"class":111},[101,22267,1155],{"class":107},[101,22269,22270],{"class":111},"p2.m_A",[101,22272,1155],{"class":107},[101,22274,1178],{"class":111},[101,22276,22277],{"class":103,"line":1714},[101,22278,1552],{"class":111},[101,22280,22281,22283,22285],{"class":103,"line":1719},[101,22282,115],{"class":107},[101,22284,1960],{"class":1950},[101,22286,1963],{"class":111},[101,22288,22289],{"class":103,"line":1736},[101,22290,1533],{"class":111},[101,22292,22293,22295],{"class":103,"line":1741},[101,22294,5621],{"class":1950},[101,22296,5624],{"class":111},[101,22298,22299],{"class":103,"line":1746},[101,22300,1552],{"class":111},[10,22302,22303],{},[261,22304,22305],{},"静态变量的访问",[92,22307,22309],{"className":94,"code":22308,"language":96,"meta":20,"style":20},"#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",[98,22310,22311,22317,22327,22333,22337,22341,22345,22353,22357,22362,22370,22374,22378,22392,22407,22415,22419,22424,22429,22434,22439,22451,22456,22461,22475,22492,22496,22504,22508,22514],{"__ignoreMap":20},[101,22312,22313,22315],{"class":103,"line":104},[101,22314,1936],{"class":107},[101,22316,1939],{"class":216},[101,22318,22319,22321,22323,22325],{"class":103,"line":21},[101,22320,1944],{"class":107},[101,22322,1947],{"class":107},[101,22324,1951],{"class":1950},[101,22326,1277],{"class":111},[101,22328,22329,22331],{"class":103,"line":1166},[101,22330,14682],{"class":107},[101,22332,15159],{"class":1950},[101,22334,22335],{"class":103,"line":1181},[101,22336,1533],{"class":111},[101,22338,22339],{"class":103,"line":1187},[101,22340,14704],{"class":107},[101,22342,22343],{"class":103,"line":1201},[101,22344,22165],{"class":170},[101,22346,22347,22349,22351],{"class":103,"line":1207},[101,22348,11008],{"class":107},[101,22350,2369],{"class":107},[101,22352,21380],{"class":111},[101,22354,22355],{"class":103,"line":1298},[101,22356,15210],{"class":107},[101,22358,22359],{"class":103,"line":1304},[101,22360,22361],{"class":170},"    \u002F\u002F静态成员变量也是有访问权限的\n",[101,22363,22364,22366,22368],{"class":103,"line":1316},[101,22365,11008],{"class":107},[101,22367,2369],{"class":107},[101,22369,21387],{"class":111},[101,22371,22372],{"class":103,"line":1599},[101,22373,3982],{"class":111},[101,22375,22376],{"class":103,"line":1604},[101,22377,22182],{"class":170},[101,22379,22380,22382,22384,22386,22388,22390],{"class":103,"line":1610},[101,22381,115],{"class":107},[101,22383,15557],{"class":1950},[101,22385,22191],{"class":111},[101,22387,157],{"class":107},[101,22389,557],{"class":160},[101,22391,1277],{"class":111},[101,22393,22394,22396,22398,22401,22403,22405],{"class":103,"line":1615},[101,22395,115],{"class":107},[101,22397,15557],{"class":1950},[101,22399,22400],{"class":111},"::m_B",[101,22402,157],{"class":107},[101,22404,811],{"class":160},[101,22406,1277],{"class":111},[101,22408,22409,22411,22413],{"class":103,"line":1629},[101,22410,5352],{"class":107},[101,22412,5645],{"class":1950},[101,22414,1963],{"class":111},[101,22416,22417],{"class":103,"line":1634},[101,22418,1533],{"class":111},[101,22420,22421],{"class":103,"line":1640},[101,22422,22423],{"class":170},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[101,22425,22426],{"class":103,"line":1661},[101,22427,22428],{"class":170},"    \u002F\u002F静态成员变量有两种访问方式：\n",[101,22430,22431],{"class":103,"line":1666},[101,22432,22433],{"class":170},"    \u002F\u002F1.通过对象进行访问\n",[101,22435,22436],{"class":103,"line":1680},[101,22437,22438],{"class":111},"    Person p;  \n",[101,22440,22441,22443,22445,22447,22449],{"class":103,"line":1685},[101,22442,1538],{"class":111},[101,22444,1155],{"class":107},[101,22446,22089],{"class":111},[101,22448,1155],{"class":107},[101,22450,1178],{"class":111},[101,22452,22453],{"class":103,"line":1714},[101,22454,22455],{"class":170},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[101,22457,22458],{"class":103,"line":1719},[101,22459,22460],{"class":170},"    \u002F\u002F2.通过类名进行访问\n",[101,22462,22463,22465,22467,22469,22471,22473],{"class":103,"line":1736},[101,22464,1538],{"class":111},[101,22466,1155],{"class":107},[101,22468,19034],{"class":1950},[101,22470,22191],{"class":111},[101,22472,1155],{"class":107},[101,22474,1178],{"class":111},[101,22476,22477,22479,22481,22483,22485,22487,22489],{"class":103,"line":1741},[101,22478,1538],{"class":111},[101,22480,1155],{"class":107},[101,22482,19034],{"class":1950},[101,22484,22400],{"class":111},[101,22486,1155],{"class":107},[101,22488,1225],{"class":111},[101,22490,22491],{"class":170}," \u002F\u002F没有访问权限，报错\n",[101,22493,22494],{"class":103,"line":1746},[101,22495,1552],{"class":111},[101,22497,22498,22500,22502],{"class":103,"line":1751},[101,22499,115],{"class":107},[101,22501,1960],{"class":1950},[101,22503,1963],{"class":111},[101,22505,22506],{"class":103,"line":1765},[101,22507,1533],{"class":111},[101,22509,22510,22512],{"class":103,"line":1770},[101,22511,5690],{"class":1950},[101,22513,5624],{"class":111},[101,22515,22516],{"class":103,"line":2564},[101,22517,1552],{"class":111},[21986,22519,22521],{"id":22520},"_8282静态成员函数","8.2.8.2静态成员函数",[10,22523,22524],{},"1.静态成员函数定义与访问",[92,22526,22528],{"className":94,"code":22527,"language":96,"meta":20,"style":20},"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",[98,22529,22530,22536,22540,22544,22549,22560,22564,22578,22582,22586,22594,22598,22603,22608,22612,22620,22625,22635],{"__ignoreMap":20},[101,22531,22532,22534],{"class":103,"line":104},[101,22533,14682],{"class":107},[101,22535,15159],{"class":1950},[101,22537,22538],{"class":103,"line":21},[101,22539,1533],{"class":111},[101,22541,22542],{"class":103,"line":1166},[101,22543,14704],{"class":107},[101,22545,22546],{"class":103,"line":1181},[101,22547,22548],{"class":170},"    \u002F\u002F在公共权限下定义静态成员函数\n",[101,22550,22551,22553,22556,22558],{"class":103,"line":1187},[101,22552,11008],{"class":107},[101,22554,22555],{"class":107}," void",[101,22557,11373],{"class":1950},[101,22559,1963],{"class":111},[101,22561,22562],{"class":103,"line":1201},[101,22563,2017],{"class":111},[101,22565,22566,22569,22571,22574,22576],{"class":103,"line":1207},[101,22567,22568],{"class":111},"        coout",[101,22570,1155],{"class":107},[101,22572,22573],{"class":216},"\"静态成员函数的调用\"",[101,22575,1155],{"class":107},[101,22577,1178],{"class":111},[101,22579,22580],{"class":103,"line":1298},[101,22581,2174],{"class":111},[101,22583,22584],{"class":103,"line":1304},[101,22585,3982],{"class":111},[101,22587,22588,22590,22592],{"class":103,"line":1316},[101,22589,5352],{"class":107},[101,22591,5576],{"class":1950},[101,22593,1963],{"class":111},[101,22595,22596],{"class":103,"line":1599},[101,22597,1533],{"class":111},[101,22599,22600],{"class":103,"line":1604},[101,22601,22602],{"class":170},"    \u002F\u002F静态成员函数的调用方式:\n",[101,22604,22605],{"class":103,"line":1610},[101,22606,22607],{"class":170},"    \u002F\u002F1.通过对象访问\n",[101,22609,22610],{"class":103,"line":1615},[101,22611,15301],{"class":111},[101,22613,22614,22616,22618],{"class":103,"line":1629},[101,22615,15854],{"class":111},[101,22617,11539],{"class":1950},[101,22619,5624],{"class":111},[101,22621,22622],{"class":103,"line":1634},[101,22623,22624],{"class":170},"    \u002F\u002F2.通过类名访问\n",[101,22626,22627,22629,22631,22633],{"class":103,"line":1640},[101,22628,18507],{"class":1950},[101,22630,17720],{"class":111},[101,22632,11539],{"class":1950},[101,22634,5624],{"class":111},[101,22636,22637],{"class":103,"line":1661},[101,22638,1552],{"class":111},[55,22640,22641],{"start":21},[58,22642,22643],{},"静态成员函数只能访问静态成员变量",[92,22645,22647],{"className":94,"code":22646,"language":96,"meta":20,"style":20},"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",[98,22648,22649,22655,22659,22663,22667,22677,22681,22695,22700,22712,22716,22727,22737,22741,22745,22749,22759,22763,22776,22780,22784,22788,22792,22806,22814,22818,22822,22826,22830,22838,22842,22852,22857,22861,22869,22873,22879],{"__ignoreMap":20},[101,22650,22651,22653],{"class":103,"line":104},[101,22652,14682],{"class":107},[101,22654,15159],{"class":1950},[101,22656,22657],{"class":103,"line":21},[101,22658,1533],{"class":111},[101,22660,22661],{"class":103,"line":1166},[101,22662,14704],{"class":107},[101,22664,22665],{"class":103,"line":1181},[101,22666,22548],{"class":170},[101,22668,22669,22671,22673,22675],{"class":103,"line":1187},[101,22670,11008],{"class":107},[101,22672,22555],{"class":107},[101,22674,11373],{"class":1950},[101,22676,1963],{"class":111},[101,22678,22679],{"class":103,"line":1201},[101,22680,2017],{"class":111},[101,22682,22683,22686,22688,22690,22692],{"class":103,"line":1207},[101,22684,22685],{"class":111},"        m_A",[101,22687,157],{"class":107},[101,22689,422],{"class":160},[101,22691,167],{"class":111},[101,22693,22694],{"class":170}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[101,22696,22697],{"class":103,"line":1298},[101,22698,22699],{"class":170},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[101,22701,22702,22704,22706,22708,22710],{"class":103,"line":1304},[101,22703,22568],{"class":111},[101,22705,1155],{"class":107},[101,22707,22573],{"class":216},[101,22709,1155],{"class":107},[101,22711,1178],{"class":111},[101,22713,22714],{"class":103,"line":1316},[101,22715,2174],{"class":111},[101,22717,22718,22720,22722,22724],{"class":103,"line":1599},[101,22719,11008],{"class":107},[101,22721,2369],{"class":107},[101,22723,15436],{"class":111},[101,22725,22726],{"class":170}," \u002F\u002F静态成员变量\n",[101,22728,22729,22731,22734],{"class":103,"line":1604},[101,22730,1972],{"class":107},[101,22732,22733],{"class":111}," m_B;",[101,22735,22736],{"class":170}," \u002F\u002F非静态成员变量\n",[101,22738,22739],{"class":103,"line":1610},[101,22740,2387],{"emptyLinePlaceholder":27},[101,22742,22743],{"class":103,"line":1615},[101,22744,15210],{"class":107},[101,22746,22747],{"class":103,"line":1629},[101,22748,22361],{"class":170},[101,22750,22751,22753,22755,22757],{"class":103,"line":1634},[101,22752,11008],{"class":107},[101,22754,22555],{"class":107},[101,22756,13606],{"class":1950},[101,22758,1963],{"class":111},[101,22760,22761],{"class":103,"line":1640},[101,22762,2017],{"class":111},[101,22764,22765,22767,22769,22772,22774],{"class":103,"line":1661},[101,22766,3438],{"class":111},[101,22768,1155],{"class":107},[101,22770,22771],{"class":216},"\"这是私有权限下的静态函数调用\"",[101,22773,1155],{"class":107},[101,22775,1178],{"class":111},[101,22777,22778],{"class":103,"line":1666},[101,22779,2174],{"class":111},[101,22781,22782],{"class":103,"line":1680},[101,22783,2387],{"emptyLinePlaceholder":27},[101,22785,22786],{"class":103,"line":1685},[101,22787,2387],{"emptyLinePlaceholder":27},[101,22789,22790],{"class":103,"line":1714},[101,22791,3982],{"class":111},[101,22793,22794,22796,22798,22800,22802,22804],{"class":103,"line":1719},[101,22795,115],{"class":107},[101,22797,15557],{"class":1950},[101,22799,22191],{"class":111},[101,22801,157],{"class":107},[101,22803,303],{"class":160},[101,22805,1277],{"class":111},[101,22807,22808,22810,22812],{"class":103,"line":1736},[101,22809,5352],{"class":107},[101,22811,5576],{"class":1950},[101,22813,1963],{"class":111},[101,22815,22816],{"class":103,"line":1741},[101,22817,1533],{"class":111},[101,22819,22820],{"class":103,"line":1746},[101,22821,22602],{"class":170},[101,22823,22824],{"class":103,"line":1751},[101,22825,22607],{"class":170},[101,22827,22828],{"class":103,"line":1765},[101,22829,15301],{"class":111},[101,22831,22832,22834,22836],{"class":103,"line":1770},[101,22833,15854],{"class":111},[101,22835,11539],{"class":1950},[101,22837,5624],{"class":111},[101,22839,22840],{"class":103,"line":2564},[101,22841,22624],{"class":170},[101,22843,22844,22846,22848,22850],{"class":103,"line":2578},[101,22845,18507],{"class":1950},[101,22847,17720],{"class":111},[101,22849,11539],{"class":1950},[101,22851,5624],{"class":111},[101,22853,22854],{"class":103,"line":2586},[101,22855,22856],{"class":170},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[101,22858,22859],{"class":103,"line":2591},[101,22860,1552],{"class":111},[101,22862,22863,22865,22867],{"class":103,"line":2597},[101,22864,115],{"class":107},[101,22866,1960],{"class":1950},[101,22868,1963],{"class":111},[101,22870,22871],{"class":103,"line":2603},[101,22872,1533],{"class":111},[101,22874,22875,22877],{"class":103,"line":2608},[101,22876,5621],{"class":1950},[101,22878,5624],{"class":111},[101,22880,22881],{"class":103,"line":7936},[101,22882,1552],{"class":111},[72,22884,22886],{"id":22885},"_83c对象模型和this指针","8.3C++对象模型和this指针",[21986,22888,22890],{"id":22889},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[10,22892,22893],{},"在c++中，类内的成员变量和成员函数分开存储",[10,22895,22896],{},"只有非静态成员变量才属于类的对象上",[22898,22899,22901],"h5",{"id":22900},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[92,22903,22905],{"className":94,"code":22904,"language":96,"meta":20,"style":20},"#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",[98,22906,22907,22914,22924,22930,22934,22938,22942,22950,22954,22958,22981,22985,22993,22997,23003],{"__ignoreMap":20},[101,22908,22909,22911],{"class":103,"line":104},[101,22910,1936],{"class":107},[101,22912,22913],{"class":216},"\u003Ciostraem>\n",[101,22915,22916,22918,22920,22922],{"class":103,"line":21},[101,22917,1944],{"class":107},[101,22919,1947],{"class":107},[101,22921,1951],{"class":1950},[101,22923,1277],{"class":111},[101,22925,22926,22928],{"class":103,"line":1166},[101,22927,14682],{"class":107},[101,22929,15159],{"class":1950},[101,22931,22932],{"class":103,"line":1181},[101,22933,1533],{"class":111},[101,22935,22936],{"class":103,"line":1187},[101,22937,2387],{"emptyLinePlaceholder":27},[101,22939,22940],{"class":103,"line":1201},[101,22941,3982],{"class":111},[101,22943,22944,22946,22948],{"class":103,"line":1207},[101,22945,5352],{"class":107},[101,22947,5576],{"class":1950},[101,22949,1963],{"class":111},[101,22951,22952],{"class":103,"line":1298},[101,22953,1533],{"class":111},[101,22955,22956],{"class":103,"line":1304},[101,22957,15301],{"class":111},[101,22959,22960,22962,22964,22967,22969,22972,22974,22976,22978],{"class":103,"line":1316},[101,22961,1538],{"class":111},[101,22963,1155],{"class":107},[101,22965,22966],{"class":216},"\"size of p=\"",[101,22968,1155],{"class":107},[101,22970,22971],{"class":1950},"sizeoif",[101,22973,6527],{"class":111},[101,22975,1155],{"class":107},[101,22977,1225],{"class":111},[101,22979,22980],{"class":170}," \u002F\u002F查看这个空类的占用的内存空间\n",[101,22982,22983],{"class":103,"line":1599},[101,22984,1552],{"class":111},[101,22986,22987,22989,22991],{"class":103,"line":1604},[101,22988,115],{"class":107},[101,22990,1960],{"class":1950},[101,22992,1963],{"class":111},[101,22994,22995],{"class":103,"line":1610},[101,22996,1533],{"class":111},[101,22998,22999,23001],{"class":103,"line":1615},[101,23000,5621],{"class":1950},[101,23002,5624],{"class":111},[101,23004,23005],{"class":103,"line":1629},[101,23006,1552],{"class":111},[10,23008,23009],{},"输出结果为：size of p=1",[10,23011,23012],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[10,23014,23015],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22898,23017,23019],{"id":23018},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[92,23021,23023],{"className":94,"code":23022,"language":96,"meta":20,"style":20},"#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",[98,23024,23025,23031,23041,23049,23053,23062,23066,23074,23078,23082,23101,23105,23109,23117,23121,23127],{"__ignoreMap":20},[101,23026,23027,23029],{"class":103,"line":104},[101,23028,1936],{"class":107},[101,23030,1939],{"class":216},[101,23032,23033,23035,23037,23039],{"class":103,"line":21},[101,23034,1944],{"class":107},[101,23036,1947],{"class":107},[101,23038,1951],{"class":1950},[101,23040,1277],{"class":111},[101,23042,23043,23045,23047],{"class":103,"line":1166},[101,23044,14682],{"class":107},[101,23046,15557],{"class":1950},[101,23048,2661],{"class":111},[101,23050,23051],{"class":103,"line":1181},[101,23052,1533],{"class":111},[101,23054,23055,23057,23059],{"class":103,"line":1187},[101,23056,1972],{"class":107},[101,23058,15436],{"class":111},[101,23060,23061],{"class":170},"\u002F\u002F非静态成员变量\n",[101,23063,23064],{"class":103,"line":1201},[101,23065,3982],{"class":111},[101,23067,23068,23070,23072],{"class":103,"line":1207},[101,23069,5352],{"class":107},[101,23071,5576],{"class":1950},[101,23073,1963],{"class":111},[101,23075,23076],{"class":103,"line":1298},[101,23077,1533],{"class":111},[101,23079,23080],{"class":103,"line":1304},[101,23081,15301],{"class":111},[101,23083,23084,23086,23088,23090,23092,23094,23096,23098],{"class":103,"line":1316},[101,23085,1538],{"class":111},[101,23087,1155],{"class":107},[101,23089,22966],{"class":216},[101,23091,1359],{"class":107},[101,23093,6527],{"class":111},[101,23095,1155],{"class":107},[101,23097,1225],{"class":111},[101,23099,23100],{"class":170}," \u002F\u002F查看不是空对象时占用多少内存\n",[101,23102,23103],{"class":103,"line":1599},[101,23104,2387],{"emptyLinePlaceholder":27},[101,23106,23107],{"class":103,"line":1604},[101,23108,1552],{"class":111},[101,23110,23111,23113,23115],{"class":103,"line":1610},[101,23112,115],{"class":107},[101,23114,1960],{"class":1950},[101,23116,1963],{"class":111},[101,23118,23119],{"class":103,"line":1615},[101,23120,1533],{"class":111},[101,23122,23123,23125],{"class":103,"line":1629},[101,23124,5621],{"class":1950},[101,23126,5624],{"class":111},[101,23128,23129],{"class":103,"line":1634},[101,23130,1552],{"class":111},[10,23132,23133],{},"输出结果：size of p=4",[10,23135,23136],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[55,23138,23139],{},[58,23140,23141],{},"如果加上非静态成员变量，Person类修改如下",[92,23143,23145],{"className":94,"code":23144,"language":96,"meta":20,"style":20},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[98,23146,23147,23153,23157,23163,23171,23175,23180],{"__ignoreMap":20},[101,23148,23149,23151],{"class":103,"line":104},[101,23150,14682],{"class":107},[101,23152,15159],{"class":1950},[101,23154,23155],{"class":103,"line":21},[101,23156,1533],{"class":111},[101,23158,23159,23161],{"class":103,"line":1166},[101,23160,1972],{"class":107},[101,23162,21380],{"class":111},[101,23164,23165,23167,23169],{"class":103,"line":1181},[101,23166,11008],{"class":107},[101,23168,2369],{"class":107},[101,23170,21387],{"class":111},[101,23172,23173],{"class":103,"line":1187},[101,23174,3982],{"class":111},[101,23176,23177],{"class":103,"line":1201},[101,23178,23179],{"class":170},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[101,23181,23182,23184,23186,23188,23190,23192],{"class":103,"line":1207},[101,23183,115],{"class":107},[101,23185,15557],{"class":1950},[101,23187,22400],{"class":111},[101,23189,157],{"class":107},[101,23191,303],{"class":160},[101,23193,1277],{"class":111},[10,23195,23196],{},"输出结果：4",[10,23198,23199],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[55,23201,23202],{"start":21},[58,23203,23204],{},"加上非静态成员函数",[92,23206,23208],{"className":94,"code":23207,"language":96,"meta":20,"style":20},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[98,23209,23210,23217,23221,23227,23235,23239,23243,23247],{"__ignoreMap":20},[101,23211,23212,23214],{"class":103,"line":104},[101,23213,14682],{"class":107},[101,23215,23216],{"class":1950},"  Person\n",[101,23218,23219],{"class":103,"line":21},[101,23220,1533],{"class":111},[101,23222,23223,23225],{"class":103,"line":1166},[101,23224,1972],{"class":107},[101,23226,21380],{"class":111},[101,23228,23229,23231,23233],{"class":103,"line":1181},[101,23230,14897],{"class":107},[101,23232,11373],{"class":1950},[101,23234,1963],{"class":111},[101,23236,23237],{"class":103,"line":1187},[101,23238,2017],{"class":111},[101,23240,23241],{"class":103,"line":1201},[101,23242,2387],{"emptyLinePlaceholder":27},[101,23244,23245],{"class":103,"line":1207},[101,23246,2174],{"class":111},[101,23248,23249],{"class":103,"line":1298},[101,23250,3982],{"class":111},[10,23252,23253],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[55,23255,23256],{"start":1166},[58,23257,23258],{},"加上静态成员函数",[92,23260,23262],{"className":94,"code":23261,"language":96,"meta":20,"style":20},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[98,23263,23264,23270,23274,23280,23288,23292,23296,23300,23311,23315,23319,23323],{"__ignoreMap":20},[101,23265,23266,23268],{"class":103,"line":104},[101,23267,14682],{"class":107},[101,23269,23216],{"class":1950},[101,23271,23272],{"class":103,"line":21},[101,23273,1533],{"class":111},[101,23275,23276,23278],{"class":103,"line":1166},[101,23277,1972],{"class":107},[101,23279,21380],{"class":111},[101,23281,23282,23284,23286],{"class":103,"line":1181},[101,23283,14897],{"class":107},[101,23285,11373],{"class":1950},[101,23287,1963],{"class":111},[101,23289,23290],{"class":103,"line":1187},[101,23291,2017],{"class":111},[101,23293,23294],{"class":103,"line":1201},[101,23295,2387],{"emptyLinePlaceholder":27},[101,23297,23298],{"class":103,"line":1207},[101,23299,2174],{"class":111},[101,23301,23302,23304,23306,23309],{"class":103,"line":1298},[101,23303,11008],{"class":107},[101,23305,22555],{"class":107},[101,23307,23308],{"class":1950}," func1",[101,23310,1963],{"class":111},[101,23312,23313],{"class":103,"line":1304},[101,23314,2017],{"class":111},[101,23316,23317],{"class":103,"line":1316},[101,23318,2387],{"emptyLinePlaceholder":27},[101,23320,23321],{"class":103,"line":1599},[101,23322,2174],{"class":111},[101,23324,23325],{"class":103,"line":1604},[101,23326,3982],{"class":111},[10,23328,23196],{},[10,23330,23331],{},"解释：静态成员函数也不属于类上",[5114,23333,7662],{},{"title":20,"searchDepth":21,"depth":21,"links":23335},[23336,23342],{"id":14633,"depth":21,"text":14634,"children":23337},[23338,23339,23340,23341],{"id":14637,"depth":1166,"text":14638},{"id":15362,"depth":1166,"text":15363},{"id":15534,"depth":1166,"text":15535},{"id":15993,"depth":1166,"text":15994},{"id":18365,"depth":21,"text":18366,"children":23343},[23344,23345,23346,23347,23348,23349,23350,23351,23352],{"id":18377,"depth":1166,"text":18378},{"id":18670,"depth":1166,"text":18671},{"id":19161,"depth":1166,"text":19162},{"id":20258,"depth":1166,"text":20259},{"id":20681,"depth":1166,"text":20682},{"id":21160,"depth":1166,"text":21161},{"id":21535,"depth":1166,"text":21536},{"id":21948,"depth":1166,"text":21949},{"id":22885,"depth":1166,"text":22886},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14598,"description":23353},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23360,"title":96,"body":23361,"description":23365,"extension":24,"meta":23366,"navigation":27,"path":23368,"seo":23369,"stem":23370,"__hash__":23371},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23362,"toc":23363},[],{"title":20,"searchDepth":21,"depth":21,"links":23364},[],null,{"category":23367},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":96,"description":23365},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23373,"title":23374,"body":23375,"description":20,"extension":24,"meta":23965,"navigation":27,"path":23966,"seo":23967,"stem":23968,"__hash__":23969},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23376,"toc":23947},[23377,23380,23384,23387,23390,23393,23411,23416,23419,23422,23425,23428,23433,23436,23441,23444,23447,23451,23454,23457,23463,23466,23484,23488,23492,23495,23500,23503,23507,23510,23523,23526,23530,23533,23536,23539,23564,23567,23576,23587,23602,23634,23638,23645,23653,23657,23660,23663,23668,23672,23675,23678,23683,23686,23690,23693,23696,23701,23704,23708,23713,23717,23784,23788,23791,23794,23797,23800,23803,23809,23830,23833,23847,23855,23859,23862,23865,23870,23873,23878,23883,23886,23889,23894,23899,23902,23907,23912,23915,23920,23925,23928,23931,23936,23939,23944],[39,23378,23374],{"id":23379},"_1强化学习基本认识",[43,23381,23383],{"id":23382},"_11什么是强化学习","1.1.什么是强化学习",[10,23385,23386],{},"强化学习有两部分组成：智能体和环境；",[10,23388,23389],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[10,23391,23392],{},"强化学习与监督学习的区别:",[55,23394,23395,23398,23401,23404],{},[58,23396,23397],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[58,23399,23400],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[58,23402,23403],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[58,23405,23406,23407,23410],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[261,23408,23409],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[10,23412,23413],{},[1449,23414],{"alt":20,"src":23415},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[10,23417,23418],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[10,23420,23421],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[10,23423,23424],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[10,23426,23427],{},"获取奖励",[10,23429,23430],{},[1449,23431],{"alt":20,"src":23432},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[10,23434,23435],{},"强化学习可以分成标准强化学习和深度强化学习",[10,23437,23438],{},[1449,23439],{"alt":20,"src":23440},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[10,23442,23443],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[10,23445,23446],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[43,23448,23450],{"id":23449},"_12强化学习应用场景","1.2.强化学习应用场景",[10,23452,23453],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[10,23455,23456],{},"具身智能中的应用",[10,23458,23459,23462],{},[261,23460,23461],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[10,23464,23465],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[10,23467,23468,23469,23472,23473,23476,23477,23480,23481],{},"机器人是",[261,23470,23471],{},"躯体","，深度学习是",[261,23474,23475],{},"神经元****网络","，VLA是",[261,23478,23479],{},"通用的行为逻辑","，而强化学习是",[261,23482,23483],{},"教练",[43,23485,23487],{"id":23486},"_13序列决策","1.3.序列决策",[72,23489,23491],{"id":23490},"_131智能体与环境","1.3.1.智能体与环境",[10,23493,23494],{},"强化学习研究的问题是智能体agent与环境交互的问题",[10,23496,23497],{},[1449,23498],{"alt":20,"src":23499},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[10,23501,23502],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[72,23504,23506],{"id":23505},"_132奖励","1.3.2.奖励",[10,23508,23509],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[10,23511,23512,23513,23522],{},"取某个策略的表现如何。强化学习的目的就是",[261,23514,23515,23516,23521],{},"最大化",[261,23517,23518],{},[261,23519,23520],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[10,23524,23525],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[72,23527,23529],{"id":23528},"_133序列决策","1.3.3.序列决策",[10,23531,23532],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[10,23534,23535],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[10,23537,23538],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[10,23540,23541,23545,23546,23548,23549,23551,23552,23554,23555,13783,23558,13783,23561],{},[23542,23543,23544],"em",{},"Ht"," = ",[23542,23547,707],{},"1*, a",[23542,23550,329],{},", r",[23542,23553,329],{},", . . . ,* ",[23542,23556,23557],{},"ot",[23542,23559,23560],{},", at ,",[23542,23562,23563],{},"rt",[10,23565,23566],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[10,23568,23569,23545,23572,1645,23574,540],{},[23542,23570,23571],{},"st",[23542,23573,164],{},[23542,23575,23544],{},[10,23577,23578,23579,23582,23583,23586],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[261,23580,23581],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[261,23584,23585],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[10,23588,23589,23590,23593,23594,23597,23598,23601],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[261,23591,23592],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[261,23595,23596],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23542,23599,23600],{},"S, A, T, R, Ω, O, γ",")。",[10,23603,23604,23605,23607,23608,23610,23611,112,23613,23616,23617,23619,23620,112,23623,23626,23627,23629,23630,23633],{},"其中 ",[23542,23606,800],{}," 表示状态空间，为隐变量，",[23542,23609,344],{}," 为动作空间，",[23542,23612,825],{},[23542,23614,23615],{},"s ′ |s, a",") 为状态转移概率，",[23542,23618,775],{}," 为奖励函数，",[23542,23621,23622],{},"Ω",[23542,23624,23625],{},"o|s, a",") 为观测概率，",[23542,23628,701],{}," 为观测空间，",[23542,23631,23632],{},"γ"," 为折扣因子。",[43,23635,23637],{"id":23636},"_14动作空间","1.4.动作空间",[10,23639,23640,23641,23644],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[261,23642,23643],{},"动作空间"," ，动作空间分为:",[55,23646,23647,23650],{},[58,23648,23649],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[58,23651,23652],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[43,23654,23656],{"id":23655},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[10,23658,23659],{},"由策略、价值函数、模型三部分组成",[10,23661,23662],{},"这三者组成马尔可夫决策过程",[10,23664,23665],{},[1449,23666],{"alt":20,"src":23667},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[72,23669,23671],{"id":23670},"_151策略","1.5.1.策略",[10,23673,23674],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[10,23676,23677],{},"策略可分为两种：",[10,23679,23680],{},[1449,23681],{"alt":20,"src":23682},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[10,23684,23685],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[72,23687,23689],{"id":23688},"_152价值函数","1.5.2.价值函数",[10,23691,23692],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[10,23694,23695],{},"价值函数中有一个折扣因子，类似于存款利息",[10,23697,23698],{},[1449,23699],{"alt":20,"src":23700},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[10,23702,23703],{},"进入某个状态采取的最优动作可以通过Q函数得到",[72,23705,23707],{"id":23706},"_153模型","1.5.3.模型",[10,23709,23710],{},[1449,23711],{"alt":20,"src":23712},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[43,23714,23716],{"id":23715},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[249,23718,23719,23730],{},[252,23720,23721],{},[255,23722,23723,23727],{},[258,23724,23726],{"align":23725},"left","类型",[258,23728,23729],{"align":23725},"特点",[296,23731,23732,23742,23752,23762,23774],{},[255,23733,23734,23739],{},[301,23735,23736],{"align":23725},[261,23737,23738],{},"基于价值的智能体",[301,23740,23741],{"align":23725},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[255,23743,23744,23749],{},[301,23745,23746],{"align":23725},[261,23747,23748],{},"基于策略的智能体",[301,23750,23751],{"align":23725},"直接学习策略，没有学习价值函数",[255,23753,23754,23759],{},[301,23755,23756],{"align":23725},[261,23757,23758],{},"演员-评论员智能体",[301,23760,23761],{"align":23725},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[255,23763,23764,23769],{},[301,23765,23766],{"align":23725},[261,23767,23768],{},"有模型强化学习智能体",[301,23770,23771],{"align":23725},[1449,23772],{"alt":20,"src":23773},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[255,23775,23776,23781],{},[301,23777,23778],{"align":23725},[261,23779,23780],{},"免模型强化学习智能体",[301,23782,23783],{"align":23725},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[43,23785,23787],{"id":23786},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[10,23789,23790],{},"学习和规划是序列决策的两个基本问题",[10,23792,23793],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[10,23795,23796],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[10,23798,23799],{},"强化学习用到的库：Gym",[10,23801,23802],{},"Gym可以检验强化学习算法的优劣",[10,23804,23805,23808],{},[261,23806,23807],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[92,23810,23814],{"className":23811,"code":23812,"language":23813,"meta":20,"style":20},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[98,23815,23816],{"__ignoreMap":20},[101,23817,23818,23821,23824,23827],{"class":103,"line":104},[101,23819,23820],{"class":1950},"pip",[101,23822,23823],{"class":216}," install",[101,23825,23826],{"class":216}," gym==",[101,23828,23829],{"class":160},"0.25.2\n",[10,23831,23832],{},"显示图形界面需要",[92,23834,23836],{"className":23811,"code":23835,"language":23813,"meta":20,"style":20},"pip install pygame\n",[98,23837,23838],{"__ignoreMap":20},[101,23839,23840,23842,23844],{"class":103,"line":104},[101,23841,23820],{"class":1950},[101,23843,23823],{"class":216},[101,23845,23846],{"class":216}," pygame\n",[10,23848,23849,23850],{},"有关Gym库的相关文档介绍：",[14,23851,23854],{"href":23852,"rel":23853},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[18],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[43,23856,23858],{"id":23857},"_18一些补充基础概念","1.8.一些补充基础概念",[10,23860,23861],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[10,23863,23864],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[10,23866,23867],{},[1449,23868],{"alt":20,"src":23869},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[10,23871,23872],{},"折扣率需要自己来设定",[10,23874,23875],{},[1449,23876],{"alt":20,"src":23877},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[55,23879,23880],{},[58,23881,23882],{},"状态转移函数：",[10,23884,23885],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[10,23887,23888],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[10,23890,23891],{},[1449,23892],{"alt":20,"src":23893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[55,23895,23896],{"start":21},[58,23897,23898],{},"动作价值函数：",[10,23900,23901],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[10,23903,23904],{},[1449,23905],{"alt":20,"src":23906},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[55,23908,23909],{"start":1166},[58,23910,23911],{},"最优动作价值函数：",[10,23913,23914],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[10,23916,23917],{},[1449,23918],{"alt":20,"src":23919},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[55,23921,23922],{"start":1181},[58,23923,23924],{},"状态价值函数:",[10,23926,23927],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[10,23929,23930],{},"它衡量的是“一个具体动作”的长期价值",[10,23932,23933],{},[1449,23934],{"alt":20,"src":23935},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[10,23937,23938],{},"几个价值函数之间的比较：",[10,23940,23941],{},[1449,23942],{"alt":20,"src":23943},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5114,23945,23946],{},"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":20,"searchDepth":21,"depth":21,"links":23948},[23949,23950,23951,23956,23957,23962,23963,23964],{"id":23382,"depth":21,"text":23383},{"id":23449,"depth":21,"text":23450},{"id":23486,"depth":21,"text":23487,"children":23952},[23953,23954,23955],{"id":23490,"depth":1166,"text":23491},{"id":23505,"depth":1166,"text":23506},{"id":23528,"depth":1166,"text":23529},{"id":23636,"depth":21,"text":23637},{"id":23655,"depth":21,"text":23656,"children":23958},[23959,23960,23961],{"id":23670,"depth":1166,"text":23671},{"id":23688,"depth":1166,"text":23689},{"id":23706,"depth":1166,"text":23707},{"id":23715,"depth":21,"text":23716},{"id":23786,"depth":21,"text":23787},{"id":23857,"depth":21,"text":23858},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23374,"description":20},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23971,"title":23972,"body":23973,"description":23980,"extension":24,"meta":23991,"navigation":27,"path":23992,"seo":23993,"stem":23994,"__hash__":23995},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23974,"toc":23989},[23975,23978,23981,23986],[39,23976,23972],{"id":23977},"_2马尔可夫决策过程",[10,23979,23980],{},"这是强化学习的基本框架",[10,23982,23983],{},[1449,23984],{"alt":20,"src":23985},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[10,23987,23988],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":20,"searchDepth":21,"depth":21,"links":23990},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23972,"description":23980},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":23997,"title":23998,"body":23999,"description":20,"extension":24,"meta":24115,"navigation":27,"path":24116,"seo":24117,"stem":24118,"__hash__":24119},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24000,"toc":24110},[24001,24004,24008,24011,24016,24021,24024,24029,24032,24037,24040,24044,24049,24052,24057,24062,24067,24070,24074,24079,24082,24087,24092,24097,24102,24105],[39,24002,23998],{"id":24003},"_3动作价值函数",[43,24005,24007],{"id":24006},"_31dqn","3.1.DQN",[10,24009,24010],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[10,24012,24013],{},[1449,24014],{"alt":20,"src":24015},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[10,24017,24018],{},[1449,24019],{"alt":20,"src":24020},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[10,24022,24023],{},"DQN算法的描述：",[10,24025,24026],{},[1449,24027],{"alt":20,"src":24028},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[10,24030,24031],{},"这里的Dense指的是全连接层",[10,24033,24034],{},[1449,24035],{"alt":20,"src":24036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[10,24038,24039],{},"当前观测的状态为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算法",[43,24041,24043],{"id":24042},"_32dqn的举例","3.2.DQN的举例",[10,24045,24046],{},[1449,24047],{"alt":20,"src":24048},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[10,24050,24051],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[10,24053,24054],{},[1449,24055],{"alt":20,"src":24056},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[10,24058,24059],{},[1449,24060],{"alt":20,"src":24061},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[10,24063,24064],{},[1449,24065],{"alt":20,"src":24066},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[10,24068,24069],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[43,24071,24073],{"id":24072},"_33td算法","3.3.TD算法",[10,24075,24076],{},[1449,24077],{"alt":20,"src":24078},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[10,24080,24081],{},"强化学习TD算法公式的粗略解释：",[10,24083,24084],{},[1449,24085],{"alt":20,"src":24086},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[10,24088,24089],{},[1449,24090],{"alt":20,"src":24091},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[10,24093,24094],{},[1449,24095],{"alt":20,"src":24096},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[10,24098,24099],{},[1449,24100],{"alt":20,"src":24101},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[10,24103,24104],{},"TD算法总结：",[10,24106,24107],{},[1449,24108],{"alt":20,"src":24109},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":20,"searchDepth":21,"depth":21,"links":24111},[24112,24113,24114],{"id":24006,"depth":21,"text":24007},{"id":24042,"depth":21,"text":24043},{"id":24072,"depth":21,"text":24073},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":23998,"description":20},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24121,"title":24122,"body":24123,"description":20,"extension":24,"meta":24356,"navigation":27,"path":24357,"seo":24358,"stem":24359,"__hash__":24360},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24124,"toc":24352},[24125,24128,24132,24135,24138,24143,24148,24151,24156,24161,24164,24169,24172,24177,24180,24185,24188,24193,24196,24201,24206,24209,24214,24217,24220,24225,24228,24233,24238,24242,24245,24248,24253,24258,24261,24266,24271,24274,24279,24282,24285,24290,24293,24298,24301,24306,24311,24314,24319,24324,24327,24332,24335,24340,24343],[39,24126,24122],{"id":24127},"_4策略学习",[43,24129,24131],{"id":24130},"_41概念描述","4.1.概念描述",[10,24133,24134],{},"用神经网络（策略网络）近似策略函数",[10,24136,24137],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[10,24139,24140],{},[1449,24141],{"alt":20,"src":24142},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[10,24144,24145],{},[1449,24146],{"alt":20,"src":24147},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[10,24149,24150],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[10,24152,24153],{},[1449,24154],{"alt":20,"src":24155},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[10,24157,24158],{},[1449,24159],{"alt":20,"src":24160},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[10,24162,24163],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[10,24165,24166],{},[1449,24167],{"alt":20,"src":24168},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[10,24170,24171],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[10,24173,24174],{},[1449,24175],{"alt":20,"src":24176},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[10,24178,24179],{},"改进theta要用到策略梯度算法",[10,24181,24182],{},[1449,24183],{"alt":20,"src":24184},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[10,24186,24187],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[10,24189,24190],{},[1449,24191],{"alt":20,"src":24192},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[10,24194,24195],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[10,24197,24198],{},[1449,24199],{"alt":20,"src":24200},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[10,24202,24203],{},[1449,24204],{"alt":20,"src":24205},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[10,24207,24208],{},"梯度公式总结：",[10,24210,24211],{},[1449,24212],{"alt":20,"src":24213},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[10,24215,24216],{},"两个公式的分别应用场景：",[10,24218,24219],{},"对于离散的动作：",[10,24221,24222],{},[1449,24223],{"alt":20,"src":24224},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[10,24226,24227],{},"对于连续的动作：",[10,24229,24230],{},[1449,24231],{"alt":20,"src":24232},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[10,24234,24235],{},[1449,24236],{"alt":20,"src":24237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[43,24239,24241],{"id":24240},"_42概率梯度算法总结","4.2.概率梯度算法总结",[10,24243,24244],{},"使用蒙特卡洛来近似计算策略梯度",[10,24246,24247],{},"蒙特卡洛法的解释如下：",[10,24249,24250],{},[1449,24251],{"alt":20,"src":24252},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[10,24254,24255],{},[1449,24256],{"alt":20,"src":24257},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[10,24259,24260],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[55,24262,24263],{},[58,24264,24265],{},"方法一：reinforce算法",[10,24267,24268],{},[1449,24269],{"alt":20,"src":24270},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[10,24272,24273],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[55,24275,24276],{"start":21},[58,24277,24278],{},"方法二：actor-critic算法",[10,24280,24281],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[10,24283,24284],{},"两个网络的构建：",[10,24286,24287],{},[1449,24288],{"alt":20,"src":24289},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[10,24291,24292],{},"actor网路：",[10,24294,24295],{},[1449,24296],{"alt":20,"src":24297},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[10,24299,24300],{},"critic网络",[10,24302,24303],{},[1449,24304],{"alt":20,"src":24305},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[55,24307,24308],{"start":1166},[58,24309,24310],{},"网络的训练",[10,24312,24313],{},"网络描述",[10,24315,24316],{},[1449,24317],{"alt":20,"src":24318},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[10,24320,24321],{},[1449,24322],{"alt":20,"src":24323},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[10,24325,24326],{},"TD算法更新梯度：",[10,24328,24329],{},[1449,24330],{"alt":20,"src":24331},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[10,24333,24334],{},"策略网络更新梯度：",[10,24336,24337],{},[1449,24338],{"alt":20,"src":24339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[10,24341,24342],{},"训练整个流程的具体描述：",[10,24344,24345,24348,24349],{},[1449,24346],{"alt":20,"src":24347},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1449,24350],{"alt":20,"src":24351},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":20,"searchDepth":21,"depth":21,"links":24353},[24354,24355],{"id":24130,"depth":21,"text":24131},{"id":24240,"depth":21,"text":24241},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24122,"description":20},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24362,"title":24363,"body":24364,"description":24371,"extension":24,"meta":24421,"navigation":27,"path":24422,"seo":24423,"stem":24424,"__hash__":24425},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24365,"toc":24417},[24366,24369,24372,24376,24379,24384,24388,24391,24396,24399,24404,24409,24412],[39,24367,24363],{"id":24368},"_5alphago算法",[10,24370,24371],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[43,24373,24375],{"id":24374},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[10,24377,24378],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[10,24380,24381],{},[1449,24382],{"alt":20,"src":24383},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[43,24385,24387],{"id":24386},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[10,24389,24390],{},"采用强化学习的方式训练策略网络",[10,24392,24393],{},[1449,24394],{"alt":20,"src":24395},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[10,24397,24398],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[10,24400,24401],{},[1449,24402],{"alt":20,"src":24403},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[10,24405,24406],{},[1449,24407],{"alt":20,"src":24408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[10,24410,24411],{},"强化学习训练策略网络的总结：",[10,24413,24414],{},[1449,24415],{"alt":20,"src":24416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":20,"searchDepth":21,"depth":21,"links":24418},[24419,24420],{"id":24374,"depth":21,"text":24375},{"id":24386,"depth":21,"text":24387},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24363,"description":24371},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24427,"title":24428,"body":24429,"description":24436,"extension":24,"meta":24439,"navigation":27,"path":24440,"seo":24441,"stem":24442,"__hash__":24443},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24430,"toc":24437},[24431,24434],[39,24432,24428],{"id":24433},"_6价值网络",[10,24435,24436],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":20,"searchDepth":21,"depth":21,"links":24438},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24428,"description":24436},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24445,"title":24446,"body":24447,"description":24451,"extension":24,"meta":24452,"navigation":27,"path":24453,"seo":24454,"stem":24455,"__hash__":24456},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24448,"toc":24449},[],{"title":20,"searchDepth":21,"depth":21,"links":24450},[],"记录自己的强化学习笔记。",{"category":23367},"\u002Fwiki\u002F2025-12-04",{"title":24446,"description":24451},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24458,"title":24459,"body":24460,"description":23365,"extension":24,"meta":24499,"navigation":27,"path":24500,"seo":24501,"stem":24502,"__hash__":24503},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24461,"toc":24497},[24462,24465,24468,24474,24477,24483,24486,24491,24494],[39,24463,24459],{"id":24464},"_1-项目概览与官方资源",[10,24466,24467],{},"官方文档：",[10,24469,24470],{},[14,24471,24472],{"href":24472,"rel":24473},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[18],[10,24475,24476],{},"官方代码仓库：",[10,24478,24479],{},[14,24480,24481],{"href":24481,"rel":24482},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[18],[10,24484,24485],{},"复现大体流程：",[10,24487,24488],{},[1449,24489],{"alt":20,"src":24490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[10,24492,24493],{},"本教程的目标是打通这条链路：",[10,24495,24496],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":20,"searchDepth":21,"depth":21,"links":24498},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24459,"description":23365},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24505,"title":24506,"body":24507,"description":23365,"extension":24,"meta":24623,"navigation":27,"path":24624,"seo":24625,"stem":24626,"__hash__":24627},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24508,"toc":24618},[24509,24512,24516,24519,24526,24530,24533,24542,24552,24556,24586,24589,24615],[39,24510,24506],{"id":24511},"_2-环境准备与设备连接",[43,24513,24515],{"id":24514},"_21-系统与环境","2.1 系统与环境",[10,24517,24518],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[10,24520,24521,24522,24525],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[98,24523,24524],{},"lerobot"," 依赖。",[43,24527,24529],{"id":24528},"_22-机械臂串口识别","2.2 机械臂串口识别",[10,24531,24532],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[92,24534,24536],{"className":23811,"code":24535,"language":23813,"meta":20,"style":20},"lerobot-find-out\n",[98,24537,24538],{"__ignoreMap":20},[101,24539,24540],{"class":103,"line":104},[101,24541,24535],{"class":1950},[10,24543,24544,24545,324,24548,24551],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[98,24546,24547],{},"\u002Fdev\u002FttyACM0",[98,24549,24550],{},"\u002Fdev\u002FttyACM1","）。",[43,24553,24555],{"id":24554},"_23-串口授权","2.3 串口授权",[92,24557,24559],{"className":23811,"code":24558,"language":23813,"meta":20,"style":20},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[98,24560,24561,24575],{"__ignoreMap":20},[101,24562,24563,24566,24569,24572],{"class":103,"line":104},[101,24564,24565],{"class":1950},"sudo",[101,24567,24568],{"class":216}," chmod",[101,24570,24571],{"class":160}," 666",[101,24573,24574],{"class":216}," \u002Fdev\u002FttyACM0\n",[101,24576,24577,24579,24581,24583],{"class":103,"line":21},[101,24578,24565],{"class":1950},[101,24580,24568],{"class":216},[101,24582,24571],{"class":160},[101,24584,24585],{"class":216}," \u002Fdev\u002FttyACM1\n",[10,24587,24588],{},"说明：",[1118,24590,24591,24596,24602,24612],{},[58,24592,24593,24595],{},[98,24594,24565],{},"：以 root 权限执行命令。",[58,24597,24598,24601],{},[98,24599,24600],{},"chmod","：修改设备节点权限。",[58,24603,24604,24607,24608,24611],{},[98,24605,24606],{},"666","：",[98,24609,24610],{},"rw-rw-rw-","，所有用户可读写。",[58,24613,24614],{},"串口号必须替换为你机器上的真实端口。",[5114,24616,24617],{},"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":20,"searchDepth":21,"depth":21,"links":24619},[24620,24621,24622],{"id":24514,"depth":21,"text":24515},{"id":24528,"depth":21,"text":24529},{"id":24554,"depth":21,"text":24555},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24506,"description":23365},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24629,"title":24630,"body":24631,"description":23365,"extension":24,"meta":24792,"navigation":27,"path":24793,"seo":24794,"stem":24795,"__hash__":24796},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24632,"toc":24788},[24633,24637,24641,24647,24650,24707,24710,24714,24717,24785],[39,24634,24636],{"id":24635},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[43,24638,24640],{"id":24639},"_31-配置电机-id","3.1 配置电机 ID",[10,24642,24643,24644,24646],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[98,24645,329],{},"，需要改成机械臂链路里不冲突的编号。",[10,24648,24649],{},"方式一：用 LeRobot 命令逐步写入。",[92,24651,24653],{"className":23811,"code":24652,"language":23813,"meta":20,"style":20},"# 主臂舵机配置 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",[98,24654,24655,24660,24668,24675,24680,24684,24689,24695,24702],{"__ignoreMap":20},[101,24656,24657],{"class":103,"line":104},[101,24658,24659],{"class":170},"# 主臂舵机配置 ID\n",[101,24661,24662,24665],{"class":103,"line":21},[101,24663,24664],{"class":1950},"lerobot-setup-motors",[101,24666,24667],{"class":160}," \\\n",[101,24669,24670,24673],{"class":103,"line":1166},[101,24671,24672],{"class":160},"  --teleop.type=so101_leader",[101,24674,24667],{"class":160},[101,24676,24677],{"class":103,"line":1181},[101,24678,24679],{"class":160},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[101,24681,24682],{"class":103,"line":1187},[101,24683,2387],{"emptyLinePlaceholder":27},[101,24685,24686],{"class":103,"line":1201},[101,24687,24688],{"class":170},"# 从臂舵机配置 ID\n",[101,24690,24691,24693],{"class":103,"line":1207},[101,24692,24664],{"class":1950},[101,24694,24667],{"class":160},[101,24696,24697,24700],{"class":103,"line":1298},[101,24698,24699],{"class":160},"  --robot.type=so101_follower",[101,24701,24667],{"class":160},[101,24703,24704],{"class":103,"line":1304},[101,24705,24706],{"class":160},"  --robot.port=\u002Fdev\u002FttyACM1\n",[10,24708,24709],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[43,24711,24713],{"id":24712},"_32-机械臂校准","3.2 机械臂校准",[10,24715,24716],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[92,24718,24720],{"className":23811,"code":24719,"language":23813,"meta":20,"style":20},"# 主臂校准\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",[98,24721,24722,24727,24734,24740,24747,24752,24756,24761,24767,24773,24780],{"__ignoreMap":20},[101,24723,24724],{"class":103,"line":104},[101,24725,24726],{"class":170},"# 主臂校准\n",[101,24728,24729,24732],{"class":103,"line":21},[101,24730,24731],{"class":1950},"lerobot-calibrate",[101,24733,24667],{"class":160},[101,24735,24736,24738],{"class":103,"line":1166},[101,24737,24672],{"class":160},[101,24739,24667],{"class":160},[101,24741,24742,24745],{"class":103,"line":1181},[101,24743,24744],{"class":160},"  --teleop.port=\u002Fdev\u002FttyACM0",[101,24746,24667],{"class":160},[101,24748,24749],{"class":103,"line":1187},[101,24750,24751],{"class":160},"  --teleop.id=my_awesome_leader_arm\n",[101,24753,24754],{"class":103,"line":1201},[101,24755,2387],{"emptyLinePlaceholder":27},[101,24757,24758],{"class":103,"line":1207},[101,24759,24760],{"class":170},"# 从臂校准\n",[101,24762,24763,24765],{"class":103,"line":1298},[101,24764,24731],{"class":1950},[101,24766,24667],{"class":160},[101,24768,24769,24771],{"class":103,"line":1304},[101,24770,24699],{"class":160},[101,24772,24667],{"class":160},[101,24774,24775,24778],{"class":103,"line":1316},[101,24776,24777],{"class":160},"  --robot.port=\u002Fdev\u002FttyACM1",[101,24779,24667],{"class":160},[101,24781,24782],{"class":103,"line":1599},[101,24783,24784],{"class":160},"  --robot.id=my_awesome_follower_arm\n",[5114,24786,24787],{},"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":20,"searchDepth":21,"depth":21,"links":24789},[24790,24791],{"id":24639,"depth":21,"text":24640},{"id":24712,"depth":21,"text":24713},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24630,"description":23365},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24798,"title":24799,"body":24800,"description":23365,"extension":24,"meta":24991,"navigation":27,"path":24992,"seo":24993,"stem":24994,"__hash__":24995},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24801,"toc":24987},[24802,24805,24809,24856,24860,24873,24936,24939,24984],[39,24803,24799],{"id":24804},"_4-遥操与相机接入",[43,24806,24808],{"id":24807},"_41-不带相机遥操","4.1 不带相机遥操",[92,24810,24812],{"className":23811,"code":24811,"language":23813,"meta":20,"style":20},"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",[98,24813,24814,24821,24827,24833,24840,24846,24852],{"__ignoreMap":20},[101,24815,24816,24819],{"class":103,"line":104},[101,24817,24818],{"class":1950},"lerobot-teleoperate",[101,24820,24667],{"class":160},[101,24822,24823,24825],{"class":103,"line":21},[101,24824,24699],{"class":160},[101,24826,24667],{"class":160},[101,24828,24829,24831],{"class":103,"line":1166},[101,24830,24777],{"class":160},[101,24832,24667],{"class":160},[101,24834,24835,24838],{"class":103,"line":1181},[101,24836,24837],{"class":160},"  --robot.id=my_awesome_follower_arm",[101,24839,24667],{"class":160},[101,24841,24842,24844],{"class":103,"line":1187},[101,24843,24672],{"class":160},[101,24845,24667],{"class":160},[101,24847,24848,24850],{"class":103,"line":1201},[101,24849,24744],{"class":160},[101,24851,24667],{"class":160},[101,24853,24854],{"class":103,"line":1207},[101,24855,24751],{"class":160},[43,24857,24859],{"id":24858},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[92,24861,24863],{"className":23811,"code":24862,"language":23813,"meta":20,"style":20},"lerobot-find-cameras opencv\n",[98,24864,24865],{"__ignoreMap":20},[101,24866,24867,24870],{"class":103,"line":104},[101,24868,24869],{"class":1950},"lerobot-find-cameras",[101,24871,24872],{"class":216}," opencv\n",[92,24874,24876],{"className":23811,"code":24875,"language":23813,"meta":20,"style":20},"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",[98,24877,24878,24884,24890,24896,24902,24912,24918,24924,24931],{"__ignoreMap":20},[101,24879,24880,24882],{"class":103,"line":104},[101,24881,24818],{"class":1950},[101,24883,24667],{"class":160},[101,24885,24886,24888],{"class":103,"line":21},[101,24887,24699],{"class":160},[101,24889,24667],{"class":160},[101,24891,24892,24894],{"class":103,"line":1166},[101,24893,24777],{"class":160},[101,24895,24667],{"class":160},[101,24897,24898,24900],{"class":103,"line":1181},[101,24899,24837],{"class":160},[101,24901,24667],{"class":160},[101,24903,24904,24907,24910],{"class":103,"line":1187},[101,24905,24906],{"class":160},"  --robot.cameras=",[101,24908,24909],{"class":216},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[101,24911,24667],{"class":160},[101,24913,24914,24916],{"class":103,"line":1201},[101,24915,24672],{"class":160},[101,24917,24667],{"class":160},[101,24919,24920,24922],{"class":103,"line":1207},[101,24921,24744],{"class":160},[101,24923,24667],{"class":160},[101,24925,24926,24929],{"class":103,"line":1298},[101,24927,24928],{"class":160},"  --teleop.id=my_awesome_leader_arm",[101,24930,24667],{"class":160},[101,24932,24933],{"class":103,"line":1304},[101,24934,24935],{"class":160},"  --display_data=true\n",[10,24937,24938],{},"相机参数说明：",[1118,24940,24941,24947,24953,24962,24972,24978],{},[58,24942,24943,24946],{},[98,24944,24945],{},"front","：相机名称。",[58,24948,24949,24952],{},[98,24950,24951],{},"type: opencv","：相机驱动类型。",[58,24954,24955,24958,24959,24551],{},[98,24956,24957],{},"index_or_path","：设备编号或设备路径（如 ",[98,24960,24961],{},"\u002Fdev\u002Fvideo4",[58,24963,24964,24967,24968,24971],{},[98,24965,24966],{},"width"," \u002F ",[98,24969,24970],{},"height","：图像分辨率。",[58,24973,24974,24977],{},[98,24975,24976],{},"fps","：采样帧率。",[58,24979,24980,24983],{},[98,24981,24982],{},"--display_data=true","：启用实时可视化。",[5114,24985,24986],{},"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":20,"searchDepth":21,"depth":21,"links":24988},[24989,24990],{"id":24807,"depth":21,"text":24808},{"id":24858,"depth":21,"text":24859},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24799,"description":23365},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":24997,"title":24998,"body":24999,"description":23365,"extension":24,"meta":25171,"navigation":27,"path":25172,"seo":25173,"stem":25174,"__hash__":25175},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25000,"toc":25166},[25001,25005,25009,25014,25019,25022,25064,25070,25074,25123,25128,25132,25135,25143,25148,25153,25158,25163],[39,25002,25004],{"id":25003},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[43,25006,25008],{"id":25007},"_51-生成访问令牌","5.1 生成访问令牌",[10,25010,25011],{},[1449,25012],{"alt":20,"src":25013},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[10,25015,25016],{},[1449,25017],{"alt":20,"src":25018},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[10,25020,25021],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[92,25023,25025],{"className":23811,"code":25024,"language":23813,"meta":20,"style":20},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[98,25026,25027,25040],{"__ignoreMap":20},[101,25028,25029,25032,25035,25037],{"class":103,"line":104},[101,25030,25031],{"class":107},"export",[101,25033,25034],{"class":111}," HF_TOKEN",[101,25036,157],{"class":107},[101,25038,25039],{"class":216},"\"your_huggingface_token\"\n",[101,25041,25042,25045,25048,25051,25054,25056,25059,25061],{"class":103,"line":21},[101,25043,25044],{"class":1950},"hf",[101,25046,25047],{"class":216}," auth",[101,25049,25050],{"class":216}," login",[101,25052,25053],{"class":160}," --token",[101,25055,9712],{"class":216},[101,25057,25058],{"class":111},"$HF_TOKEN",[101,25060,362],{"class":216},[101,25062,25063],{"class":160}," --add-to-git-credential\n",[10,25065,25066,25069],{},[98,25067,25068],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[43,25071,25073],{"id":25072},"_52-验证登录","5.2 验证登录",[92,25075,25077],{"className":23811,"code":25076,"language":23813,"meta":20,"style":20},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[98,25078,25079,25110],{"__ignoreMap":20},[101,25080,25081,25084,25086,25089,25091,25093,25096,25099,25102,25105,25108],{"class":103,"line":104},[101,25082,25083],{"class":111},"HF_USER",[101,25085,157],{"class":107},[101,25087,25088],{"class":111},"$(",[101,25090,25044],{"class":1950},[101,25092,25047],{"class":216},[101,25094,25095],{"class":216}," whoami",[101,25097,25098],{"class":107}," |",[101,25100,25101],{"class":1950}," head",[101,25103,25104],{"class":160}," -n",[101,25106,25107],{"class":160}," 1",[101,25109,118],{"class":111},[101,25111,25112,25115,25117,25120],{"class":103,"line":21},[101,25113,25114],{"class":160},"echo",[101,25116,9712],{"class":216},[101,25118,25119],{"class":111},"$HF_USER",[101,25121,25122],{"class":216},"\"\n",[10,25124,25125],{},[1449,25126],{"alt":20,"src":25127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[43,25129,25131],{"id":25130},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[10,25133,25134],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1118,25136,25137,25140],{},[58,25138,25139],{},"Dataset Repo（用于上传演示数据）",[58,25141,25142],{},"Model Repo（用于上传训练后的 ACT 权重）",[10,25144,25145],{},[1449,25146],{"alt":20,"src":25147},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[10,25149,25150],{},[1449,25151],{"alt":20,"src":25152},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[10,25154,25155],{},[1449,25156],{"alt":20,"src":25157},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[10,25159,25160],{},[1449,25161],{"alt":20,"src":25162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5114,25164,25165],{},"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":20,"searchDepth":21,"depth":21,"links":25167},[25168,25169,25170],{"id":25007,"depth":21,"text":25008},{"id":25072,"depth":21,"text":25073},{"id":25130,"depth":21,"text":25131},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":24998,"description":23365},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25177,"title":25178,"body":25179,"description":23365,"extension":24,"meta":25376,"navigation":27,"path":25377,"seo":25378,"stem":25379,"__hash__":25380},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25180,"toc":25371},[25181,25185,25189,25285,25293,25298,25302,25318,25321,25325,25368],[39,25182,25184],{"id":25183},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[43,25186,25188],{"id":25187},"_61-录制示教数据","6.1 录制示教数据",[92,25190,25192],{"className":23811,"code":25191,"language":23813,"meta":20,"style":20},"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",[98,25193,25194,25201,25207,25213,25219,25228,25234,25240,25246,25253,25263,25270,25280],{"__ignoreMap":20},[101,25195,25196,25199],{"class":103,"line":104},[101,25197,25198],{"class":1950},"lerobot-record",[101,25200,24667],{"class":160},[101,25202,25203,25205],{"class":103,"line":21},[101,25204,24699],{"class":160},[101,25206,24667],{"class":160},[101,25208,25209,25211],{"class":103,"line":1166},[101,25210,24777],{"class":160},[101,25212,24667],{"class":160},[101,25214,25215,25217],{"class":103,"line":1181},[101,25216,24837],{"class":160},[101,25218,24667],{"class":160},[101,25220,25221,25223,25226],{"class":103,"line":1187},[101,25222,24906],{"class":160},[101,25224,25225],{"class":216},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[101,25227,24667],{"class":160},[101,25229,25230,25232],{"class":103,"line":1201},[101,25231,24672],{"class":160},[101,25233,24667],{"class":160},[101,25235,25236,25238],{"class":103,"line":1207},[101,25237,24744],{"class":160},[101,25239,24667],{"class":160},[101,25241,25242,25244],{"class":103,"line":1298},[101,25243,24928],{"class":160},[101,25245,24667],{"class":160},[101,25247,25248,25251],{"class":103,"line":1304},[101,25249,25250],{"class":160},"  --display_data=true",[101,25252,24667],{"class":160},[101,25254,25255,25258,25261],{"class":103,"line":1316},[101,25256,25257],{"class":160},"  --dataset.repo_id=",[101,25259,25260],{"class":216},"\"Embodied-AI-6\u002Fso101_test\"",[101,25262,24667],{"class":160},[101,25264,25265,25268],{"class":103,"line":1599},[101,25266,25267],{"class":160},"  --dataset.num_episodes=10",[101,25269,24667],{"class":160},[101,25271,25272,25275,25278],{"class":103,"line":1604},[101,25273,25274],{"class":160},"  --dataset.single_task=",[101,25276,25277],{"class":216},"\"Grab the green cube\"",[101,25279,24667],{"class":160},[101,25281,25282],{"class":103,"line":1610},[101,25283,25284],{"class":160},"  --resume=true\n",[1118,25286,25287],{},[58,25288,25289,25292],{},[98,25290,25291],{},"--resume=true","：已有同一数据集时继续追加 episode。",[10,25294,25295],{},[1449,25296],{"alt":20,"src":25297},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[43,25299,25301],{"id":25300},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[92,25303,25305],{"className":23811,"code":25304,"language":23813,"meta":20,"style":20},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[98,25306,25307],{"__ignoreMap":20},[101,25308,25309,25312,25315],{"class":103,"line":104},[101,25310,25311],{"class":1950},"rm",[101,25313,25314],{"class":160}," -rf",[101,25316,25317],{"class":216}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[10,25319,25320],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[43,25322,25324],{"id":25323},"_63-回放指定-episode","6.3 回放指定 episode",[92,25326,25328],{"className":23811,"code":25327,"language":23813,"meta":20,"style":20},"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",[98,25329,25330,25337,25343,25349,25355,25363],{"__ignoreMap":20},[101,25331,25332,25335],{"class":103,"line":104},[101,25333,25334],{"class":1950},"lerobot-replay",[101,25336,24667],{"class":160},[101,25338,25339,25341],{"class":103,"line":21},[101,25340,24699],{"class":160},[101,25342,24667],{"class":160},[101,25344,25345,25347],{"class":103,"line":1166},[101,25346,24777],{"class":160},[101,25348,24667],{"class":160},[101,25350,25351,25353],{"class":103,"line":1181},[101,25352,24837],{"class":160},[101,25354,24667],{"class":160},[101,25356,25357,25359,25361],{"class":103,"line":1187},[101,25358,25257],{"class":160},[101,25360,25260],{"class":216},[101,25362,24667],{"class":160},[101,25364,25365],{"class":103,"line":1201},[101,25366,25367],{"class":160},"  --dataset.episode=0\n",[5114,25369,25370],{},"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":20,"searchDepth":21,"depth":21,"links":25372},[25373,25374,25375],{"id":25187,"depth":21,"text":25188},{"id":25300,"depth":21,"text":25301},{"id":25323,"depth":21,"text":25324},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25178,"description":23365},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25382,"title":25383,"body":25384,"description":23365,"extension":24,"meta":25512,"navigation":27,"path":25513,"seo":25514,"stem":25515,"__hash__":25516},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25385,"toc":25510},[25386,25390,25453,25456,25503,25508],[39,25387,25389],{"id":25388},"_7-act-模型训练","7. ACT 模型训练",[92,25391,25393],{"className":23811,"code":25392,"language":23813,"meta":20,"style":20},"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",[98,25394,25395,25402,25410,25417,25424,25431,25438,25445],{"__ignoreMap":20},[101,25396,25397,25400],{"class":103,"line":104},[101,25398,25399],{"class":1950},"lerobot-train",[101,25401,24667],{"class":160},[101,25403,25404,25406,25408],{"class":103,"line":21},[101,25405,25257],{"class":160},[101,25407,25260],{"class":216},[101,25409,24667],{"class":160},[101,25411,25412,25415],{"class":103,"line":1166},[101,25413,25414],{"class":160},"  --policy.type=act",[101,25416,24667],{"class":160},[101,25418,25419,25422],{"class":103,"line":1181},[101,25420,25421],{"class":160},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[101,25423,24667],{"class":160},[101,25425,25426,25429],{"class":103,"line":1187},[101,25427,25428],{"class":160},"  --job_name=act_so101_test",[101,25430,24667],{"class":160},[101,25432,25433,25436],{"class":103,"line":1201},[101,25434,25435],{"class":160},"  --policy.device=cuda",[101,25437,24667],{"class":160},[101,25439,25440,25443],{"class":103,"line":1207},[101,25441,25442],{"class":160},"  --wandb.enable=false",[101,25444,24667],{"class":160},[101,25446,25447,25450],{"class":103,"line":1298},[101,25448,25449],{"class":160},"  --policy.repo_id=",[101,25451,25452],{"class":216},"\"Embodied-AI-6\u002Flerobot_new\"\n",[10,25454,25455],{},"参数说明：",[1118,25457,25458,25464,25470,25476,25482,25491,25497],{},[58,25459,25460,25463],{},[98,25461,25462],{},"--dataset.repo_id","：训练数据集仓库。",[58,25465,25466,25469],{},[98,25467,25468],{},"--policy.type=act","：策略模型类型为 ACT。",[58,25471,25472,25475],{},[98,25473,25474],{},"--output_dir","：本地训练输出目录。",[58,25477,25478,25481],{},[98,25479,25480],{},"--job_name","：训练任务名称。",[58,25483,25484,25487,25488,24551],{},[98,25485,25486],{},"--policy.device","：训练设备（如 ",[98,25489,25490],{},"cuda",[58,25492,25493,25496],{},[98,25494,25495],{},"--wandb.enable","：是否启用 WandB 可视化。",[58,25498,25499,25502],{},[98,25500,25501],{},"--policy.repo_id","：训练后模型推送目标仓库。",[10,25504,25505],{},[1449,25506],{"alt":20,"src":25507},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5114,25509,25370],{},{"title":20,"searchDepth":21,"depth":21,"links":25511},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25383,"description":23365},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25518,"title":25519,"body":25520,"description":23365,"extension":24,"meta":25607,"navigation":27,"path":25608,"seo":25609,"stem":25610,"__hash__":25611},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25521,"toc":25605},[25522,25525,25528,25595,25603],[39,25523,25519],{"id":25524},"_8-策略部署与自动采集",[10,25526,25527],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[92,25529,25531],{"className":23811,"code":25530,"language":23813,"meta":20,"style":20},"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",[98,25532,25533,25539,25545,25551,25559,25565,25572,25580,25588],{"__ignoreMap":20},[101,25534,25535,25537],{"class":103,"line":104},[101,25536,25198],{"class":1950},[101,25538,24667],{"class":160},[101,25540,25541,25543],{"class":103,"line":21},[101,25542,24699],{"class":160},[101,25544,24667],{"class":160},[101,25546,25547,25549],{"class":103,"line":1166},[101,25548,24777],{"class":160},[101,25550,24667],{"class":160},[101,25552,25553,25555,25557],{"class":103,"line":1181},[101,25554,24906],{"class":160},[101,25556,25225],{"class":216},[101,25558,24667],{"class":160},[101,25560,25561,25563],{"class":103,"line":1187},[101,25562,24837],{"class":160},[101,25564,24667],{"class":160},[101,25566,25567,25570],{"class":103,"line":1201},[101,25568,25569],{"class":160},"  --display_data=false",[101,25571,24667],{"class":160},[101,25573,25574,25576,25578],{"class":103,"line":1207},[101,25575,25257],{"class":160},[101,25577,25260],{"class":216},[101,25579,24667],{"class":160},[101,25581,25582,25584,25586],{"class":103,"line":1298},[101,25583,25274],{"class":160},[101,25585,25277],{"class":216},[101,25587,24667],{"class":160},[101,25589,25590,25593],{"class":103,"line":1304},[101,25591,25592],{"class":160},"  --policy.path=",[101,25594,25452],{"class":216},[1118,25596,25597],{},[58,25598,25599,25602],{},[98,25600,25601],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5114,25604,25370],{},{"title":20,"searchDepth":21,"depth":21,"links":25606},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25519,"description":23365},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25613,"title":25614,"body":25615,"description":23365,"extension":24,"meta":25644,"navigation":27,"path":25645,"seo":25646,"stem":25647,"__hash__":25648},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25616,"toc":25642},[25617,25621,25624,25630,25633,25639],[39,25618,25620],{"id":25619},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[10,25622,25623],{},"项目地址：",[10,25625,25626],{},[14,25627,25628],{"href":25628,"rel":25629},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[18],[10,25631,25632],{},"参考教程：",[10,25634,25635],{},[14,25636,25637],{"href":25637,"rel":25638},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[18],[10,25640,25641],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":20,"searchDepth":21,"depth":21,"links":25643},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25614,"description":23365},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25650,"title":25651,"body":25652,"description":25656,"extension":24,"meta":25657,"navigation":27,"path":25658,"seo":25659,"stem":25660,"__hash__":25661},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25653,"toc":25654},[],{"title":20,"searchDepth":21,"depth":21,"links":25655},[],"act复现",{"category":23367},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25651,"description":25656},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25663,"title":25664,"body":25665,"description":20,"extension":24,"meta":25967,"navigation":27,"path":25968,"seo":25969,"stem":25970,"__hash__":25971},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25666,"toc":25959},[25667,25670,25674,25684,25691,25698,25701,25708,25711,25714,25718,25730,25734,25780,25783,25786,25789,25792,25795,25799,25837,25843,25847,25901,25906,25909,25912,25917,25920,25925,25928,25931,25935,25938,25941,25945],[39,25668,25664],{"id":25669},"_1简介",[72,25671,25673],{"id":25672},"_11什么是-docker","1.1什么是 Docker？",[10,25675,25676,25677,25680,25681],{},"Docker 是一个开源的 ",[261,25678,25679],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[261,25682,25683],{},"一次构建，到处运行。",[10,25685,25686,25687,25690],{},"“ ",[261,25688,25689],{},"一次构建，到处运行"," ”也就是说：",[55,25692,25693],{},[58,25694,25695],{},[261,25696,25697],{},"之前：",[10,25699,25700],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[55,25702,25703],{},[58,25704,25705],{},[261,25706,25707],{},"使用docker后：",[10,25709,25710],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[10,25712,25713],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[72,25715,25717],{"id":25716},"_12它是怎么工作的","1.2.它是怎么工作的？",[1118,25719,25720,25723],{},[58,25721,25722],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[58,25724,25725,25726,25729],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[261,25727,25728],{},"无论在哪运行都一样稳定"," 。",[72,25731,25733],{"id":25732},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[249,25735,25736,25746],{},[252,25737,25738],{},[255,25739,25740,25743],{},[258,25741,25742],{"align":23725},"概念",[258,25744,25745],{"align":23725},"解释",[296,25747,25748,25756,25764,25772],{},[255,25749,25750,25753],{},[301,25751,25752],{"align":23725},"镜像",[301,25754,25755],{"align":23725},"Image，运行容器的模板，像是一个应用快照",[255,25757,25758,25761],{},[301,25759,25760],{"align":23725},"容器",[301,25762,25763],{"align":23725},"Container，运行中的镜像实例，有自己的文件系统、网络等",[255,25765,25766,25769],{},[301,25767,25768],{"align":23725},"Dockerfile",[301,25770,25771],{"align":23725},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[255,25773,25774,25777],{},[301,25775,25776],{"align":23725},"仓库",[301,25778,25779],{"align":23725},"Registry，存放镜像的地方，比如 Docker Hub",[10,25781,25782],{},"抽象化理解:",[10,25784,25785],{},"Docker镜像≈C++类",[10,25787,25788],{},"Docker容器≈C++类实例(即对象)",[10,25790,25791],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[10,25793,25794],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[72,25796,25798],{"id":25797},"_14类比理解","1.4.类比理解",[249,25800,25801,25811],{},[252,25802,25803],{},[255,25804,25805,25808],{},[258,25806,25807],{"align":23725},"传统部署",[258,25809,25810],{"align":23725},"Docker部署",[296,25812,25813,25821,25829],{},[255,25814,25815,25818],{},[301,25816,25817],{"align":23725},"手动安装依赖、调试版本不一致问题",[301,25819,25820],{"align":23725},"一次打包环境和代码",[255,25822,25823,25826],{},[301,25824,25825],{"align":23725},"程序“裸奔”跑在系统上",[301,25827,25828],{"align":23725},"程序“穿着容器”隔离运行",[255,25830,25831,25834],{},[301,25832,25833],{"align":23725},"容易“在我电脑上能跑”",[301,25835,25836],{"align":23725},"保证“无论在哪都能跑”",[10,25838,25839,25840],{},"就像快递包裹： ",[261,25841,25842],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[72,25844,25846],{"id":25845},"_15docker-的核心优势","1.5.Docker 的核心优势",[249,25848,25849,25859],{},[252,25850,25851],{},[255,25852,25853,25856],{},[258,25854,25855],{"align":23725},"优势",[258,25857,25858],{"align":23725},"说明",[296,25860,25861,25869,25877,25885,25893],{},[255,25862,25863,25866],{},[301,25864,25865],{"align":23725},"轻量级",[301,25867,25868],{"align":23725},"基于系统内核共享，启动速度快，占资源少",[255,25870,25871,25874],{},[301,25872,25873],{"align":23725},"跨平台",[301,25875,25876],{"align":23725},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[255,25878,25879,25882],{},[301,25880,25881],{"align":23725},"易于迁移部署",[301,25883,25884],{"align":23725},"应用和环境一起封装，不怕依赖不一致",[255,25886,25887,25890],{},[301,25888,25889],{"align":23725},"易于版本控制",[301,25891,25892],{"align":23725},"镜像版本可控，支持回滚",[255,25894,25895,25898],{},[301,25896,25897],{"align":23725},"生态丰富",[301,25899,25900],{"align":23725},"Docker Hub 上有成千上万的现成镜像可用",[55,25902,25903],{},[58,25904,25905],{},"在Linux上可以几乎实现无性能损失。",[10,25907,25908],{},"docker里的发行版和本机共用Linux内核。",[10,25910,25911],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[55,25913,25914],{},[58,25915,25916],{},"可以快速部署在绝大多数Linux发行版",[10,25918,25919],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[55,25921,25922],{},[58,25923,25924],{},"配置环境简单",[10,25926,25927],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[10,25929,25930],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[55,25932,25933],{},[58,25934,25897],{},[10,25936,25937],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[10,25939,25940],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[72,25942,25944],{"id":25943},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1118,25946,25947,25950,25953,25956],{},[58,25948,25949],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[58,25951,25952],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[58,25954,25955],{},"微服务架构：每个服务一个容器，灵活组合",[58,25957,25958],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":20,"searchDepth":21,"depth":21,"links":25960},[25961,25962,25963,25964,25965,25966],{"id":25672,"depth":1166,"text":25673},{"id":25716,"depth":1166,"text":25717},{"id":25732,"depth":1166,"text":25733},{"id":25797,"depth":1166,"text":25798},{"id":25845,"depth":1166,"text":25846},{"id":25943,"depth":1166,"text":25944},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25664,"description":20},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25973,"title":25974,"body":25975,"description":20,"extension":24,"meta":26708,"navigation":27,"path":26709,"seo":26710,"stem":26711,"__hash__":26712},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25976,"toc":26703},[25977,25980,25984,25987,25990,25996,26002,26006,26015,26018,26075,26078,26129,26132,26215,26218,26255,26259,26270,26283,26290,26293,26373,26376,26426,26429,26452,26456,26463,26466,26482,26488,26491,26507,26513,26516,26532,26546,26552,26572,26578,26581,26593,26599,26602,26616,26622,26625,26645,26650,26653,26656,26660,26663,26666,26669,26676,26679,26682,26685,26690,26695,26700],[39,25978,25974],{"id":25979},"_2安装docker",[72,25981,25983],{"id":25982},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[10,25985,25986],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[10,25988,25989],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[10,25991,25992],{},[14,25993,25994],{"href":25994,"rel":25995},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[18],[10,25997,25998],{},[14,25999,26000],{"href":26000,"rel":26001},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[18],[21986,26003,26005],{"id":26004},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[10,26007,26008,26009,26014],{},"以下内容根据 ",[14,26010,26013],{"href":26011,"rel":26012},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[18],"官方文档"," 修改而来。",[10,26016,26017],{},"如果你过去安装过 docker，先删掉：",[92,26019,26021],{"className":23811,"code":26020,"language":23813,"meta":20,"style":20},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[98,26022,26023],{"__ignoreMap":20},[101,26024,26025,26027,26030,26033,26036,26039,26042,26045,26048,26051,26054,26057,26060,26063,26066,26069,26072],{"class":103,"line":104},[101,26026,3012],{"class":107},[101,26028,26029],{"class":111}," pkg ",[101,26031,26032],{"class":107},"in",[101,26034,26035],{"class":216}," docker.io",[101,26037,26038],{"class":216}," docker-doc",[101,26040,26041],{"class":216}," docker-compose",[101,26043,26044],{"class":216}," docker-compose-v2",[101,26046,26047],{"class":216}," podman-docker",[101,26049,26050],{"class":216}," containerd",[101,26052,26053],{"class":216}," runc",[101,26055,26056],{"class":111},"; ",[101,26058,26059],{"class":107},"do",[101,26061,26062],{"class":1950}," sudo",[101,26064,26065],{"class":216}," apt-get",[101,26067,26068],{"class":216}," remove",[101,26070,26071],{"class":111}," $pkg; ",[101,26073,26074],{"class":107},"done\n",[10,26076,26077],{},"首先安装依赖和GPG：",[92,26079,26083],{"className":26080,"code":26081,"language":26082,"meta":20,"style":20},"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",[98,26084,26085,26090,26095,26100,26105,26110,26115,26119,26124],{"__ignoreMap":20},[101,26086,26087],{"class":103,"line":104},[101,26088,26089],{},"# Add Docker's official GPG key:\n",[101,26091,26092],{"class":103,"line":21},[101,26093,26094],{},"sudo apt-get update\n",[101,26096,26097],{"class":103,"line":1166},[101,26098,26099],{},"sudo apt-get install ca-certificates curl\n",[101,26101,26102],{"class":103,"line":1181},[101,26103,26104],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[101,26106,26107],{"class":103,"line":1187},[101,26108,26109],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[101,26111,26112],{"class":103,"line":1201},[101,26113,26114],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[101,26116,26117],{"class":103,"line":1207},[101,26118,2387],{"emptyLinePlaceholder":27},[101,26120,26121],{"class":103,"line":1298},[101,26122,26123],{},"# 如果上面这行报错就弄下面这行\n",[101,26125,26126],{"class":103,"line":1304},[101,26127,26128],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[10,26130,26131],{},"信任 Docker 的 GPG 公钥并添加仓库：",[92,26133,26135],{"className":23811,"code":26134,"language":23813,"meta":20,"style":20},"# 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",[98,26136,26137,26142,26148,26165,26198],{"__ignoreMap":20},[101,26138,26139],{"class":103,"line":104},[101,26140,26141],{"class":170},"# Add the repository to Apt sources:\n",[101,26143,26144,26146],{"class":103,"line":21},[101,26145,25114],{"class":160},[101,26147,24667],{"class":160},[101,26149,26150,26153,26156,26159,26162],{"class":103,"line":1166},[101,26151,26152],{"class":216},"  \"deb [arch=$(",[101,26154,26155],{"class":1950},"dpkg",[101,26157,26158],{"class":160}," --print-architecture",[101,26160,26161],{"class":216},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[101,26163,26164],{"class":160},"\\\n",[101,26166,26167,26170,26172,26174,26177,26180,26182,26184,26187,26189,26191,26194,26196],{"class":103,"line":1181},[101,26168,26169],{"class":216},"  \"",[101,26171,25088],{"class":111},[101,26173,669],{"class":160},[101,26175,26176],{"class":216}," \u002Fetc\u002Fos-release",[101,26178,26179],{"class":111}," && ",[101,26181,25114],{"class":160},[101,26183,9712],{"class":216},[101,26185,26186],{"class":111},"$VERSION_CODENAME",[101,26188,362],{"class":216},[101,26190,540],{"class":111},[101,26192,26193],{"class":216},"\" stable\"",[101,26195,25098],{"class":107},[101,26197,24667],{"class":160},[101,26199,26200,26203,26206,26209,26212],{"class":103,"line":1187},[101,26201,26202],{"class":1950},"  sudo",[101,26204,26205],{"class":216}," tee",[101,26207,26208],{"class":216}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[101,26210,26211],{"class":107}," >",[101,26213,26214],{"class":216}," \u002Fdev\u002Fnull\n",[10,26216,26217],{},"最后安装",[92,26219,26221],{"className":23811,"code":26220,"language":23813,"meta":20,"style":20},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[98,26222,26223,26232],{"__ignoreMap":20},[101,26224,26225,26227,26229],{"class":103,"line":104},[101,26226,24565],{"class":1950},[101,26228,26065],{"class":216},[101,26230,26231],{"class":216}," update\n",[101,26233,26234,26236,26238,26240,26243,26246,26249,26252],{"class":103,"line":21},[101,26235,24565],{"class":1950},[101,26237,26065],{"class":216},[101,26239,23823],{"class":216},[101,26241,26242],{"class":216}," docker-ce",[101,26244,26245],{"class":216}," docker-ce-cli",[101,26247,26248],{"class":216}," containerd.io",[101,26250,26251],{"class":216}," docker-buildx-plugin",[101,26253,26254],{"class":216}," docker-compose-plugin\n",[21986,26256,26258],{"id":26257},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[10,26260,26261,26262,26265,26266,26269],{},"查看自己自己包管理工具版本（dnf是 ",[261,26263,26264],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[261,26267,26268],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[92,26271,26273],{"className":23811,"code":26272,"language":23813,"meta":20,"style":20},"dnf --version\n",[98,26274,26275],{"__ignoreMap":20},[101,26276,26277,26280],{"class":103,"line":104},[101,26278,26279],{"class":1950},"dnf",[101,26281,26282],{"class":160}," --version\n",[10,26284,26008,26285,26289],{},[14,26286,26013],{"href":26287,"rel":26288},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[18]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[10,26291,26292],{},"如果你之前安装过 docker，请先删掉",[92,26294,26296],{"className":23811,"code":26295,"language":23813,"meta":20,"style":20},"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",[98,26297,26298,26312,26319,26326,26333,26340,26347,26354,26361,26368],{"__ignoreMap":20},[101,26299,26300,26302,26305,26307,26310],{"class":103,"line":104},[101,26301,24565],{"class":1950},[101,26303,26304],{"class":216}," dnf",[101,26306,26068],{"class":216},[101,26308,26309],{"class":216}," docker",[101,26311,24667],{"class":160},[101,26313,26314,26317],{"class":103,"line":21},[101,26315,26316],{"class":216},"                  docker-client",[101,26318,24667],{"class":160},[101,26320,26321,26324],{"class":103,"line":1166},[101,26322,26323],{"class":216},"                  docker-client-latest",[101,26325,24667],{"class":160},[101,26327,26328,26331],{"class":103,"line":1181},[101,26329,26330],{"class":216},"                  docker-common",[101,26332,24667],{"class":160},[101,26334,26335,26338],{"class":103,"line":1187},[101,26336,26337],{"class":216},"                  docker-latest",[101,26339,24667],{"class":160},[101,26341,26342,26345],{"class":103,"line":1201},[101,26343,26344],{"class":216},"                  docker-latest-logrotate",[101,26346,24667],{"class":160},[101,26348,26349,26352],{"class":103,"line":1207},[101,26350,26351],{"class":216},"                  docker-logrotate",[101,26353,24667],{"class":160},[101,26355,26356,26359],{"class":103,"line":1298},[101,26357,26358],{"class":216},"                  docker-selinux",[101,26360,24667],{"class":160},[101,26362,26363,26366],{"class":103,"line":1304},[101,26364,26365],{"class":216},"                  docker-engine-selinux",[101,26367,24667],{"class":160},[101,26369,26370],{"class":103,"line":1316},[101,26371,26372],{"class":216},"                  docker-engine\n",[10,26374,26375],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[92,26377,26379],{"className":23811,"code":26378,"language":23813,"meta":20,"style":20},"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",[98,26380,26381,26395,26410],{"__ignoreMap":20},[101,26382,26383,26385,26387,26390,26392],{"class":103,"line":104},[101,26384,24565],{"class":1950},[101,26386,26304],{"class":216},[101,26388,26389],{"class":160}," -y",[101,26391,23823],{"class":216},[101,26393,26394],{"class":216}," dnf-plugins-core\n",[101,26396,26397,26399,26401,26404,26407],{"class":103,"line":21},[101,26398,24565],{"class":1950},[101,26400,26304],{"class":216},[101,26402,26403],{"class":216}," config-manager",[101,26405,26406],{"class":216}," addrepo",[101,26408,26409],{"class":160}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[101,26411,26412,26414,26417,26420,26423],{"class":103,"line":1166},[101,26413,24565],{"class":1950},[101,26415,26416],{"class":216}," sed",[101,26418,26419],{"class":160}," -i",[101,26421,26422],{"class":216}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[101,26424,26425],{"class":216}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[10,26427,26428],{},"最后安装：",[92,26430,26432],{"className":23811,"code":26431,"language":23813,"meta":20,"style":20},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[98,26433,26434],{"__ignoreMap":20},[101,26435,26436,26438,26440,26442,26444,26446,26448,26450],{"class":103,"line":104},[101,26437,24565],{"class":1950},[101,26439,26304],{"class":216},[101,26441,23823],{"class":216},[101,26443,26242],{"class":216},[101,26445,26245],{"class":216},[101,26447,26248],{"class":216},[101,26449,26251],{"class":216},[101,26451,26254],{"class":216},[72,26453,26455],{"id":26454},"_22配置环境","2.2.配置环境",[21986,26457,26459,26462],{"id":26458},"_221检查-docker-服务状态",[261,26460,26461],{},"2.2.1.检查 Docker 服务状态"," ：",[10,26464,26465],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[92,26467,26469],{"className":23811,"code":26468,"language":23813,"meta":20,"style":20},"systemctl status docker\n",[98,26470,26471],{"__ignoreMap":20},[101,26472,26473,26476,26479],{"class":103,"line":104},[101,26474,26475],{"class":1950},"systemctl",[101,26477,26478],{"class":216}," status",[101,26480,26481],{"class":216}," docker\n",[21986,26483,26485,26462],{"id":26484},"_222启动-docker-服务",[261,26486,26487],{},"2.2.2.启动 Docker 服务",[10,26489,26490],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[92,26492,26494],{"className":23811,"code":26493,"language":23813,"meta":20,"style":20},"sudo systemctl start docker\n",[98,26495,26496],{"__ignoreMap":20},[101,26497,26498,26500,26503,26505],{"class":103,"line":104},[101,26499,24565],{"class":1950},[101,26501,26502],{"class":216}," systemctl",[101,26504,4171],{"class":216},[101,26506,26481],{"class":216},[21986,26508,26510,26462],{"id":26509},"_223设置-docker-开机自启",[261,26511,26512],{},"2.2.3.设置 Docker 开机自启",[10,26514,26515],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[92,26517,26519],{"className":23811,"code":26518,"language":23813,"meta":20,"style":20},"sudo systemctl enable docker\n",[98,26520,26521],{"__ignoreMap":20},[101,26522,26523,26525,26527,26530],{"class":103,"line":104},[101,26524,24565],{"class":1950},[101,26526,26502],{"class":216},[101,26528,26529],{"class":216}," enable",[101,26531,26481],{"class":216},[21986,26533,26535,13783,26538,13783,26543,26462],{"id":26534},"_224将用户添加到-docker-组",[261,26536,26537],{},"2.2.4.将用户添加到",[261,26539,26540],{},[98,26541,26542],{},"docker",[261,26544,26545],{},"组",[10,26547,26548,26549,26551],{},"使用以下命令将当前用户添加到 ",[98,26550,26542],{}," 组：",[92,26553,26555],{"className":23811,"code":26554,"language":23813,"meta":20,"style":20},"sudo usermod -aG docker $USER\n",[98,26556,26557],{"__ignoreMap":20},[101,26558,26559,26561,26564,26567,26569],{"class":103,"line":104},[101,26560,24565],{"class":1950},[101,26562,26563],{"class":216}," usermod",[101,26565,26566],{"class":160}," -aG",[101,26568,26309],{"class":216},[101,26570,26571],{"class":111}," $USER\n",[21986,26573,26575,26462],{"id":26574},"_225退出并重新登录",[261,26576,26577],{},"2.2.5.退出并重新登录",[10,26579,26580],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[92,26582,26584],{"className":23811,"code":26583,"language":23813,"meta":20,"style":20},"newgrp docker\n",[98,26585,26586],{"__ignoreMap":20},[101,26587,26588,26591],{"class":103,"line":104},[101,26589,26590],{"class":1950},"newgrp",[101,26592,26481],{"class":216},[21986,26594,26596,26462],{"id":26595},"_226重新启动-docker-服务如果需要",[261,26597,26598],{},"2.2.6.重新启动 Docker 服务（如果需要）",[10,26600,26601],{},"确保 Docker 服务正在运行，可以使用以下命令：",[92,26603,26604],{"className":23811,"code":26493,"language":23813,"meta":20,"style":20},[98,26605,26606],{"__ignoreMap":20},[101,26607,26608,26610,26612,26614],{"class":103,"line":104},[101,26609,24565],{"class":1950},[101,26611,26502],{"class":216},[101,26613,4171],{"class":216},[101,26615,26481],{"class":216},[21986,26617,26619,26462],{"id":26618},"_227重启电脑后检查-docker-服务状态",[261,26620,26621],{},"2.2.7.重启电脑后检查 Docker 服务状态",[10,26623,26624],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[92,26626,26628],{"className":23811,"code":26627,"language":23813,"meta":20,"style":20},"sudo reboot\nsystemctl status docker\n",[98,26629,26630,26637],{"__ignoreMap":20},[101,26631,26632,26634],{"class":103,"line":104},[101,26633,24565],{"class":1950},[101,26635,26636],{"class":216}," reboot\n",[101,26638,26639,26641,26643],{"class":103,"line":21},[101,26640,26475],{"class":1950},[101,26642,26478],{"class":216},[101,26644,26481],{"class":216},[10,26646,26647],{},[1449,26648],{"alt":20,"src":26649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[10,26651,26652],{},"第三行显示enabled说明开机自启动成功",[10,26654,26655],{},"按q退出",[72,26657,26659],{"id":26658},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[10,26661,26662],{},"优先使用linux来使用docker是比较好的",[10,26664,26665],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[10,26667,26668],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[10,26670,26671,26672],{},"官方下载安装:",[14,26673,26674],{"href":26674,"rel":26675},"https:\u002F\u002Fwww.docker.com\u002F",[18],[10,26677,26678],{},"Windows的Docker显卡直通与USB直通:",[10,26680,26681],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[10,26683,26684],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[10,26686,26687],{},[1449,26688],{"alt":20,"src":26689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[10,26691,26692],{},[1449,26693],{"alt":20,"src":26694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[10,26696,26697],{},[1449,26698],{"alt":20,"src":26699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5114,26701,26702],{},"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":20,"searchDepth":21,"depth":21,"links":26704},[26705,26706,26707],{"id":25982,"depth":1166,"text":25983},{"id":26454,"depth":1166,"text":26455},{"id":26658,"depth":1166,"text":26659},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25974,"description":20},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26714,"title":26715,"body":26716,"description":26723,"extension":24,"meta":27416,"navigation":27,"path":27417,"seo":27418,"stem":27419,"__hash__":27420},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26717,"toc":27410},[26718,26721,26724,26728,26733,26738,26741,26769,26774,26783,26786,26791,26795,26802,26807,26813,26817,26820,26824,26829,26921,26926,26944,26949,26970,26975,26991,26995,27000,27029,27034,27080,27085,27129,27137,27154,27159,27175,27180,27194,27197,27200,27203,27206,27235,27238,27243,27247,27250,27253,27259,27262,27265,27268,27330,27337,27342,27345,27363,27367,27370,27387,27390,27393,27407],[39,26719,26715],{"id":26720},"_3docker直通",[10,26722,26723],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[72,26725,26727],{"id":26726},"_31usb直通","3.1.USB直通",[10,26729,26730],{},[1449,26731],{"alt":20,"src":26732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[55,26734,26735],{},[58,26736,26737],{},"方法一(不是很推荐新手)：",[10,26739,26740],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[92,26742,26744],{"className":23811,"code":26743,"language":23813,"meta":20,"style":20},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[98,26745,26746,26754,26759],{"__ignoreMap":20},[101,26747,26748,26751],{"class":103,"line":104},[101,26749,26750],{"class":1950},"ls",[101,26752,26753],{"class":216}," \u002Fdev\n",[101,26755,26756],{"class":103,"line":21},[101,26757,26758],{"class":170},"#例如\n",[101,26760,26761,26764,26766],{"class":103,"line":1166},[101,26762,26763],{"class":111},"--device",[101,26765,157],{"class":107},[101,26767,26768],{"class":216},"\u002Fdev\u002Ftty_USB0\n",[55,26770,26771],{"start":21},[58,26772,26773],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[92,26775,26777],{"className":23811,"code":26776,"language":23813,"meta":20,"style":20},"--privileged\n",[98,26778,26779],{"__ignoreMap":20},[101,26780,26781],{"class":103,"line":104},[101,26782,26776],{"class":1950},[10,26784,26785],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[10,26787,26788],{},[1449,26789],{"alt":20,"src":26790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[72,26792,26794],{"id":26793},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[10,26796,26797,26798,26801],{},"NVIDIA Container Toolkit使用户 ",[261,26799,26800],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[10,26803,26804],{},[1449,26805],{"alt":20,"src":26806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[10,26808,26809],{},[14,26810,26811],{"href":26811,"rel":26812},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[18],[21986,26814,26816],{"id":26815},"_321安装","3.2.1.安装",[10,26818,26819],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22898,26821,26823],{"id":26822},"_3211ubuntu","3.2.1.1.Ubuntu",[55,26825,26826],{},[58,26827,26828],{},"配置存储库 并更新",[92,26830,26832],{"className":23811,"code":26831,"language":23813,"meta":20,"style":20},"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",[98,26833,26834,26863,26883,26895,26907,26913],{"__ignoreMap":20},[101,26835,26836,26839,26842,26845,26847,26849,26852,26855,26858,26861],{"class":103,"line":104},[101,26837,26838],{"class":1950},"curl",[101,26840,26841],{"class":160}," -fsSL",[101,26843,26844],{"class":216}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[101,26846,25098],{"class":107},[101,26848,26062],{"class":1950},[101,26850,26851],{"class":216}," gpg",[101,26853,26854],{"class":160}," --dearmor",[101,26856,26857],{"class":160}," -o",[101,26859,26860],{"class":216}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[101,26862,24667],{"class":160},[101,26864,26865,26868,26870,26873,26876,26879,26881],{"class":103,"line":21},[101,26866,26867],{"class":111},"  && ",[101,26869,26838],{"class":1950},[101,26871,26872],{"class":160}," -s",[101,26874,26875],{"class":160}," -L",[101,26877,26878],{"class":216}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[101,26880,25098],{"class":107},[101,26882,24667],{"class":160},[101,26884,26885,26888,26891,26893],{"class":103,"line":1166},[101,26886,26887],{"class":1950},"    sed",[101,26889,26890],{"class":216}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[101,26892,25098],{"class":107},[101,26894,24667],{"class":160},[101,26896,26897,26900,26902,26905],{"class":103,"line":1181},[101,26898,26899],{"class":1950},"    sudo",[101,26901,26205],{"class":216},[101,26903,26904],{"class":216}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[101,26906,24667],{"class":160},[101,26908,26909,26911],{"class":103,"line":1187},[101,26910,26867],{"class":111},[101,26912,26164],{"class":160},[101,26914,26915,26917,26919],{"class":103,"line":1201},[101,26916,26899],{"class":1950},[101,26918,26065],{"class":216},[101,26920,26231],{"class":216},[55,26922,26923],{"start":21},[58,26924,26925],{},"安装nvidia-docker2",[92,26927,26929],{"className":23811,"code":26928,"language":23813,"meta":20,"style":20},"sudo apt-get install -y nvidia-docker2\n",[98,26930,26931],{"__ignoreMap":20},[101,26932,26933,26935,26937,26939,26941],{"class":103,"line":104},[101,26934,24565],{"class":1950},[101,26936,26065],{"class":216},[101,26938,23823],{"class":216},[101,26940,26389],{"class":160},[101,26942,26943],{"class":216}," nvidia-docker2\n",[55,26945,26946],{"start":1166},[58,26947,26948],{},"使用nvidia-ctk命令配置container runtime",[92,26950,26952],{"className":23811,"code":26951,"language":23813,"meta":20,"style":20},"sudo nvidia-ctk runtime configure --runtime=docker\n",[98,26953,26954],{"__ignoreMap":20},[101,26955,26956,26958,26961,26964,26967],{"class":103,"line":104},[101,26957,24565],{"class":1950},[101,26959,26960],{"class":216}," nvidia-ctk",[101,26962,26963],{"class":216}," runtime",[101,26965,26966],{"class":216}," configure",[101,26968,26969],{"class":160}," --runtime=docker\n",[55,26971,26972],{"start":1181},[58,26973,26974],{},"重启docker服务:",[92,26976,26978],{"className":23811,"code":26977,"language":23813,"meta":20,"style":20},"sudo systemctl restart docker\n",[98,26979,26980],{"__ignoreMap":20},[101,26981,26982,26984,26986,26989],{"class":103,"line":104},[101,26983,24565],{"class":1950},[101,26985,26502],{"class":216},[101,26987,26988],{"class":216}," restart",[101,26990,26481],{"class":216},[22898,26992,26994],{"id":26993},"_3212fedora","3.2.1.2.Fedora",[55,26996,26997],{},[58,26998,26999],{},"配置存储库",[92,27001,27003],{"className":23811,"code":27002,"language":23813,"meta":20,"style":20},"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",[98,27004,27005,27020],{"__ignoreMap":20},[101,27006,27007,27009,27011,27013,27016,27018],{"class":103,"line":104},[101,27008,26838],{"class":1950},[101,27010,26872],{"class":160},[101,27012,26875],{"class":160},[101,27014,27015],{"class":216}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[101,27017,25098],{"class":107},[101,27019,24667],{"class":160},[101,27021,27022,27024,27026],{"class":103,"line":21},[101,27023,24565],{"class":1950},[101,27025,26205],{"class":216},[101,27027,27028],{"class":216}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[55,27030,27031],{"start":21},[58,27032,27033],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[92,27035,27037],{"className":23811,"code":27036,"language":23813,"meta":20,"style":20},"# 如果是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",[98,27038,27039,27044,27058,27062,27067],{"__ignoreMap":20},[101,27040,27041],{"class":103,"line":104},[101,27042,27043],{"class":170},"# 如果是RHEL或者Rocky（DNF4）\n",[101,27045,27046,27048,27050,27052,27055],{"class":103,"line":21},[101,27047,24565],{"class":1950},[101,27049,26304],{"class":216},[101,27051,26403],{"class":216},[101,27053,27054],{"class":160}," --add-repo",[101,27056,27057],{"class":216}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[101,27059,27060],{"class":103,"line":1166},[101,27061,2387],{"emptyLinePlaceholder":27},[101,27063,27064],{"class":103,"line":1181},[101,27065,27066],{"class":170},"# 如果是Feodra41+（DNF5）\n",[101,27068,27069,27071,27073,27075,27077],{"class":103,"line":1187},[101,27070,24565],{"class":1950},[101,27072,26304],{"class":216},[101,27074,26403],{"class":216},[101,27076,26406],{"class":216},[101,27078,27079],{"class":160}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[55,27081,27082],{"start":1166},[58,27083,27084],{},"安装NVIDIA Container Toolki包",[92,27086,27088],{"className":23811,"code":27087,"language":23813,"meta":20,"style":20},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[98,27089,27090,27095,27108,27112,27117],{"__ignoreMap":20},[101,27091,27092],{"class":103,"line":104},[101,27093,27094],{"class":170},"# 如果是RHEL或者Rocky\n",[101,27096,27097,27099,27101,27103,27105],{"class":103,"line":21},[101,27098,24565],{"class":1950},[101,27100,26304],{"class":216},[101,27102,23823],{"class":216},[101,27104,26389],{"class":160},[101,27106,27107],{"class":216}," nvidia-container-toolkit\n",[101,27109,27110],{"class":103,"line":1166},[101,27111,2387],{"emptyLinePlaceholder":27},[101,27113,27114],{"class":103,"line":1181},[101,27115,27116],{"class":170},"# 如果是Fedora\n",[101,27118,27119,27121,27123,27125,27127],{"class":103,"line":1187},[101,27120,24565],{"class":1950},[101,27122,26304],{"class":216},[101,27124,23823],{"class":216},[101,27126,26389],{"class":160},[101,27128,27107],{"class":216},[55,27130,27131],{"start":1181},[58,27132,27133,27134,27136],{},"安装nvidia-docker2 ： 在Fedora上使用",[98,27135,26279],{},"进行安装",[92,27138,27140],{"className":23811,"code":27139,"language":23813,"meta":20,"style":20},"sudo dnf install -y nvidia-docker2\n",[98,27141,27142],{"__ignoreMap":20},[101,27143,27144,27146,27148,27150,27152],{"class":103,"line":104},[101,27145,24565],{"class":1950},[101,27147,26304],{"class":216},[101,27149,23823],{"class":216},[101,27151,26389],{"class":160},[101,27153,26943],{"class":216},[55,27155,27156],{"start":1187},[58,27157,27158],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[92,27160,27161],{"className":23811,"code":26951,"language":23813,"meta":20,"style":20},[98,27162,27163],{"__ignoreMap":20},[101,27164,27165,27167,27169,27171,27173],{"class":103,"line":104},[101,27166,24565],{"class":1950},[101,27168,26960],{"class":216},[101,27170,26963],{"class":216},[101,27172,26966],{"class":216},[101,27174,26969],{"class":160},[55,27176,27177],{"start":1201},[58,27178,27179],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[92,27181,27182],{"className":23811,"code":26977,"language":23813,"meta":20,"style":20},[98,27183,27184],{"__ignoreMap":20},[101,27185,27186,27188,27190,27192],{"class":103,"line":104},[101,27187,24565],{"class":1950},[101,27189,26502],{"class":216},[101,27191,26988],{"class":216},[101,27193,26481],{"class":216},[10,27195,27196],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[10,27198,27199],{},"方法：",[10,27201,27202],{},"1️⃣nvidia-smi",[10,27204,27205],{},"2️⃣运行nvidia cuda 容器进行测试",[92,27207,27209],{"className":23811,"code":27208,"language":23813,"meta":20,"style":20},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[98,27210,27211],{"__ignoreMap":20},[101,27212,27213,27215,27217,27220,27223,27226,27229,27232],{"class":103,"line":104},[101,27214,24565],{"class":1950},[101,27216,26309],{"class":216},[101,27218,27219],{"class":216}," run",[101,27221,27222],{"class":160}," --rm",[101,27224,27225],{"class":160}," --gpus",[101,27227,27228],{"class":216}," all",[101,27230,27231],{"class":216}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[101,27233,27234],{"class":216}," nvidia-smi\n",[10,27236,27237],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[10,27239,27240],{},[1449,27241],{"alt":20,"src":27242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[72,27244,27246],{"id":27245},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[10,27248,27249],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[10,27251,27252],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[10,27254,27255],{},[14,27256,27257],{"href":27257,"rel":27258},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[18],[10,27260,27261],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[10,27263,27264],{},"我们只需要找到对应的Docker镜像当底包即可。",[10,27266,27267],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[249,27269,27270,27286],{},[252,27271,27272],{},[255,27273,27274,27277,27280,27283],{},[258,27275,27276],{"align":23725},"镜像类型",[258,27278,27279],{"align":23725},"适用场景",[258,27281,27282],{"align":23725},"示例标签",[258,27284,27285],{"align":23725},"大小",[296,27287,27288,27302,27316],{},[255,27289,27290,27293,27296,27299],{},[301,27291,27292],{"align":23725},"base",[301,27294,27295],{"align":23725},"仅需 CUDA 运行时库",[301,27297,27298],{"align":23725},"12.4.0-base-ubuntu22.04",[301,27300,27301],{"align":23725},"~240MB",[255,27303,27304,27307,27310,27313],{},[301,27305,27306],{"align":23725},"runtime",[301,27308,27309],{"align":23725},"部署编译后的应用（含数学库）",[301,27311,27312],{"align":23725},"12.4.0-runtime-ubuntu22.04",[301,27314,27315],{"align":23725},"~2GB",[255,27317,27318,27321,27324,27327],{},[301,27319,27320],{"align":23725},"devel",[301,27322,27323],{"align":23725},"开发环境（含编译工具）",[301,27325,27326],{"align":23725},"12.4.0-devel-ubuntu22.04",[301,27328,27329],{"align":23725},"~3GB",[10,27331,27332,27333,27336],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[98,27334,27335],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[10,27338,27339],{},[1449,27340],{"alt":20,"src":27341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[10,27343,27344],{},"在dockerfile里就可以开头这么写：",[92,27346,27348],{"className":23811,"code":27347,"language":23813,"meta":20,"style":20},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[98,27349,27350,27355],{"__ignoreMap":20},[101,27351,27352],{"class":103,"line":104},[101,27353,27354],{"class":170},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[101,27356,27357,27360],{"class":103,"line":21},[101,27358,27359],{"class":1950},"FROM",[101,27361,27362],{"class":216}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[72,27364,27366],{"id":27365},"_34配置以太网","3.4.配置以太网",[10,27368,27369],{},"指定网络模式",[92,27371,27373],{"className":23811,"code":27372,"language":23813,"meta":20,"style":20},"--net=host \\\n",[98,27374,27375],{"__ignoreMap":20},[101,27376,27377,27380,27382,27385],{"class":103,"line":104},[101,27378,27379],{"class":111},"--net",[101,27381,157],{"class":107},[101,27383,27384],{"class":216},"host",[101,27386,24667],{"class":1950},[10,27388,27389],{},"启动参数里加上这行即可。具体在下方",[10,27391,27392],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1118,27394,27395,27398,27401,27404],{},[58,27396,27397],{},"--net=bridge:默认选项，表示连接到默认的网桥",[58,27399,27400],{},"--net=host:容器使用宿主机的网络",[58,27402,27403],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[58,27405,27406],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5114,27408,27409],{},"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":20,"searchDepth":21,"depth":21,"links":27411},[27412,27413,27414,27415],{"id":26726,"depth":1166,"text":26727},{"id":26793,"depth":1166,"text":26794},{"id":27245,"depth":1166,"text":27246},{"id":27365,"depth":1166,"text":27366},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26715,"description":26723},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27422,"title":27423,"body":27424,"description":27431,"extension":24,"meta":27437,"navigation":27,"path":27438,"seo":27439,"stem":27440,"__hash__":27441},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27425,"toc":27435},[27426,27429,27432],[39,27427,27423],{"id":27428},"_4dockerhub换源",[10,27430,27431],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[10,27433,27434],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":20,"searchDepth":21,"depth":21,"links":27436},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27423,"description":27431},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27443,"title":27444,"body":27445,"description":20,"extension":24,"meta":28457,"navigation":27,"path":28458,"seo":28459,"stem":28460,"__hash__":28461},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27446,"toc":28452},[27447,27450,27454,27460,27464,27467,27807,27810,27813,27816,27821,27826,27829,27832,27835,27838,27857,27860,27871,27877,28059,28069,28085,28348,28350,28375,28390,28399,28449],[39,27448,27444],{"id":27449},"_5docker命令学习",[72,27451,27453],{"id":27452},"_51参考文档","5.1.参考文档",[10,27455,27456],{},[14,27457,27458],{"href":27458,"rel":27459},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[18],[72,27461,27463],{"id":27462},"_52常用命令","5.2.常用命令",[10,27465,27466],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[249,27468,27469,27482],{},[252,27470,27471],{},[255,27472,27473,27476,27479],{},[258,27474,27475],{"align":23725},"命令",[258,27477,27478],{"align":23725},"描述",[258,27480,27481],{"align":23725},"示例",[296,27483,27484,27495,27506,27517,27528,27539,27550,27561,27571,27582,27593,27604,27614,27625,27636,27647,27657,27667,27677,27687,27698,27709,27720,27731,27742,27753,27763,27774,27785,27796],{},[255,27485,27486,27489,27492],{},[301,27487,27488],{"align":23725},"docker run",[301,27490,27491],{"align":23725},"创建并启动一个新的容器。",[301,27493,27494],{"align":23725},"docker run -it ubuntu bash",[255,27496,27497,27500,27503],{},[301,27498,27499],{"align":23725},"docker build",[301,27501,27502],{"align":23725},"通过指定的 Dockerfile 创建一个新的镜像。",[301,27504,27505],{"align":23725},"docker build -t myimage .",[255,27507,27508,27511,27514],{},[301,27509,27510],{"align":23725},"docker pull",[301,27512,27513],{"align":23725},"从 Docker 仓库拉取镜像。",[301,27515,27516],{"align":23725},"docker pull ubuntu",[255,27518,27519,27522,27525],{},[301,27520,27521],{"align":23725},"docker push",[301,27523,27524],{"align":23725},"将本地镜像推送到 Docker 仓库。",[301,27526,27527],{"align":23725},"docker push myimage",[255,27529,27530,27533,27536],{},[301,27531,27532],{"align":23725},"docker stop",[301,27534,27535],{"align":23725},"停止一个正在运行的容器。",[301,27537,27538],{"align":23725},"docker stop container_id",[255,27540,27541,27544,27547],{},[301,27542,27543],{"align":23725},"docker start",[301,27545,27546],{"align":23725},"启动一个已经存在的容器。",[301,27548,27549],{"align":23725},"docker start container_id",[255,27551,27552,27555,27558],{},[301,27553,27554],{"align":23725},"docker restart",[301,27556,27557],{"align":23725},"重新启动容器。",[301,27559,27560],{"align":23725},"docker restart container_id",[255,27562,27563,27566,27569],{},[301,27564,27565],{"align":23725},"docker ps",[301,27567,27568],{"align":23725},"列出当前正在运行的容器。",[301,27570,27565],{"align":23725},[255,27572,27573,27576,27579],{},[301,27574,27575],{"align":23725},"docker rm",[301,27577,27578],{"align":23725},"删除一个或多个停止的容器。",[301,27580,27581],{"align":23725},"docker rm container_id",[255,27583,27584,27587,27590],{},[301,27585,27586],{"align":23725},"docker exec",[301,27588,27589],{"align":23725},"在一个正在运行的容器中执行命令。",[301,27591,27592],{"align":23725},"docker exec -it container_id bash",[255,27594,27595,27598,27601],{},[301,27596,27597],{"align":23725},"docker logs",[301,27599,27600],{"align":23725},"查看容器的日志输出。",[301,27602,27603],{"align":23725},"docker logs container_id",[255,27605,27606,27609,27612],{},[301,27607,27608],{"align":23725},"docker images",[301,27610,27611],{"align":23725},"列出本地所有镜像。",[301,27613,27608],{"align":23725},[255,27615,27616,27619,27622],{},[301,27617,27618],{"align":23725},"docker rmi",[301,27620,27621],{"align":23725},"删除一个或多个镜像。",[301,27623,27624],{"align":23725},"docker rmi myimage",[255,27626,27627,27630,27633],{},[301,27628,27629],{"align":23725},"docker network",[301,27631,27632],{"align":23725},"管理 Docker 网络。",[301,27634,27635],{"align":23725},"docker network ls",[255,27637,27638,27641,27644],{},[301,27639,27640],{"align":23725},"docker volume",[301,27642,27643],{"align":23725},"管理 Docker 数据卷。",[301,27645,27646],{"align":23725},"docker volume ls",[255,27648,27649,27652,27655],{},[301,27650,27651],{"align":23725},"docker-compose up",[301,27653,27654],{"align":23725},"启动 docker-compose.yml 中定义的所有服务。",[301,27656,27651],{"align":23725},[255,27658,27659,27662,27665],{},[301,27660,27661],{"align":23725},"docker-compose down",[301,27663,27664],{"align":23725},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[301,27666,27661],{"align":23725},[255,27668,27669,27672,27675],{},[301,27670,27671],{"align":23725},"docker info",[301,27673,27674],{"align":23725},"显示 Docker 系统的详细信息。",[301,27676,27671],{"align":23725},[255,27678,27679,27682,27685],{},[301,27680,27681],{"align":23725},"docker stats",[301,27683,27684],{"align":23725},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[301,27686,27681],{"align":23725},[255,27688,27689,27692,27695],{},[301,27690,27691],{"align":23725},"docker inspect",[301,27693,27694],{"align":23725},"查看容器或镜像的详细信息（JSON 格式）。",[301,27696,27697],{"align":23725},"docker inspect container_id",[255,27699,27700,27703,27706],{},[301,27701,27702],{"align":23725},"docker save",[301,27704,27705],{"align":23725},"将一个镜像保存为 tar 文件。",[301,27707,27708],{"align":23725},"docker save -o myimage.tar myimage",[255,27710,27711,27714,27717],{},[301,27712,27713],{"align":23725},"docker load",[301,27715,27716],{"align":23725},"从 tar 文件中加载镜像。",[301,27718,27719],{"align":23725},"docker load -i myimage.tar",[255,27721,27722,27725,27728],{},[301,27723,27724],{"align":23725},"docker tag",[301,27726,27727],{"align":23725},"为镜像添加标签（tag）。",[301,27729,27730],{"align":23725},"docker tag myimage myimage:v1",[255,27732,27733,27736,27739],{},[301,27734,27735],{"align":23725},"docker buildx build",[301,27737,27738],{"align":23725},"使用 Buildx 构建多架构镜像。",[301,27740,27741],{"align":23725},"docker buildx build -t myimage .",[255,27743,27744,27747,27750],{},[301,27745,27746],{"align":23725},"docker buildx create",[301,27748,27749],{"align":23725},"创建一个新的 Buildx 构建实例。",[301,27751,27752],{"align":23725},"docker buildx create –use",[255,27754,27755,27758,27761],{},[301,27756,27757],{"align":23725},"docker buildx ls",[301,27759,27760],{"align":23725},"列出所有可用的 Buildx 构建实例。",[301,27762,27757],{"align":23725},[255,27764,27765,27768,27771],{},[301,27766,27767],{"align":23725},"docker buildx use",[301,27769,27770],{"align":23725},"设置当前的 Buildx 构建实例。",[301,27772,27773],{"align":23725},"docker buildx use mybuilder",[255,27775,27776,27779,27782],{},[301,27777,27778],{"align":23725},"docker buildx bake",[301,27780,27781],{"align":23725},"使用 Bake 文件批量构建镜像。",[301,27783,27784],{"align":23725},"docker buildx bake -f bake.hcl",[255,27786,27787,27790,27793],{},[301,27788,27789],{"align":23725},"docker buildx build –push",[301,27791,27792],{"align":23725},"构建镜像并推送到镜像仓库。",[301,27794,27795],{"align":23725},"docker buildx build –push -t myimage .",[255,27797,27798,27801,27804],{},[301,27799,27800],{"align":23725},"docker buildx build –platform",[301,27802,27803],{"align":23725},"构建镜像并为多个平台生成支持。",[301,27805,27806],{"align":23725},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[10,27808,27809],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[10,27811,27812],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[10,27814,27815],{},"docker images 可以查看已经下载的镜像",[10,27817,27818],{},[1449,27819],{"alt":20,"src":27820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[10,27822,27823],{},[261,27824,27825],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[10,27827,27828],{},"docker rmi $(docker images -q) 删除所有的镜像",[10,27830,27831],{},"docker container logs 查看容器日志",[10,27833,27834],{},"docker top 查看容器里的进程",[10,27836,27837],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[92,27839,27841],{"className":23811,"code":27840,"language":23813,"meta":20,"style":20},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[98,27842,27843],{"__ignoreMap":20},[101,27844,27845,27848,27851,27854],{"class":103,"line":104},[101,27846,27847],{"class":1950},"如：docker",[101,27849,27850],{"class":216}," cp",[101,27852,27853],{"class":216}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[101,27855,27856],{"class":216}," \u002Fmydata\u002Fnginx\n",[10,27858,27859],{},"docker run时在启动容器的时候会有几个常用的选项：",[1118,27861,27862,27865,27868],{},[58,27863,27864],{},"-d选项：表示后台运行",[58,27866,27867],{},"-P选项：随机端口映射",[58,27869,27870],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[72,27872,27874],{"id":27873},"_53run命令的参数非常重要",[261,27875,27876],{},"5.3.run命令的参数（非常重要）",[249,27878,27879,27892],{},[252,27880,27881],{},[255,27882,27883,27886,27889],{},[258,27884,27885],{"align":23725},"参数\u002F配置",[258,27887,27888],{"align":23725},"功能说明",[258,27890,27891],{"align":23725},"重要性与参考依据",[296,27893,27894,27905,27916,27927,27938,27949,27960,27971,27982,27993,28004,28015,28026,28037,28048],{},[255,27895,27896,27899,27902],{},[301,27897,27898],{"align":23725},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[301,27900,27901],{"align":23725},"指定容器名称，便于后续管理",[301,27903,27904],{"align":23725},"替代随机生成的容器名。",[255,27906,27907,27910,27913],{},[301,27908,27909],{"align":23725},"–gpus all",[301,27911,27912],{"align":23725},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[301,27914,27915],{"align":23725},"用于CUDA加速等GPU依赖任务。",[255,27917,27918,27921,27924],{},[301,27919,27920],{"align":23725},"-e NVIDIA_DRIVER_CAPABILITIES=all",[301,27922,27923],{"align":23725},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[301,27925,27926],{"align":23725},"确保容器内GPU功能完整67。",[255,27928,27929,27932,27935],{},[301,27930,27931],{"align":23725},"-dit",[301,27933,27934],{"align":23725},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[301,27936,27937],{"align":23725},"允许容器在后台运行并支持交互操作。",[255,27939,27940,27943,27946],{},[301,27941,27942],{"align":23725},"–privileged",[301,27944,27945],{"align":23725},"赋予容器完全主机权限（可访问设备、内核模块等）",[301,27947,27948],{"align":23725},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[255,27950,27951,27954,27957],{},[301,27952,27953],{"align":23725},"–net=host",[301,27955,27956],{"align":23725},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[301,27958,27959],{"align":23725},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[255,27961,27962,27965,27968],{},[301,27963,27964],{"align":23725},"–group-add audio–group-add video–group-add dialout",[301,27966,27967],{"align":23725},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[301,27969,27970],{"align":23725},"避免权限问题（如避免无法调用摄像头、麦克风）。",[255,27972,27973,27976,27979],{},[301,27974,27975],{"align":23725},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[301,27977,27978],{"align":23725},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[301,27980,27981],{"align":23725},"支持容器内运行图形界面应用（如OpenCV可视化）。",[255,27983,27984,27987,27990],{},[301,27985,27986],{"align":23725},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[301,27988,27989],{"align":23725},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[301,27991,27992],{"align":23725},"实现容器内图形显示。",[255,27994,27995,27998,28001],{},[301,27996,27997],{"align":23725},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[301,27999,28000],{"align":23725},"挂载X11认证文件（只读）",[301,28002,28003],{"align":23725},"确保容器有权连接宿主机显示服务。",[255,28005,28006,28009,28012],{},[301,28007,28008],{"align":23725},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[301,28010,28011],{"align":23725},"挂载Wayland显示协议相关目录",[301,28013,28014],{"align":23725},"支持Wayland协议的图形显示。",[255,28016,28017,28020,28023],{},[301,28018,28019],{"align":23725},"–ulimit nofile=1024:524288",[301,28021,28022],{"align":23725},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[301,28024,28025],{"align":23725},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[255,28027,28028,28031,28034],{},[301,28029,28030],{"align":23725},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[301,28032,28033],{"align":23725},"挂载宿主机用户目录到容器内同名路径",[301,28035,28036],{"align":23725},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[255,28038,28039,28042,28045],{},[301,28040,28041],{"align":23725},"-w \u002Fhome\u002Ftungchiahui",[301,28043,28044],{"align":23725},"设置容器启动后的默认工作目录",[301,28046,28047],{"align":23725},"直接进入项目路径，方便执行命令2324。",[255,28049,28050,28053,28056],{},[301,28051,28052],{"align":23725},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[301,28054,28055],{"align":23725},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[301,28057,28058],{"align":23725},"提供预配置的深度学习与机器人开发环境。",[10,28060,28061,28062,28064,28065,28068],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[98,28063,24565],{},"加不加",[98,28066,28067],{},"sudo -E","都无所谓。",[10,28070,28071,28072,28074,28075,28077,28078,28081,28082,28084],{},"用户已经被加到docker组了，不用",[98,28073,24565],{},"也行跑，其次，",[98,28076,24565],{},"运行的话，你的",[98,28079,28080],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[98,28083,28080],{},"更不可能变了。",[92,28086,28088],{"className":23811,"code":28087,"language":23813,"meta":20,"style":20},"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",[98,28089,28090,28103,28113,28123,28135,28142,28149,28156,28166,28175,28184,28198,28210,28222,28231,28241,28250,28265,28298,28325,28336,28343],{"__ignoreMap":20},[101,28091,28092,28094,28096,28098,28101],{"class":103,"line":104},[101,28093,24565],{"class":1950},[101,28095,26309],{"class":216},[101,28097,27219],{"class":216},[101,28099,28100],{"class":160}," --name=ros_opencv_cuda",[101,28102,24667],{"class":160},[101,28104,28105,28108,28111],{"class":103,"line":21},[101,28106,28107],{"class":111},"--gpus ",[101,28109,28110],{"class":216},"all",[101,28112,24667],{"class":160},[101,28114,28115,28118,28121],{"class":103,"line":1166},[101,28116,28117],{"class":111},"-e ",[101,28119,28120],{"class":216},"NVIDIA_DRIVER_CAPABILITIES=all",[101,28122,24667],{"class":160},[101,28124,28125,28127,28130,28133],{"class":103,"line":1181},[101,28126,28117],{"class":111},[101,28128,28129],{"class":216},"DISPLAY=",[101,28131,28132],{"class":111},"$DISPLAY ",[101,28134,26164],{"class":160},[101,28136,28137,28140],{"class":103,"line":1187},[101,28138,28139],{"class":111},"-dit ",[101,28141,26164],{"class":160},[101,28143,28144,28147],{"class":103,"line":1201},[101,28145,28146],{"class":111},"--privileged ",[101,28148,26164],{"class":160},[101,28150,28151,28154],{"class":103,"line":1207},[101,28152,28153],{"class":111},"--net=host ",[101,28155,26164],{"class":160},[101,28157,28158,28161,28164],{"class":103,"line":1298},[101,28159,28160],{"class":111},"--group-add ",[101,28162,28163],{"class":216},"audio",[101,28165,24667],{"class":160},[101,28167,28168,28170,28173],{"class":103,"line":1304},[101,28169,28160],{"class":111},[101,28171,28172],{"class":216},"video",[101,28174,24667],{"class":160},[101,28176,28177,28179,28182],{"class":103,"line":1316},[101,28178,28160],{"class":111},[101,28180,28181],{"class":216},"dialout",[101,28183,24667],{"class":160},[101,28185,28186,28188,28191,28193,28196],{"class":103,"line":1599},[101,28187,28117],{"class":111},[101,28189,28190],{"class":216},"XAUTHORITY=",[101,28192,28080],{"class":111},[101,28194,28195],{"class":216},"\u002F.Xauthority",[101,28197,24667],{"class":160},[101,28199,28200,28202,28205,28208],{"class":103,"line":1604},[101,28201,28117],{"class":111},[101,28203,28204],{"class":216},"WAYLAND_DISPLAY=",[101,28206,28207],{"class":111},"$WAYLAND_DISPLAY ",[101,28209,26164],{"class":160},[101,28211,28212,28214,28217,28220],{"class":103,"line":1610},[101,28213,28117],{"class":111},[101,28215,28216],{"class":216},"XDG_RUNTIME_DIR=",[101,28218,28219],{"class":111},"$XDG_RUNTIME_DIR ",[101,28221,26164],{"class":160},[101,28223,28224,28226,28229],{"class":103,"line":1615},[101,28225,28117],{"class":111},[101,28227,28228],{"class":216},"QT_QPA_PLATFORM=xcb",[101,28230,24667],{"class":160},[101,28232,28233,28236,28239],{"class":103,"line":1629},[101,28234,28235],{"class":111},"-v ",[101,28237,28238],{"class":216},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[101,28240,24667],{"class":160},[101,28242,28243,28245,28248],{"class":103,"line":1634},[101,28244,28235],{"class":111},[101,28246,28247],{"class":216},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[101,28249,24667],{"class":160},[101,28251,28252,28255,28258,28260,28263],{"class":103,"line":1640},[101,28253,28254],{"class":111},"-v $HOME",[101,28256,28257],{"class":216},"\u002F.Xauthority:",[101,28259,28080],{"class":111},[101,28261,28262],{"class":216},"\u002F.Xauthority:ro",[101,28264,24667],{"class":160},[101,28266,28267,28269,28272,28274,28277,28280,28282,28285,28287,28289,28291,28293,28296],{"class":103,"line":1661},[101,28268,28235],{"class":111},[101,28270,28271],{"class":216},"\u002Frun\u002Fuser\u002F",[101,28273,25088],{"class":111},[101,28275,28276],{"class":1950},"id",[101,28278,28279],{"class":160}," -u",[101,28281,540],{"class":111},[101,28283,28284],{"class":216},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[101,28286,25088],{"class":111},[101,28288,28276],{"class":1950},[101,28290,28279],{"class":160},[101,28292,540],{"class":111},[101,28294,28295],{"class":216},"\u002Fwayland-0",[101,28297,24667],{"class":160},[101,28299,28300,28302,28304,28306,28308,28310,28312,28315,28317,28319,28321,28323],{"class":103,"line":1666},[101,28301,28235],{"class":111},[101,28303,28271],{"class":216},[101,28305,25088],{"class":111},[101,28307,28276],{"class":1950},[101,28309,28279],{"class":160},[101,28311,540],{"class":111},[101,28313,28314],{"class":216},":\u002Frun\u002Fuser\u002F",[101,28316,25088],{"class":111},[101,28318,28276],{"class":1950},[101,28320,28279],{"class":160},[101,28322,13702],{"class":111},[101,28324,26164],{"class":160},[101,28326,28327,28329,28331,28334],{"class":103,"line":1680},[101,28328,28254],{"class":111},[101,28330,970],{"class":216},[101,28332,28333],{"class":111},"$HOME ",[101,28335,26164],{"class":160},[101,28337,28338,28341],{"class":103,"line":1685},[101,28339,28340],{"class":111},"-w $HOME ",[101,28342,26164],{"class":160},[101,28344,28345],{"class":103,"line":1714},[101,28346,28347],{"class":111},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[10,28349,9013],{},[55,28351,28352,28360,28363,28366],{},[58,28353,28354,13783,28356,28359],{},[98,28355,28120],{},[98,28357,28358],{},"--gpus all","没有英伟达显卡请注释。",[58,28361,28362],{},"--name后面请自己为容器起名。",[58,28364,28365],{},"最后一行仓库名称请你自己找对应的镜像填上。",[58,28367,28368,28369,28374],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23542,28370,28371],{},[261,28372,28373],{},"请不要加","。",[92,28376,28378],{"className":23811,"code":28377,"language":23813,"meta":20,"style":20},"--ulimit nofile=1024:524288 \\\n",[98,28379,28380],{"__ignoreMap":20},[101,28381,28382,28385,28388],{"class":103,"line":104},[101,28383,28384],{"class":1950},"--ulimit",[101,28386,28387],{"class":216}," nofile=1024:524288",[101,28389,24667],{"class":160},[10,28391,28392,28393,28398],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23542,28394,28395],{},[261,28396,28397],{},"不建议","**.**",[92,28400,28402],{"className":23811,"code":28401,"language":23813,"meta":20,"style":20},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[98,28403,28404,28431,28440],{"__ignoreMap":20},[101,28405,28406,28409,28412,28414,28416,28418,28420,28422,28424,28427,28429],{"class":103,"line":104},[101,28407,28408],{"class":1950},"--user",[101,28410,28411],{"class":111}," $(",[101,28413,28276],{"class":1950},[101,28415,28279],{"class":160},[101,28417,540],{"class":111},[101,28419,970],{"class":216},[101,28421,25088],{"class":111},[101,28423,28276],{"class":1950},[101,28425,28426],{"class":160}," -g",[101,28428,13702],{"class":111},[101,28430,26164],{"class":160},[101,28432,28433,28435,28438],{"class":103,"line":21},[101,28434,28235],{"class":111},[101,28436,28437],{"class":216},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[101,28439,24667],{"class":160},[101,28441,28442,28444,28447],{"class":103,"line":1166},[101,28443,28235],{"class":111},[101,28445,28446],{"class":216},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[101,28448,24667],{"class":160},[5114,28450,28451],{},"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":20,"searchDepth":21,"depth":21,"links":28453},[28454,28455,28456],{"id":27452,"depth":1166,"text":27453},{"id":27462,"depth":1166,"text":27463},{"id":27873,"depth":1166,"text":27876},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27444,"description":20},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28463,"title":28464,"body":28465,"description":20,"extension":24,"meta":30088,"navigation":27,"path":30089,"seo":30090,"stem":30091,"__hash__":30092},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28466,"toc":30083},[28467,28470,28474,28477,28699,28703,28707,28710,28816,28821,28824,28829,28832,28837,28840,28845,28848,28860,28863,28868,28875,28903,28910,28986,28991,28994,29017,29019,29094,29099,29102,29106,29114,29119,29124,29128,29139,29145,29148,29151,29175,29178,29181,29209,29212,29215,29680,29683,29688,29693,29697,29720,29725,29729,29733,29736,29739,29742,29769,29772,29775,29793,29796,29799,29821,29829,29834,29839,29843,29846,29849,29852,29855,29900,29903,29921,29924,29929,29932,29953,29956,30012,30015,30020,30024,30027,30034,30037,30040,30045,30048,30064,30067,30080],[39,28468,28464],{"id":28469},"_6手动创建docker镜像",[72,28471,28473],{"id":28472},"_61dockerfile","6.1.DockerFile",[10,28475,28476],{},"常用命令：",[249,28478,28479,28490],{},[252,28480,28481],{},[255,28482,28483,28486,28488],{},[258,28484,28485],{"align":23725},"指令",[258,28487,25858],{"align":23725},[258,28489,27481],{"align":23725},[296,28491,28492,28502,28518,28529,28540,28551,28562,28573,28584,28598,28612,28623,28637,28648,28659,28673,28688],{},[255,28493,28494,28496,28499],{},[301,28495,27359],{"align":23725},[301,28497,28498],{"align":23725},"指定基础镜像，是 Dockerfile 的起点",[301,28500,28501],{"align":23725},"FROM ubuntu:22.04",[255,28503,28504,28507,28510],{},[301,28505,28506],{"align":23725},"LABEL",[301,28508,28509],{"align":23725},"添加元数据（如作者、版本等）",[301,28511,28512,28513,28517],{"align":23725},"LABEL maintainer=”",[14,28514,28516],{"href":28515},"mailto:you@example.com","you@example.com","”",[255,28519,28520,28523,28526],{},[301,28521,28522],{"align":23725},"ENV",[301,28524,28525],{"align":23725},"设置环境变量",[301,28527,28528],{"align":23725},"ENV PORT=8080",[255,28530,28531,28534,28537],{},[301,28532,28533],{"align":23725},"ARG",[301,28535,28536],{"align":23725},"构建参数，只在构建期间可用",[301,28538,28539],{"align":23725},"ARG VERSION=1.0",[255,28541,28542,28545,28548],{},[301,28543,28544],{"align":23725},"RUN",[301,28546,28547],{"align":23725},"构建镜像时运行命令",[301,28549,28550],{"align":23725},"RUN apt-get update && apt-get install -y curl",[255,28552,28553,28556,28559],{},[301,28554,28555],{"align":23725},"COPY",[301,28557,28558],{"align":23725},"复制文件到镜像中",[301,28560,28561],{"align":23725},"COPY . \u002Fapp",[255,28563,28564,28567,28570],{},[301,28565,28566],{"align":23725},"ADD",[301,28568,28569],{"align":23725},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[301,28571,28572],{"align":23725},"ADD archive.tar.gz \u002Fdata\u002F",[255,28574,28575,28578,28581],{},[301,28576,28577],{"align":23725},"WORKDIR",[301,28579,28580],{"align":23725},"设置工作目录",[301,28582,28583],{"align":23725},"WORKDIR \u002Fopt",[255,28585,28586,28589,28592],{},[301,28587,28588],{"align":23725},"CMD",[301,28590,28591],{"align":23725},"设置容器启动时默认命令（可被 docker run 覆盖）",[301,28593,28594,28595],{"align":23725},"CMD ",[101,28596,28597],{},"“node”, “index.js”",[255,28599,28600,28603,28606],{},[301,28601,28602],{"align":23725},"ENTRYPOINT",[301,28604,28605],{"align":23725},"设置容器启动时固定命令（通常用于 CLI 工具等）",[301,28607,28608,28609],{"align":23725},"ENTRYPOINT ",[101,28610,28611],{},"“python3”",[255,28613,28614,28617,28620],{},[301,28615,28616],{"align":23725},"EXPOSE",[301,28618,28619],{"align":23725},"声明镜像内服务监听的端口（不会自动映射）",[301,28621,28622],{"align":23725},"EXPOSE 80",[255,28624,28625,28628,28631],{},[301,28626,28627],{"align":23725},"VOLUME",[301,28629,28630],{"align":23725},"声明数据卷挂载点",[301,28632,28633,28634],{"align":23725},"VOLUME ",[101,28635,28636],{},"“\u002Fdata”",[255,28638,28639,28642,28645],{},[301,28640,28641],{"align":23725},"USER",[301,28643,28644],{"align":23725},"设置后续命令执行的用户",[301,28646,28647],{"align":23725},"USER appuser",[255,28649,28650,28653,28656],{},[301,28651,28652],{"align":23725},"ONBUILD",[301,28654,28655],{"align":23725},"当镜像作为其他镜像基础镜像时触发的构建指令",[301,28657,28658],{"align":23725},"ONBUILD COPY . \u002Fsrc",[255,28660,28661,28664,28667],{},[301,28662,28663],{"align":23725},"SHELL",[301,28665,28666],{"align":23725},"更改默认 shell，比如将 sh -c 改为 bash -c",[301,28668,28669,28670],{"align":23725},"SHELL ",[101,28671,28672],{},"“\u002Fbin\u002Fbash”, “-c”",[255,28674,28675,28678,28681],{},[301,28676,28677],{"align":23725},"HEALTHCHECK",[301,28679,28680],{"align":23725},"定义容器运行时的健康检查命令",[301,28682,28683,28684],{"align":23725},"`HEALTHCHECK CMD curl –fail ",[14,28685,28686],{"href":28686,"rel":28687},"http:\u002F\u002Flocalhost:8080",[18],[255,28689,28690,28693,28696],{},[301,28691,28692],{"align":23725},"STOPSIGNAL",[301,28694,28695],{"align":23725},"容器停止时发送的信号",[301,28697,28698],{"align":23725},"STOPSIGNAL SIGKILL",[72,28700,28702],{"id":28701},"_62自己创建容器","6.2.自己创建容器",[21986,28704,28706],{"id":28705},"_621手动创建","6.2.1.手动创建",[10,28708,28709],{},"在x86电脑上编译x86的：",[92,28711,28713],{"className":23811,"code":28712,"language":23813,"meta":20,"style":20},"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",[98,28714,28715,28731,28735,28748,28752,28765,28769,28782,28786,28799,28803],{"__ignoreMap":20},[101,28716,28717,28719,28722,28725,28728],{"class":103,"line":104},[101,28718,26542],{"class":1950},[101,28720,28721],{"class":216}," build",[101,28723,28724],{"class":160}," -t",[101,28726,28727],{"class":216}," ros-melodic-cuda118-cudnn8-bionic:latest",[101,28729,28730],{"class":216}," .\n",[101,28732,28733],{"class":103,"line":21},[101,28734,2387],{"emptyLinePlaceholder":27},[101,28736,28737,28739,28741,28743,28746],{"class":103,"line":1166},[101,28738,26542],{"class":1950},[101,28740,28721],{"class":216},[101,28742,28724],{"class":160},[101,28744,28745],{"class":216}," ros-noetic-focal:latest",[101,28747,28730],{"class":216},[101,28749,28750],{"class":103,"line":1181},[101,28751,2387],{"emptyLinePlaceholder":27},[101,28753,28754,28756,28758,28760,28763],{"class":103,"line":1187},[101,28755,26542],{"class":1950},[101,28757,28721],{"class":216},[101,28759,28724],{"class":160},[101,28761,28762],{"class":216}," ros-humble-jammy:latest",[101,28764,28730],{"class":216},[101,28766,28767],{"class":103,"line":1201},[101,28768,2387],{"emptyLinePlaceholder":27},[101,28770,28771,28773,28775,28777,28780],{"class":103,"line":1207},[101,28772,26542],{"class":1950},[101,28774,28721],{"class":216},[101,28776,28724],{"class":160},[101,28778,28779],{"class":216}," ros-jazzy-noble:latest",[101,28781,28730],{"class":216},[101,28783,28784],{"class":103,"line":1298},[101,28785,2387],{"emptyLinePlaceholder":27},[101,28787,28788,28790,28792,28794,28797],{"class":103,"line":1304},[101,28789,26542],{"class":1950},[101,28791,28721],{"class":216},[101,28793,28724],{"class":160},[101,28795,28796],{"class":216}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[101,28798,28730],{"class":216},[101,28800,28801],{"class":103,"line":1316},[101,28802,2387],{"emptyLinePlaceholder":27},[101,28804,28805,28807,28809,28811,28814],{"class":103,"line":1599},[101,28806,26542],{"class":1950},[101,28808,28721],{"class":216},[101,28810,28724],{"class":160},[101,28812,28813],{"class":216}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[101,28815,28730],{"class":216},[10,28817,28818],{},[1449,28819],{"alt":20,"src":28820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[10,28822,28823],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[10,28825,28826],{},[1449,28827],{"alt":20,"src":28828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[10,28830,28831],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[55,28833,28834],{},[58,28835,28836],{},"创建 Docker Hub 账户",[10,28838,28839],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[55,28841,28842],{"start":21},[58,28843,28844],{},"登录 Docker Hub",[10,28846,28847],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[92,28849,28851],{"className":23811,"code":28850,"language":23813,"meta":20,"style":20},"docker login\n",[98,28852,28853],{"__ignoreMap":20},[101,28854,28855,28857],{"class":103,"line":104},[101,28856,26542],{"class":1950},[101,28858,28859],{"class":216}," login\n",[10,28861,28862],{},"输入你的 Docker Hub 用户名和密码进行验证。",[55,28864,28865],{},[58,28866,28867],{},"为你的镜像打标签",[10,28869,28870,28871,28874],{},"Docker Hub 使用 ",[98,28872,28873],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[92,28876,28878],{"className":23811,"code":28877,"language":23813,"meta":20,"style":20},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[98,28879,28880],{"__ignoreMap":20},[101,28881,28882,28884,28887,28889,28892,28895,28898,28900],{"class":103,"line":104},[101,28883,26542],{"class":1950},[101,28885,28886],{"class":216}," tag",[101,28888,28779],{"class":216},[101,28890,28891],{"class":107}," \u003C",[101,28893,28894],{"class":216},"你的用户",[101,28896,28897],{"class":111},"名",[101,28899,1071],{"class":107},[101,28901,28902],{"class":216},"\u002Fros-jazzy-noble:latest\n",[10,28904,28905,28906,28909],{},"例如，如果你的 Docker Hub 用户名是 ",[98,28907,28908],{},"tungchiahui","，你应该执行：",[92,28911,28913],{"className":23811,"code":28912,"language":23813,"meta":20,"style":20},"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",[98,28914,28915,28926,28930,28941,28945,28956,28960,28971,28975],{"__ignoreMap":20},[101,28916,28917,28919,28921,28923],{"class":103,"line":104},[101,28918,26542],{"class":1950},[101,28920,28886],{"class":216},[101,28922,28745],{"class":216},[101,28924,28925],{"class":216}," tungchiahui\u002Fros-noetic-focal:latest\n",[101,28927,28928],{"class":103,"line":21},[101,28929,2387],{"emptyLinePlaceholder":27},[101,28931,28932,28934,28936,28938],{"class":103,"line":1166},[101,28933,26542],{"class":1950},[101,28935,28886],{"class":216},[101,28937,28762],{"class":216},[101,28939,28940],{"class":216}," tungchiahui\u002Fros-humble-jammy:latest\n",[101,28942,28943],{"class":103,"line":1181},[101,28944,2387],{"emptyLinePlaceholder":27},[101,28946,28947,28949,28951,28953],{"class":103,"line":1187},[101,28948,26542],{"class":1950},[101,28950,28886],{"class":216},[101,28952,28779],{"class":216},[101,28954,28955],{"class":216}," tungchiahui\u002Fros-jazzy-noble:latest\n",[101,28957,28958],{"class":103,"line":1201},[101,28959,2387],{"emptyLinePlaceholder":27},[101,28961,28962,28964,28966,28968],{"class":103,"line":1207},[101,28963,26542],{"class":1950},[101,28965,28886],{"class":216},[101,28967,28796],{"class":216},[101,28969,28970],{"class":216}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[101,28972,28973],{"class":103,"line":1298},[101,28974,2387],{"emptyLinePlaceholder":27},[101,28976,28977,28979,28981,28983],{"class":103,"line":1304},[101,28978,26542],{"class":1950},[101,28980,28886],{"class":216},[101,28982,28813],{"class":216},[101,28984,28985],{"class":216}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[55,28987,28988],{"start":21},[58,28989,28990],{},"推送镜像到 Docker Hub",[10,28992,28993],{},"使用以下命令将镜像推送到 Docker Hub：",[92,28995,28997],{"className":23811,"code":28996,"language":23813,"meta":20,"style":20},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[98,28998,28999],{"__ignoreMap":20},[101,29000,29001,29003,29006,29008,29010,29012,29014],{"class":103,"line":104},[101,29002,26542],{"class":1950},[101,29004,29005],{"class":216}," push",[101,29007,28891],{"class":107},[101,29009,28894],{"class":216},[101,29011,28897],{"class":111},[101,29013,1071],{"class":107},[101,29015,29016],{"class":216},"\u002Fros-noetic-jazzy-noble:latest\n",[10,29018,14621],{},[92,29020,29022],{"className":23811,"code":29021,"language":23813,"meta":20,"style":20},"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",[98,29023,29024,29032,29036,29044,29048,29056,29060,29069,29073,29081,29085],{"__ignoreMap":20},[101,29025,29026,29028,29030],{"class":103,"line":104},[101,29027,26542],{"class":1950},[101,29029,29005],{"class":216},[101,29031,28925],{"class":216},[101,29033,29034],{"class":103,"line":21},[101,29035,2387],{"emptyLinePlaceholder":27},[101,29037,29038,29040,29042],{"class":103,"line":1166},[101,29039,26542],{"class":1950},[101,29041,29005],{"class":216},[101,29043,28940],{"class":216},[101,29045,29046],{"class":103,"line":1181},[101,29047,2387],{"emptyLinePlaceholder":27},[101,29049,29050,29052,29054],{"class":103,"line":1187},[101,29051,26542],{"class":1950},[101,29053,29005],{"class":216},[101,29055,28955],{"class":216},[101,29057,29058],{"class":103,"line":1201},[101,29059,2387],{"emptyLinePlaceholder":27},[101,29061,29062,29064,29066],{"class":103,"line":1207},[101,29063,26542],{"class":1950},[101,29065,29005],{"class":216},[101,29067,29068],{"class":216}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[101,29070,29071],{"class":103,"line":1298},[101,29072,2387],{"emptyLinePlaceholder":27},[101,29074,29075,29077,29079],{"class":103,"line":1304},[101,29076,26542],{"class":1950},[101,29078,29005],{"class":216},[101,29080,28985],{"class":216},[101,29082,29083],{"class":103,"line":1316},[101,29084,2387],{"emptyLinePlaceholder":27},[101,29086,29087,29089,29091],{"class":103,"line":1599},[101,29088,26542],{"class":1950},[101,29090,29005],{"class":216},[101,29092,29093],{"class":216}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[55,29095,29096],{"start":1166},[58,29097,29098],{},"验证推送成功",[10,29100,29101],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[10,29103,29104],{},[261,29105,3771],{},[1118,29107,29108,29111],{},[58,29109,29110],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[58,29112,29113],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[10,29115,29116],{},[1449,29117],{"alt":20,"src":29118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[10,29120,29121],{},[1449,29122],{"alt":20,"src":29123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21986,29125,29127],{"id":29126},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[10,29129,29130,29131,29134,29135,29138],{},"如果您想在 ",[261,29132,29133],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[261,29136,29137],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[10,29140,29141,29142],{},"1. ",[261,29143,29144],{},"启用 Docker 跨平台构建",[10,29146,29147],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[10,29149,29150],{},"第一步：启用 buildx（只需执行一次）",[92,29152,29154],{"className":23811,"code":29153,"language":23813,"meta":20,"style":20},"docker buildx create --name multiarch_builder --use\n",[98,29155,29156],{"__ignoreMap":20},[101,29157,29158,29160,29163,29166,29169,29172],{"class":103,"line":104},[101,29159,26542],{"class":1950},[101,29161,29162],{"class":216}," buildx",[101,29164,29165],{"class":216}," create",[101,29167,29168],{"class":160}," --name",[101,29170,29171],{"class":216}," multiarch_builder",[101,29173,29174],{"class":160}," --use\n",[10,29176,29177],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[10,29179,29180],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[92,29182,29184],{"className":23811,"code":29183,"language":23813,"meta":20,"style":20},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[98,29185,29186],{"__ignoreMap":20},[101,29187,29188,29190,29192,29194,29197,29200,29203,29206],{"class":103,"line":104},[101,29189,26542],{"class":1950},[101,29191,27219],{"class":216},[101,29193,27222],{"class":160},[101,29195,29196],{"class":160}," --privileged",[101,29198,29199],{"class":216}," multiarch\u002Fqemu-user-static",[101,29201,29202],{"class":160}," --reset",[101,29204,29205],{"class":160}," -p",[101,29207,29208],{"class":216}," yes\n",[10,29210,29211],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[10,29213,29214],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[92,29216,29218],{"className":23811,"code":29217,"language":23813,"meta":20,"style":20},"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",[98,29219,29220,29262,29266,29271,29281,29291,29300,29306,29310,29314,29324,29332,29341,29347,29351,29355,29365,29373,29382,29388,29392,29396,29406,29414,29423,29429,29433,29437,29447,29455,29464,29470,29474,29478,29488,29496,29505,29511,29515,29519,29529,29537,29546,29552,29556,29560,29570,29578,29587,29593,29597,29601,29611,29619,29628,29634,29638,29642,29653,29661,29670,29676],{"__ignoreMap":20},[101,29221,29222,29224,29226,29228,29231,29234,29236,29238,29241,29243,29245,29247,29249,29252,29255,29257,29260],{"class":103,"line":104},[101,29223,26542],{"class":1950},[101,29225,29162],{"class":216},[101,29227,28721],{"class":216},[101,29229,29230],{"class":160}," --platform",[101,29232,29233],{"class":216}," linux\u002Famd64,linux\u002Farm64",[101,29235,28724],{"class":160},[101,29237,28891],{"class":107},[101,29239,29240],{"class":216},"你的镜像",[101,29242,28897],{"class":111},[101,29244,1071],{"class":107},[101,29246,970],{"class":216},[101,29248,1021],{"class":107},[101,29250,29251],{"class":216},"标",[101,29253,29254],{"class":111},"签",[101,29256,1071],{"class":107},[101,29258,29259],{"class":160}," --push",[101,29261,28730],{"class":216},[101,29263,29264],{"class":103,"line":21},[101,29265,2387],{"emptyLinePlaceholder":27},[101,29267,29268],{"class":103,"line":1166},[101,29269,29270],{"class":170},"# 例子：\n",[101,29272,29273,29275,29277,29279],{"class":103,"line":1181},[101,29274,26542],{"class":1950},[101,29276,29162],{"class":216},[101,29278,28721],{"class":216},[101,29280,24667],{"class":160},[101,29282,29283,29286,29289],{"class":103,"line":1187},[101,29284,29285],{"class":111},"--platform ",[101,29287,29288],{"class":216},"linux\u002Famd64,linux\u002Farm64",[101,29290,24667],{"class":160},[101,29292,29293,29295,29298],{"class":103,"line":1201},[101,29294,28724],{"class":160},[101,29296,29297],{"class":216}," tungchiahui\u002Fros:noetic-focal",[101,29299,24667],{"class":160},[101,29301,29302,29304],{"class":103,"line":1207},[101,29303,29259],{"class":160},[101,29305,24667],{"class":160},[101,29307,29308],{"class":103,"line":1298},[101,29309,28730],{"class":216},[101,29311,29312],{"class":103,"line":1304},[101,29313,2387],{"emptyLinePlaceholder":27},[101,29315,29316,29318,29320,29322],{"class":103,"line":1316},[101,29317,26542],{"class":1950},[101,29319,29162],{"class":216},[101,29321,28721],{"class":216},[101,29323,24667],{"class":160},[101,29325,29326,29328,29330],{"class":103,"line":1599},[101,29327,29285],{"class":111},[101,29329,29288],{"class":216},[101,29331,24667],{"class":160},[101,29333,29334,29336,29339],{"class":103,"line":1604},[101,29335,28724],{"class":160},[101,29337,29338],{"class":216}," tungchiahui\u002Fros:humble-jammy",[101,29340,24667],{"class":160},[101,29342,29343,29345],{"class":103,"line":1610},[101,29344,29259],{"class":160},[101,29346,24667],{"class":160},[101,29348,29349],{"class":103,"line":1615},[101,29350,28730],{"class":216},[101,29352,29353],{"class":103,"line":1629},[101,29354,2387],{"emptyLinePlaceholder":27},[101,29356,29357,29359,29361,29363],{"class":103,"line":1634},[101,29358,26542],{"class":1950},[101,29360,29162],{"class":216},[101,29362,28721],{"class":216},[101,29364,24667],{"class":160},[101,29366,29367,29369,29371],{"class":103,"line":1640},[101,29368,29285],{"class":111},[101,29370,29288],{"class":216},[101,29372,24667],{"class":160},[101,29374,29375,29377,29380],{"class":103,"line":1661},[101,29376,28724],{"class":160},[101,29378,29379],{"class":216}," tungchiahui\u002Fros:jazzy-noble",[101,29381,24667],{"class":160},[101,29383,29384,29386],{"class":103,"line":1666},[101,29385,29259],{"class":160},[101,29387,24667],{"class":160},[101,29389,29390],{"class":103,"line":1680},[101,29391,28730],{"class":216},[101,29393,29394],{"class":103,"line":1685},[101,29395,2387],{"emptyLinePlaceholder":27},[101,29397,29398,29400,29402,29404],{"class":103,"line":1714},[101,29399,26309],{"class":1950},[101,29401,29162],{"class":216},[101,29403,28721],{"class":216},[101,29405,24667],{"class":160},[101,29407,29408,29410,29412],{"class":103,"line":1719},[101,29409,29285],{"class":111},[101,29411,29288],{"class":216},[101,29413,24667],{"class":160},[101,29415,29416,29418,29421],{"class":103,"line":1736},[101,29417,28724],{"class":160},[101,29419,29420],{"class":216}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[101,29422,24667],{"class":160},[101,29424,29425,29427],{"class":103,"line":1741},[101,29426,29259],{"class":160},[101,29428,24667],{"class":160},[101,29430,29431],{"class":103,"line":1746},[101,29432,28730],{"class":216},[101,29434,29435],{"class":103,"line":1751},[101,29436,2387],{"emptyLinePlaceholder":27},[101,29438,29439,29441,29443,29445],{"class":103,"line":1765},[101,29440,26542],{"class":1950},[101,29442,29162],{"class":216},[101,29444,28721],{"class":216},[101,29446,24667],{"class":160},[101,29448,29449,29451,29453],{"class":103,"line":1770},[101,29450,29285],{"class":111},[101,29452,29288],{"class":216},[101,29454,24667],{"class":160},[101,29456,29457,29459,29462],{"class":103,"line":2564},[101,29458,28724],{"class":160},[101,29460,29461],{"class":216}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[101,29463,24667],{"class":160},[101,29465,29466,29468],{"class":103,"line":2578},[101,29467,29259],{"class":160},[101,29469,24667],{"class":160},[101,29471,29472],{"class":103,"line":2586},[101,29473,28730],{"class":216},[101,29475,29476],{"class":103,"line":2591},[101,29477,2387],{"emptyLinePlaceholder":27},[101,29479,29480,29482,29484,29486],{"class":103,"line":2597},[101,29481,26309],{"class":1950},[101,29483,29162],{"class":216},[101,29485,28721],{"class":216},[101,29487,24667],{"class":160},[101,29489,29490,29492,29494],{"class":103,"line":2603},[101,29491,29285],{"class":111},[101,29493,29288],{"class":216},[101,29495,24667],{"class":160},[101,29497,29498,29500,29503],{"class":103,"line":2608},[101,29499,28724],{"class":160},[101,29501,29502],{"class":216}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[101,29504,24667],{"class":160},[101,29506,29507,29509],{"class":103,"line":7936},[101,29508,29259],{"class":160},[101,29510,24667],{"class":160},[101,29512,29513],{"class":103,"line":7960},[101,29514,28730],{"class":216},[101,29516,29517],{"class":103,"line":7965},[101,29518,2387],{"emptyLinePlaceholder":27},[101,29520,29521,29523,29525,29527],{"class":103,"line":7971},[101,29522,26542],{"class":1950},[101,29524,29162],{"class":216},[101,29526,28721],{"class":216},[101,29528,24667],{"class":160},[101,29530,29531,29533,29535],{"class":103,"line":7998},[101,29532,29285],{"class":111},[101,29534,29288],{"class":216},[101,29536,24667],{"class":160},[101,29538,29539,29541,29544],{"class":103,"line":8003},[101,29540,28724],{"class":160},[101,29542,29543],{"class":216}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[101,29545,24667],{"class":160},[101,29547,29548,29550],{"class":103,"line":8009},[101,29549,29259],{"class":160},[101,29551,24667],{"class":160},[101,29553,29554],{"class":103,"line":8021},[101,29555,28730],{"class":216},[101,29557,29558],{"class":103,"line":8033},[101,29559,2387],{"emptyLinePlaceholder":27},[101,29561,29562,29564,29566,29568],{"class":103,"line":8045},[101,29563,26542],{"class":1950},[101,29565,29162],{"class":216},[101,29567,28721],{"class":216},[101,29569,24667],{"class":160},[101,29571,29572,29574,29576],{"class":103,"line":9704},[101,29573,29285],{"class":111},[101,29575,29288],{"class":216},[101,29577,24667],{"class":160},[101,29579,29580,29582,29585],{"class":103,"line":9729},[101,29581,28724],{"class":160},[101,29583,29584],{"class":216}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[101,29586,24667],{"class":160},[101,29588,29589,29591],{"class":103,"line":9752},[101,29590,29259],{"class":160},[101,29592,24667],{"class":160},[101,29594,29595],{"class":103,"line":9776},[101,29596,28730],{"class":216},[101,29598,29599],{"class":103,"line":9781},[101,29600,2387],{"emptyLinePlaceholder":27},[101,29602,29603,29605,29607,29609],{"class":103,"line":9786},[101,29604,26309],{"class":1950},[101,29606,29162],{"class":216},[101,29608,28721],{"class":216},[101,29610,24667],{"class":160},[101,29612,29613,29615,29617],{"class":103,"line":9791},[101,29614,29285],{"class":111},[101,29616,29288],{"class":216},[101,29618,24667],{"class":160},[101,29620,29621,29623,29626],{"class":103,"line":9800},[101,29622,28724],{"class":160},[101,29624,29625],{"class":216}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[101,29627,24667],{"class":160},[101,29629,29630,29632],{"class":103,"line":9805},[101,29631,29259],{"class":160},[101,29633,24667],{"class":160},[101,29635,29636],{"class":103,"line":9811},[101,29637,28730],{"class":216},[101,29639,29640],{"class":103,"line":9832},[101,29641,2387],{"emptyLinePlaceholder":27},[101,29643,29644,29647,29649,29651],{"class":103,"line":9838},[101,29645,29646],{"class":1950},"  docker",[101,29648,29162],{"class":216},[101,29650,28721],{"class":216},[101,29652,24667],{"class":160},[101,29654,29655,29657,29659],{"class":103,"line":9852},[101,29656,29285],{"class":111},[101,29658,29288],{"class":216},[101,29660,24667],{"class":160},[101,29662,29663,29665,29668],{"class":103,"line":9858},[101,29664,28724],{"class":160},[101,29666,29667],{"class":216}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[101,29669,24667],{"class":160},[101,29671,29672,29674],{"class":103,"line":9885},[101,29673,29259],{"class":160},[101,29675,24667],{"class":160},[101,29677,29678],{"class":103,"line":9894},[101,29679,28730],{"class":216},[10,29681,29682],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[10,29684,29685],{},[1449,29686],{"alt":20,"src":29687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[10,29689,29690],{},[1449,29691],{"alt":20,"src":29692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21986,29694,29696],{"id":29695},"_623清除构建缓存","6.2.3.清除构建缓存",[92,29698,29700],{"className":23811,"code":29699,"language":23813,"meta":20,"style":20},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[98,29701,29702,29707],{"__ignoreMap":20},[101,29703,29704],{"class":103,"line":104},[101,29705,29706],{"class":170},"# 清理BuildKit构建缓存\n",[101,29708,29709,29711,29714,29717],{"class":103,"line":21},[101,29710,26542],{"class":1950},[101,29712,29713],{"class":216}," builder",[101,29715,29716],{"class":216}," prune",[101,29718,29719],{"class":160}," -f\n",[10,29721,29722],{},[1449,29723],{"alt":20,"src":29724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[72,29726,29728],{"id":29727},"_63补充","6.3.补充",[21986,29730,29732],{"id":29731},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[10,29734,29735],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[10,29737,29738],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[10,29740,29741],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[92,29743,29745],{"className":23811,"code":29744,"language":23813,"meta":20,"style":20},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[98,29746,29747,29754],{"__ignoreMap":20},[101,29748,29749,29751],{"class":103,"line":104},[101,29750,27359],{"class":1950},[101,29752,29753],{"class":216}," nginx\n",[101,29755,29756,29758,29761,29764,29766],{"class":103,"line":21},[101,29757,28544],{"class":1950},[101,29759,29760],{"class":216}," echo",[101,29762,29763],{"class":216}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[101,29765,26211],{"class":107},[101,29767,29768],{"class":216}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[10,29770,29771],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[10,29773,29774],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[92,29776,29778],{"className":23811,"code":29777,"language":23813,"meta":20,"style":20},"docker build -t nginx:tuling .\n",[98,29779,29780],{"__ignoreMap":20},[101,29781,29782,29784,29786,29788,29791],{"class":103,"line":104},[101,29783,26542],{"class":1950},[101,29785,28721],{"class":216},[101,29787,28724],{"class":160},[101,29789,29790],{"class":216}," nginx:tuling",[101,29792,28730],{"class":216},[10,29794,29795],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[10,29797,29798],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[92,29800,29802],{"className":23811,"code":29801,"language":23813,"meta":20,"style":20},"docker run -d -p 92:80 nginx:tuling\n",[98,29803,29804],{"__ignoreMap":20},[101,29805,29806,29808,29810,29813,29815,29818],{"class":103,"line":104},[101,29807,26542],{"class":1950},[101,29809,27219],{"class":216},[101,29811,29812],{"class":160}," -d",[101,29814,29205],{"class":160},[101,29816,29817],{"class":216}," 92:80",[101,29819,29820],{"class":216}," nginx:tuling\n",[10,29822,29823,29824],{},"4、访问 ",[14,29825,29828],{"href":29826,"rel":29827},"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",[18],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[10,29830,29831],{},[1449,29832],{"alt":20,"src":29833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[10,29835,29836],{},[1449,29837],{"alt":20,"src":29838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21986,29840,29842],{"id":29841},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[10,29844,29845],{},"只需要知道大体流程即可",[10,29847,29848],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[10,29850,29851],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[10,29853,29854],{},"2、在Dockerfile中添加以下内容",[92,29856,29858],{"className":26080,"code":29857,"language":26082,"meta":20,"style":20},"# 基于哪个镜像\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",[98,29859,29860,29865,29870,29875,29880,29885,29890,29895],{"__ignoreMap":20},[101,29861,29862],{"class":103,"line":104},[101,29863,29864],{},"# 基于哪个镜像\n",[101,29866,29867],{"class":103,"line":21},[101,29868,29869],{},"From java:8\n",[101,29871,29872],{"class":103,"line":1166},[101,29873,29874],{},"# 复制文件到容器\n",[101,29876,29877],{"class":103,"line":1181},[101,29878,29879],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[101,29881,29882],{"class":103,"line":1187},[101,29883,29884],{},"# 声明需要暴露的端口\n",[101,29886,29887],{"class":103,"line":1201},[101,29888,29889],{},"EXPOSE 8877\n",[101,29891,29892],{"class":103,"line":1207},[101,29893,29894],{},"# 配置容器启动后执行的命令\n",[101,29896,29897],{"class":103,"line":1298},[101,29898,29899],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[10,29901,29902],{},"3、使用docker build命令构建镜像",[92,29904,29906],{"className":23811,"code":29905,"language":23813,"meta":20,"style":20},"docker build -t tulingmall-member:0.0.5 .\n",[98,29907,29908],{"__ignoreMap":20},[101,29909,29910,29912,29914,29916,29919],{"class":103,"line":104},[101,29911,26542],{"class":1950},[101,29913,28721],{"class":216},[101,29915,28724],{"class":160},[101,29917,29918],{"class":216}," tulingmall-member:0.0.5",[101,29920,28730],{"class":216},[10,29922,29923],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[10,29925,29926],{},[1449,29927],{"alt":20,"src":29928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[10,29930,29931],{},"4、启动镜像，加-d可在后台启动",[92,29933,29935],{"className":23811,"code":29934,"language":23813,"meta":20,"style":20},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[98,29936,29937],{"__ignoreMap":20},[101,29938,29939,29941,29943,29945,29947,29950],{"class":103,"line":104},[101,29940,26542],{"class":1950},[101,29942,27219],{"class":216},[101,29944,29812],{"class":160},[101,29946,29205],{"class":160},[101,29948,29949],{"class":216}," 8877:8877",[101,29951,29952],{"class":216}," tulingmall-member:0.0.5\n",[10,29954,29955],{},"加上JVM参数：",[92,29957,29959],{"className":23811,"code":29958,"language":23813,"meta":20,"style":20},"# --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",[98,29960,29961,29966,29981,29991,30000,30007],{"__ignoreMap":20},[101,29962,29963],{"class":103,"line":104},[101,29964,29965],{"class":170},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[101,29967,29968,29970,29972,29975,29977,29979],{"class":103,"line":21},[101,29969,26542],{"class":1950},[101,29971,27219],{"class":216},[101,29973,29974],{"class":160},"  -d",[101,29976,29205],{"class":160},[101,29978,29949],{"class":216},[101,29980,24667],{"class":160},[101,29982,29983,29985,29988],{"class":103,"line":1166},[101,29984,28117],{"class":111},[101,29986,29987],{"class":216},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[101,29989,29990],{"class":160},"  \\\n",[101,29992,29993,29995,29998],{"class":103,"line":1181},[101,29994,28117],{"class":111},[101,29996,29997],{"class":216},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[101,29999,29990],{"class":160},[101,30001,30002,30005],{"class":103,"line":1187},[101,30003,30004],{"class":111},"--cap-add=SYS_PTRACE  ",[101,30006,26164],{"class":160},[101,30008,30009],{"class":103,"line":1201},[101,30010,30011],{"class":111},"tulingmall-member:0.0.5\n",[10,30013,30014],{},"5、访问会员服务接口",[10,30016,30017],{},[1449,30018],{"alt":20,"src":30019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21986,30021,30023],{"id":30022},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[10,30025,30026],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[10,30028,30029,30030],{},"阿里云docker镜像仓库：",[14,30031,30032],{"href":30032,"rel":30033},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[18],[10,30035,30036],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[10,30038,30039],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[10,30041,30042],{},[1449,30043],{"alt":20,"src":30044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[10,30046,30047],{},"要把镜像推送到镜像仓库",[92,30049,30051],{"className":23811,"code":30050,"language":23813,"meta":20,"style":20},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[98,30052,30053],{"__ignoreMap":20},[101,30054,30055,30057,30059,30061],{"class":103,"line":104},[101,30056,26542],{"class":1950},[101,30058,28886],{"class":216},[101,30060,29918],{"class":216},[101,30062,30063],{"class":216}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[10,30065,30066],{},"最后将镜像推送到远程仓库",[92,30068,30070],{"className":23811,"code":30069,"language":23813,"meta":20,"style":20},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[98,30071,30072],{"__ignoreMap":20},[101,30073,30074,30076,30078],{"class":103,"line":104},[101,30075,26542],{"class":1950},[101,30077,29005],{"class":216},[101,30079,30063],{"class":216},[5114,30081,30082],{},"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":20,"searchDepth":21,"depth":21,"links":30084},[30085,30086,30087],{"id":28472,"depth":1166,"text":28473},{"id":28701,"depth":1166,"text":28702},{"id":29727,"depth":1166,"text":29728},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28464,"description":20},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30094,"title":30095,"body":30096,"description":20,"extension":24,"meta":30239,"navigation":27,"path":30240,"seo":30241,"stem":30242,"__hash__":30243},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30097,"toc":30237},[30098,30101,30106,30111,30114,30119,30124,30127,30132,30137,30140,30145,30148,30151,30154,30157,30160,30163,30183,30205,30208,30211,30231,30234],[39,30099,30095],{"id":30100},"_7vscode远程开发",[55,30102,30103],{},[58,30104,30105],{},"插件1：微软Docker工具",[10,30107,30108],{},[1449,30109],{"alt":20,"src":30110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[10,30112,30113],{},"docker扩展插件已经进化为container tools了，请安装container tools",[10,30115,30116],{},[1449,30117],{"alt":20,"src":30118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[55,30120,30121],{"start":21},[58,30122,30123],{},"插件2：微软Docker远程开发工具",[10,30125,30126],{},"下面这是远程开发的插件。",[10,30128,30129],{},[1449,30130],{"alt":20,"src":30131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[10,30133,30134],{},[1449,30135],{"alt":20,"src":30136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[10,30138,30139],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[10,30141,30142],{},[1449,30143],{"alt":20,"src":30144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[10,30146,30147],{},"安装完拓展之后，vscode进行链接：",[10,30149,30150],{},"1.按ctrl+shift+p",[10,30152,30153],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[10,30155,30156],{},"3.选择目前运行的容器",[10,30158,30159],{},"4.VS Code 会在新窗口中打开并连接到容器",[10,30161,30162],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[92,30164,30166],{"className":23811,"code":30165,"language":23813,"meta":20,"style":20},"docker run -v 主机目录:容器目录 image-name\n",[98,30167,30168],{"__ignoreMap":20},[101,30169,30170,30172,30174,30177,30180],{"class":103,"line":104},[101,30171,26542],{"class":1950},[101,30173,27219],{"class":216},[101,30175,30176],{"class":160}," -v",[101,30178,30179],{"class":216}," 主机目录:容器目录",[101,30181,30182],{"class":216}," image-name\n",[92,30184,30186],{"className":23811,"code":30185,"language":23813,"meta":20,"style":20},"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",[98,30187,30188],{"__ignoreMap":20},[101,30189,30190,30192,30194,30197,30199,30202],{"class":103,"line":104},[101,30191,26542],{"class":1950},[101,30193,27219],{"class":216},[101,30195,30196],{"class":160}," -it",[101,30198,30176],{"class":160},[101,30200,30201],{"class":216}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[101,30203,30204],{"class":216}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[10,30206,30207],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[10,30209,30210],{},"查看挂载情况：",[92,30212,30214],{"className":23811,"code":30213,"language":23813,"meta":20,"style":20},"mount | grep -i project\n",[98,30215,30216],{"__ignoreMap":20},[101,30217,30218,30221,30223,30226,30228],{"class":103,"line":104},[101,30219,30220],{"class":1950},"mount",[101,30222,25098],{"class":107},[101,30224,30225],{"class":1950}," grep",[101,30227,26419],{"class":160},[101,30229,30230],{"class":216}," project\n",[10,30232,30233],{},"也可以通过ls来进行查看",[5114,30235,30236],{},"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":20,"searchDepth":21,"depth":21,"links":30238},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30095,"description":20},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30245,"title":30246,"body":30247,"description":23365,"extension":24,"meta":30251,"navigation":27,"path":30253,"seo":30254,"stem":30255,"__hash__":30256},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30248,"toc":30249},[],{"title":20,"searchDepth":21,"depth":21,"links":30250},[],{"category":30252},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30246,"description":23365},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30258,"title":30259,"body":30260,"description":23365,"extension":24,"meta":30264,"navigation":27,"path":30265,"seo":30266,"stem":30267,"__hash__":30268},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30261,"toc":30262},[],{"title":20,"searchDepth":21,"depth":21,"links":30263},[],{"category":30252},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30259,"description":23365},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30270,"title":30271,"body":30272,"description":23365,"extension":24,"meta":30565,"navigation":27,"path":30566,"seo":30567,"stem":30568,"__hash__":30569},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30273,"toc":30563},[30274,30277,30285,30300,30305,30356,30359,30365,30552,30557,30560],[39,30275,30271],{"id":30276},"_1验证深度学习环境",[10,30278,30279,30280],{},"关于环境的安装，看",[14,30281,30284],{"href":30282,"rel":30283},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[18],"Pytorch-->深度学习",[10,30286,30287,30288,30291,30292,30295,30296,30299],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[98,30289,30290],{},"pytorch-cuda=12.4"," 是一个“ ",[261,30293,30294],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[261,30297,30298],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[10,30301,30302],{},[1449,30303],{"alt":20,"src":30304},"\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",[92,30306,30308],{"className":23811,"code":30307,"language":23813,"meta":20,"style":20},"# 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",[98,30309,30310,30315],{"__ignoreMap":20},[101,30311,30312],{"class":103,"line":104},[101,30313,30314],{"class":170},"# CUDA 12.4\n",[101,30316,30317,30320,30322,30325,30328,30331,30334,30337,30339,30342,30345,30348,30351,30353],{"class":103,"line":21},[101,30318,30319],{"class":1950},"conda",[101,30321,23823],{"class":216},[101,30323,30324],{"class":216}," pytorch==",[101,30326,30327],{"class":160},"2.5.1",[101,30329,30330],{"class":216}," torchvision==",[101,30332,30333],{"class":160},"0.20.1",[101,30335,30336],{"class":216}," torchaudio==",[101,30338,30327],{"class":160},[101,30340,30341],{"class":216}," pytorch-cuda=",[101,30343,30344],{"class":160},"12.4",[101,30346,30347],{"class":160}," -c",[101,30349,30350],{"class":216}," pytorch",[101,30352,30347],{"class":160},[101,30354,30355],{"class":216}," nvidia\n",[10,30357,30358],{},"）：",[10,30360,30361],{},[14,30362,30363],{"href":30363,"rel":30364},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[18],[92,30366,30370],{"className":30367,"code":30368,"language":30369,"meta":20,"style":20},"language-python shiki shiki-themes github-light github-dark","# 对深度学习环境进行测试\nimport torch\n# 查看cuda是否被激活\nflag=torch.cuda.is_available()\nprint(\"cuda:\", flag)   #返回true的话说明被激活\n# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\nngpu=1\ndevice=torch.device(\"cuda:0\" if(torch.cuda.is_available() and ngpu>0) else \"cpu\")\nprint(device)\nprint(torch.cuda.get_device_name(0))\nprint(torch.rand(3,3).cuda())\n# 查看cuda和cudnn的版本\ncuda_version=torch.version.cuda\nprint(\"cuda version\",cuda_version)\ncudnn_version=torch.backends.cudnn.version()\nprint(\"cudnn version\",cudnn_version)\n","python",[98,30371,30372,30377,30385,30390,30400,30416,30421,30431,30468,30475,30487,30503,30508,30518,30530,30540],{"__ignoreMap":20},[101,30373,30374],{"class":103,"line":104},[101,30375,30376],{"class":170},"# 对深度学习环境进行测试\n",[101,30378,30379,30382],{"class":103,"line":21},[101,30380,30381],{"class":107},"import",[101,30383,30384],{"class":111}," torch\n",[101,30386,30387],{"class":103,"line":1166},[101,30388,30389],{"class":170},"# 查看cuda是否被激活\n",[101,30391,30392,30395,30397],{"class":103,"line":1181},[101,30393,30394],{"class":111},"flag",[101,30396,157],{"class":107},[101,30398,30399],{"class":111},"torch.cuda.is_available()\n",[101,30401,30402,30405,30407,30410,30413],{"class":103,"line":1187},[101,30403,30404],{"class":160},"print",[101,30406,112],{"class":111},[101,30408,30409],{"class":216},"\"cuda:\"",[101,30411,30412],{"class":111},", flag)   ",[101,30414,30415],{"class":170},"#返回true的话说明被激活\n",[101,30417,30418],{"class":103,"line":1201},[101,30419,30420],{"class":170},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[101,30422,30423,30426,30428],{"class":103,"line":1207},[101,30424,30425],{"class":111},"ngpu",[101,30427,157],{"class":107},[101,30429,30430],{"class":160},"1\n",[101,30432,30433,30436,30438,30441,30444,30446,30449,30452,30455,30457,30459,30461,30463,30466],{"class":103,"line":1298},[101,30434,30435],{"class":111},"device",[101,30437,157],{"class":107},[101,30439,30440],{"class":111},"torch.device(",[101,30442,30443],{"class":216},"\"cuda:0\"",[101,30445,1691],{"class":107},[101,30447,30448],{"class":111},"(torch.cuda.is_available() ",[101,30450,30451],{"class":107},"and",[101,30453,30454],{"class":111}," ngpu",[101,30456,1071],{"class":107},[101,30458,303],{"class":160},[101,30460,13702],{"class":111},[101,30462,1688],{"class":107},[101,30464,30465],{"class":216}," \"cpu\"",[101,30467,118],{"class":111},[101,30469,30470,30472],{"class":103,"line":1304},[101,30471,30404],{"class":160},[101,30473,30474],{"class":111},"(device)\n",[101,30476,30477,30479,30482,30484],{"class":103,"line":1316},[101,30478,30404],{"class":160},[101,30480,30481],{"class":111},"(torch.cuda.get_device_name(",[101,30483,303],{"class":160},[101,30485,30486],{"class":111},"))\n",[101,30488,30489,30491,30494,30496,30498,30500],{"class":103,"line":1599},[101,30490,30404],{"class":160},[101,30492,30493],{"class":111},"(torch.rand(",[101,30495,183],{"class":160},[101,30497,489],{"class":111},[101,30499,183],{"class":160},[101,30501,30502],{"class":111},").cuda())\n",[101,30504,30505],{"class":103,"line":1604},[101,30506,30507],{"class":170},"# 查看cuda和cudnn的版本\n",[101,30509,30510,30513,30515],{"class":103,"line":1610},[101,30511,30512],{"class":111},"cuda_version",[101,30514,157],{"class":107},[101,30516,30517],{"class":111},"torch.version.cuda\n",[101,30519,30520,30522,30524,30527],{"class":103,"line":1615},[101,30521,30404],{"class":160},[101,30523,112],{"class":111},[101,30525,30526],{"class":216},"\"cuda version\"",[101,30528,30529],{"class":111},",cuda_version)\n",[101,30531,30532,30535,30537],{"class":103,"line":1629},[101,30533,30534],{"class":111},"cudnn_version",[101,30536,157],{"class":107},[101,30538,30539],{"class":111},"torch.backends.cudnn.version()\n",[101,30541,30542,30544,30546,30549],{"class":103,"line":1634},[101,30543,30404],{"class":160},[101,30545,112],{"class":111},[101,30547,30548],{"class":216},"\"cudnn version\"",[101,30550,30551],{"class":111},",cudnn_version)\n",[10,30553,30554],{},[1449,30555],{"alt":20,"src":30556},"\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",[10,30558,30559],{},"cuda:0 指的是一块显卡",[5114,30561,30562],{},"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":20,"searchDepth":21,"depth":21,"links":30564},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30271,"description":23365},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30571,"title":30572,"body":30573,"description":23365,"extension":24,"meta":50377,"navigation":27,"path":50378,"seo":50379,"stem":50380,"__hash__":50381},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30574,"toc":50371},[30575,30578,30582,30586,30589,30594,30599,30602,30607,30612,30617,30620,30624,30629,30633,30638,30641,30646,30649,30652,30655,30658,30663,30666,30671,30676,30681,30686,30689,30693,30696,30701,31305,31310,31313,31318,31321,31324,31788,31791,31794,31797,31800,33851,33854,33859,33864,34659,34662,34667,35445,35449,37108,37112,37826,37830,37834,37839,37844,37849,37852,37857,37862,37867,37872,37877,37881,37886,39168,39173,39176,39179,39182,39337,39340,39343,40559,40564,41259,41263,41267,41272,41277,41280,41285,41290,41295,41300,41305,41310,41315,41320,41325,41330,41335,41340,41345,41350,41355,41360,41365,41370,41375,41380,41385,41390,41395,41400,41405,41410,41415,41420,41425,41430,41434,41438,41441,42919,42923,44570,44574,45268,45272,45275,45278,45822,45825,45829,45832,47229,47233,47236,47814,49601,49605,49608,50368],[39,30576,30572],{"id":30577},"_2经典神经网络",[72,30579,30581],{"id":30580},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21986,30583,30585],{"id":30584},"_211原理介绍","2.1.1.原理介绍",[10,30587,30588],{},"LeNet-5",[55,30590,30591],{},[58,30592,30593],{},"原理",[10,30595,30596],{},[1449,30597],{"alt":20,"src":30598},"\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",[10,30600,30601],{},"B是batch批次；C是channel通道",[55,30603,30604],{"start":21},[58,30605,30606],{},"网络参数详细",[10,30608,30609],{},[1449,30610],{"alt":20,"src":30611},"\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",[10,30613,30614],{},[1449,30615],{"alt":20,"src":30616},"\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",[10,30618,30619],{},"AlexNet",[55,30621,30622],{},[58,30623,30593],{},[10,30625,30626],{},[1449,30627],{"alt":20,"src":30628},"\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",[55,30630,30631],{"start":21},[58,30632,30606],{},[10,30634,30635],{},[1449,30636],{"alt":20,"src":30637},"\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",[10,30639,30640],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[10,30642,30643],{},[1449,30644],{"alt":20,"src":30645},"\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",[10,30647,30648],{},"数据处理中的图像增强操作:",[10,30650,30651],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[10,30653,30654],{},"①增加数据量，保证训练数据充足；②防止过拟合",[10,30656,30657],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[10,30659,30660],{},[1449,30661],{"alt":20,"src":30662},"\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",[10,30664,30665],{},"提升网络精确度的方法：LRN正则化",[10,30667,30668],{},[1449,30669],{"alt":20,"src":30670},"\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",[10,30672,30673],{},[1449,30674],{"alt":20,"src":30675},"\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",[55,30677,30678],{"start":1166},[58,30679,30680],{},"AlexNet的总结",[10,30682,30683],{},[1449,30684],{"alt":20,"src":30685},"\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",[10,30687,30688],{},"比LeNet模型要深一丢丢",[21986,30690,30692],{"id":30691},"_212代码实现","2.1.2.代码实现",[10,30694,30695],{},"（1）LeNet",[55,30697,30698],{},[58,30699,30700],{},"模型搭建",[92,30702,30704],{"className":30367,"code":30703,"language":30369,"meta":20,"style":20},"# 导入库\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",[98,30705,30706,30711,30717,30722,30735,30740,30752,30756,30776,30781,30786,30797,30802,30821,30825,30830,30879,30891,30896,30925,30960,30987,30992,31004,31009,31029,31048,31067,31071,31076,31086,31103,31114,31129,31140,31151,31166,31181,31192,31199,31203,31217,31222,31245,31250,31255,31260,31264,31269,31274,31284],{"__ignoreMap":20},[101,30707,30708],{"class":103,"line":104},[101,30709,30710],{"class":170},"# 导入库\n",[101,30712,30713,30715],{"class":103,"line":21},[101,30714,30381],{"class":107},[101,30716,30384],{"class":111},[101,30718,30719],{"class":103,"line":1166},[101,30720,30721],{"class":170},"# 导入神经网络层\n",[101,30723,30724,30727,30730,30732],{"class":103,"line":1181},[101,30725,30726],{"class":107},"from",[101,30728,30729],{"class":111}," torch ",[101,30731,30381],{"class":107},[101,30733,30734],{"class":111}," nn\n",[101,30736,30737],{"class":103,"line":1187},[101,30738,30739],{"class":170},"# 导入展示神经网络参数的包\n",[101,30741,30742,30744,30747,30749],{"class":103,"line":1201},[101,30743,30726],{"class":107},[101,30745,30746],{"class":111}," torchsummary ",[101,30748,30381],{"class":107},[101,30750,30751],{"class":111}," summary\n",[101,30753,30754],{"class":103,"line":1207},[101,30755,2387],{"emptyLinePlaceholder":27},[101,30757,30758,30760,30763,30765,30768,30770,30773],{"class":103,"line":1298},[101,30759,14682],{"class":107},[101,30761,30762],{"class":1950}," LeNet",[101,30764,112],{"class":111},[101,30766,30767],{"class":1950},"nn",[101,30769,669],{"class":111},[101,30771,30772],{"class":1950},"Module",[101,30774,30775],{"class":111},"):\n",[101,30777,30778],{"class":103,"line":1304},[101,30779,30780],{"class":170},"    # 模型初始化:\n",[101,30782,30783],{"class":103,"line":1316},[101,30784,30785],{"class":170},"    # 定义一些网络层和激活函数\n",[101,30787,30788,30791,30794],{"class":103,"line":1599},[101,30789,30790],{"class":107},"    def",[101,30792,30793],{"class":160}," __init__",[101,30795,30796],{"class":111},"(self):\n",[101,30798,30799],{"class":103,"line":1604},[101,30800,30801],{"class":170},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[101,30803,30804,30807,30810,30813,30816,30819],{"class":103,"line":1610},[101,30805,30806],{"class":160},"        super",[101,30808,30809],{"class":111},"(LeNet,",[101,30811,30812],{"class":160},"self",[101,30814,30815],{"class":111},").",[101,30817,30818],{"class":160},"__init__",[101,30820,1963],{"class":111},[101,30822,30823],{"class":103,"line":1615},[101,30824,2387],{"emptyLinePlaceholder":27},[101,30826,30827],{"class":103,"line":1629},[101,30828,30829],{"class":170},"        # 定义网络层\n",[101,30831,30832,30835,30838,30840,30843,30846,30848,30850,30852,30855,30857,30859,30861,30864,30866,30868,30870,30873,30875,30877],{"class":103,"line":1634},[101,30833,30834],{"class":160},"        self",[101,30836,30837],{"class":111},".c1",[101,30839,157],{"class":107},[101,30841,30842],{"class":111},"nn.Conv2d(",[101,30844,30845],{"class":5204},"in_channels",[101,30847,157],{"class":107},[101,30849,329],{"class":160},[101,30851,489],{"class":111},[101,30853,30854],{"class":5204},"out_channels",[101,30856,157],{"class":107},[101,30858,455],{"class":160},[101,30860,489],{"class":111},[101,30862,30863],{"class":5204},"kernel_size",[101,30865,157],{"class":107},[101,30867,430],{"class":160},[101,30869,489],{"class":111},[101,30871,30872],{"class":5204},"padding",[101,30874,157],{"class":107},[101,30876,189],{"class":160},[101,30878,118],{"class":111},[101,30880,30881,30883,30886,30888],{"class":103,"line":1640},[101,30882,30834],{"class":160},[101,30884,30885],{"class":111},".sig",[101,30887,157],{"class":107},[101,30889,30890],{"class":111},"nn.Sigmoid()\n",[101,30892,30893],{"class":103,"line":1661},[101,30894,30895],{"class":170},"        # 定义池化\n",[101,30897,30898,30900,30903,30905,30908,30910,30912,30914,30916,30919,30921,30923],{"class":103,"line":1666},[101,30899,30834],{"class":160},[101,30901,30902],{"class":111},".s2",[101,30904,157],{"class":107},[101,30906,30907],{"class":111},"nn.AvgPool2d(",[101,30909,30863],{"class":5204},[101,30911,157],{"class":107},[101,30913,189],{"class":160},[101,30915,489],{"class":111},[101,30917,30918],{"class":5204},"stride",[101,30920,157],{"class":107},[101,30922,189],{"class":160},[101,30924,118],{"class":111},[101,30926,30927,30929,30932,30934,30936,30938,30940,30942,30944,30946,30948,30950,30952,30954,30956,30958],{"class":103,"line":1680},[101,30928,30834],{"class":160},[101,30930,30931],{"class":111},".c3",[101,30933,157],{"class":107},[101,30935,30842],{"class":111},[101,30937,30845],{"class":5204},[101,30939,157],{"class":107},[101,30941,455],{"class":160},[101,30943,489],{"class":111},[101,30945,30854],{"class":5204},[101,30947,157],{"class":107},[101,30949,712],{"class":160},[101,30951,489],{"class":111},[101,30953,30863],{"class":5204},[101,30955,157],{"class":107},[101,30957,430],{"class":160},[101,30959,118],{"class":111},[101,30961,30962,30964,30967,30969,30971,30973,30975,30977,30979,30981,30983,30985],{"class":103,"line":1685},[101,30963,30834],{"class":160},[101,30965,30966],{"class":111},".s4",[101,30968,157],{"class":107},[101,30970,30907],{"class":111},[101,30972,30863],{"class":5204},[101,30974,157],{"class":107},[101,30976,189],{"class":160},[101,30978,489],{"class":111},[101,30980,30918],{"class":5204},[101,30982,157],{"class":107},[101,30984,189],{"class":160},[101,30986,118],{"class":111},[101,30988,30989],{"class":103,"line":1714},[101,30990,30991],{"class":170},"        # 定义平展层\n",[101,30993,30994,30996,30999,31001],{"class":103,"line":1719},[101,30995,30834],{"class":160},[101,30997,30998],{"class":111},".flatten",[101,31000,157],{"class":107},[101,31002,31003],{"class":111},"nn.Flatten()\n",[101,31005,31006],{"class":103,"line":1736},[101,31007,31008],{"class":170},"        # 定义全连接层\n",[101,31010,31011,31013,31016,31018,31021,31023,31025,31027],{"class":103,"line":1741},[101,31012,30834],{"class":160},[101,31014,31015],{"class":111},".f5",[101,31017,157],{"class":107},[101,31019,31020],{"class":111},"nn.Linear(",[101,31022,3974],{"class":160},[101,31024,489],{"class":111},[101,31026,928],{"class":160},[101,31028,118],{"class":111},[101,31030,31031,31033,31036,31038,31040,31042,31044,31046],{"class":103,"line":1746},[101,31032,30834],{"class":160},[101,31034,31035],{"class":111},".f6",[101,31037,157],{"class":107},[101,31039,31020],{"class":111},[101,31041,928],{"class":160},[101,31043,489],{"class":111},[101,31045,822],{"class":160},[101,31047,118],{"class":111},[101,31049,31050,31052,31055,31057,31059,31061,31063,31065],{"class":103,"line":1751},[101,31051,30834],{"class":160},[101,31053,31054],{"class":111},".f7",[101,31056,157],{"class":107},[101,31058,31020],{"class":111},[101,31060,822],{"class":160},[101,31062,489],{"class":111},[101,31064,557],{"class":160},[101,31066,118],{"class":111},[101,31068,31069],{"class":103,"line":1765},[101,31070,2387],{"emptyLinePlaceholder":27},[101,31072,31073],{"class":103,"line":1770},[101,31074,31075],{"class":170},"    # 写工具->写前向传播\n",[101,31077,31078,31080,31083],{"class":103,"line":2564},[101,31079,30790],{"class":107},[101,31081,31082],{"class":1950}," forward",[101,31084,31085],{"class":111},"(self,x):\n",[101,31087,31088,31091,31093,31095,31098,31100],{"class":103,"line":2578},[101,31089,31090],{"class":111},"        x",[101,31092,157],{"class":107},[101,31094,30812],{"class":160},[101,31096,31097],{"class":111},".sig(",[101,31099,30812],{"class":160},[101,31101,31102],{"class":111},".c1(x))\n",[101,31104,31105,31107,31109,31111],{"class":103,"line":2586},[101,31106,31090],{"class":111},[101,31108,157],{"class":107},[101,31110,30812],{"class":160},[101,31112,31113],{"class":111},".s2(x)\n",[101,31115,31116,31118,31120,31122,31124,31126],{"class":103,"line":2591},[101,31117,31090],{"class":111},[101,31119,157],{"class":107},[101,31121,30812],{"class":160},[101,31123,31097],{"class":111},[101,31125,30812],{"class":160},[101,31127,31128],{"class":111},".c3(x))\n",[101,31130,31131,31133,31135,31137],{"class":103,"line":2597},[101,31132,31090],{"class":111},[101,31134,157],{"class":107},[101,31136,30812],{"class":160},[101,31138,31139],{"class":111},".s4(x)\n",[101,31141,31142,31144,31146,31148],{"class":103,"line":2603},[101,31143,31090],{"class":111},[101,31145,157],{"class":107},[101,31147,30812],{"class":160},[101,31149,31150],{"class":111},".flatten(x)\n",[101,31152,31153,31155,31157,31159,31161,31163],{"class":103,"line":2608},[101,31154,31090],{"class":111},[101,31156,157],{"class":107},[101,31158,30812],{"class":160},[101,31160,31097],{"class":111},[101,31162,30812],{"class":160},[101,31164,31165],{"class":111},".f5(x))\n",[101,31167,31168,31170,31172,31174,31176,31178],{"class":103,"line":7936},[101,31169,31090],{"class":111},[101,31171,157],{"class":107},[101,31173,30812],{"class":160},[101,31175,31097],{"class":111},[101,31177,30812],{"class":160},[101,31179,31180],{"class":111},".f6(x))\n",[101,31182,31183,31185,31187,31189],{"class":103,"line":7960},[101,31184,31090],{"class":111},[101,31186,157],{"class":107},[101,31188,30812],{"class":160},[101,31190,31191],{"class":111},".f7(x)\n",[101,31193,31194,31196],{"class":103,"line":7965},[101,31195,14740],{"class":107},[101,31197,31198],{"class":111}," x\n",[101,31200,31201],{"class":103,"line":7971},[101,31202,2387],{"emptyLinePlaceholder":27},[101,31204,31205,31207,31210,31212,31215],{"class":103,"line":7998},[101,31206,1518],{"class":107},[101,31208,31209],{"class":160}," __name__",[101,31211,2936],{"class":107},[101,31213,31214],{"class":216},"\"__main__\"",[101,31216,3726],{"class":111},[101,31218,31219],{"class":103,"line":8003},[101,31220,31221],{"class":170},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[101,31223,31224,31227,31229,31231,31234,31236,31239,31241,31243],{"class":103,"line":8009},[101,31225,31226],{"class":111},"    device",[101,31228,157],{"class":107},[101,31230,30440],{"class":111},[101,31232,31233],{"class":216},"\"cuda\"",[101,31235,1691],{"class":107},[101,31237,31238],{"class":111}," torch.cuda.is_available() ",[101,31240,1688],{"class":107},[101,31242,30465],{"class":216},[101,31244,118],{"class":111},[101,31246,31247],{"class":103,"line":8021},[101,31248,31249],{"class":170},"    # 如果就是想指定用cpu用下方代码:\n",[101,31251,31252],{"class":103,"line":8033},[101,31253,31254],{"class":170},"    # device=\"cpu\"\n",[101,31256,31257],{"class":103,"line":8045},[101,31258,31259],{"class":170},"    # print(device)\n",[101,31261,31262],{"class":103,"line":9704},[101,31263,2387],{"emptyLinePlaceholder":27},[101,31265,31266],{"class":103,"line":9729},[101,31267,31268],{"class":170},"    # 实例化模型\n",[101,31270,31271],{"class":103,"line":9752},[101,31272,31273],{"class":170},"    # 将模型放到设备中去运行\n",[101,31275,31276,31279,31281],{"class":103,"line":9776},[101,31277,31278],{"class":111},"    model",[101,31280,157],{"class":107},[101,31282,31283],{"class":111},"LeNet().to(device)\n",[101,31285,31286,31289,31292,31294,31296,31298,31300,31302],{"class":103,"line":9781},[101,31287,31288],{"class":160},"    print",[101,31290,31291],{"class":111},"(summary(model,(",[101,31293,329],{"class":160},[101,31295,489],{"class":111},[101,31297,1012],{"class":160},[101,31299,489],{"class":111},[101,31301,1012],{"class":160},[101,31303,31304],{"class":111},")))\n",[10,31306,31307],{},[1449,31308],{"alt":20,"src":31309},"\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",[10,31311,31312],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[55,31314,31315],{"start":21},[58,31316,31317],{},"训练",[10,31319,31320],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[10,31322,31323],{},"在训练之前可以将数据展示看一下",[92,31325,31327],{"className":30367,"code":31326,"language":30369,"meta":20,"style":20},"# 建立画图的函数，用于展示数据\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",[98,31328,31329,31334,31339,31351,31363,31376,31381,31393,31398,31410,31415,31427,31431,31435,31456,31468,31473,31494,31505,31509,31514,31532,31543,31548,31559,31564,31575,31579,31584,31599,31612,31617,31622,31635,31648,31661,31666,31670,31675,31695,31712,31732,31745,31758,31768,31783],{"__ignoreMap":20},[101,31330,31331],{"class":103,"line":104},[101,31332,31333],{"class":170},"# 建立画图的函数，用于展示数据\n",[101,31335,31336],{"class":103,"line":21},[101,31337,31338],{"class":170},"# torchvision中包含很多内置的数据集\n",[101,31340,31341,31343,31346,31348],{"class":103,"line":1166},[101,31342,30726],{"class":107},[101,31344,31345],{"class":111}," sklearn.externals.array_api_compat.torch ",[101,31347,30381],{"class":107},[101,31349,31350],{"class":111}," squeeze\n",[101,31352,31353,31355,31358,31360],{"class":103,"line":1181},[101,31354,30726],{"class":107},[101,31356,31357],{"class":111}," torchvision.datasets ",[101,31359,30381],{"class":107},[101,31361,31362],{"class":111}," FashionMNIST\n",[101,31364,31365,31367,31370,31373],{"class":103,"line":1187},[101,31366,30381],{"class":107},[101,31368,31369],{"class":111}," numpy ",[101,31371,31372],{"class":107},"as",[101,31374,31375],{"class":111}," np\n",[101,31377,31378],{"class":103,"line":1201},[101,31379,31380],{"class":170},"# 引入处理数据集的包\n",[101,31382,31383,31385,31388,31390],{"class":103,"line":1207},[101,31384,30726],{"class":107},[101,31386,31387],{"class":111}," torchvision ",[101,31389,30381],{"class":107},[101,31391,31392],{"class":111}," transforms\n",[101,31394,31395],{"class":103,"line":1298},[101,31396,31397],{"class":170},"# 从torch库中引入数据处理的包\n",[101,31399,31400,31402,31405,31407],{"class":103,"line":1304},[101,31401,30381],{"class":107},[101,31403,31404],{"class":111}," torch.utils.data ",[101,31406,31372],{"class":107},[101,31408,31409],{"class":111}," Data\n",[101,31411,31412],{"class":103,"line":1316},[101,31413,31414],{"class":170},"# 导入画图的库\n",[101,31416,31417,31419,31422,31424],{"class":103,"line":1599},[101,31418,30381],{"class":107},[101,31420,31421],{"class":111}," matplotlib.pyplot ",[101,31423,31372],{"class":107},[101,31425,31426],{"class":111}," plt\n",[101,31428,31429],{"class":103,"line":1604},[101,31430,2387],{"emptyLinePlaceholder":27},[101,31432,31433],{"class":103,"line":1610},[101,31434,2387],{"emptyLinePlaceholder":27},[101,31436,31437,31440,31442,31445,31448,31450,31453],{"class":103,"line":1615},[101,31438,31439],{"class":111},"train_data",[101,31441,157],{"class":107},[101,31443,31444],{"class":111},"FashionMNIST(",[101,31446,31447],{"class":5204},"root",[101,31449,157],{"class":107},[101,31451,31452],{"class":216},"'.\u002Fdata'",[101,31454,31455],{"class":111},",\n",[101,31457,31458,31461,31463,31466],{"class":103,"line":1629},[101,31459,31460],{"class":5204},"                        train",[101,31462,157],{"class":107},[101,31464,31465],{"class":160},"True",[101,31467,31455],{"class":111},[101,31469,31470],{"class":103,"line":1634},[101,31471,31472],{"class":170},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[101,31474,31475,31478,31480,31483,31486,31488,31491],{"class":103,"line":1640},[101,31476,31477],{"class":5204},"                        transform",[101,31479,157],{"class":107},[101,31481,31482],{"class":111},"transforms.Compose([transforms.Resize(",[101,31484,31485],{"class":5204},"size",[101,31487,157],{"class":107},[101,31489,31490],{"class":160},"224",[101,31492,31493],{"class":111},"),transforms.ToTensor()]),\n",[101,31495,31496,31499,31501,31503],{"class":103,"line":1661},[101,31497,31498],{"class":5204},"                        download",[101,31500,157],{"class":107},[101,31502,31465],{"class":160},[101,31504,118],{"class":111},[101,31506,31507],{"class":103,"line":1666},[101,31508,2387],{"emptyLinePlaceholder":27},[101,31510,31511],{"class":103,"line":1680},[101,31512,31513],{"class":170},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[101,31515,31516,31519,31521,31524,31527,31529],{"class":103,"line":1685},[101,31517,31518],{"class":111},"train_loader",[101,31520,157],{"class":107},[101,31522,31523],{"class":111},"Data.DataLoader(",[101,31525,31526],{"class":5204},"dataset",[101,31528,157],{"class":107},[101,31530,31531],{"class":111},"train_data,\n",[101,31533,31534,31537,31539,31541],{"class":103,"line":1714},[101,31535,31536],{"class":5204},"                             batch_size",[101,31538,157],{"class":107},[101,31540,315],{"class":160},[101,31542,31455],{"class":111},[101,31544,31545],{"class":103,"line":1719},[101,31546,31547],{"class":170},"                             # 数据是否打乱\n",[101,31549,31550,31553,31555,31557],{"class":103,"line":1736},[101,31551,31552],{"class":5204},"                             shuffle",[101,31554,157],{"class":107},[101,31556,31465],{"class":160},[101,31558,31455],{"class":111},[101,31560,31561],{"class":103,"line":1741},[101,31562,31563],{"class":170},"                             # 规定加载数据的进程\n",[101,31565,31566,31569,31571,31573],{"class":103,"line":1746},[101,31567,31568],{"class":5204},"                             num_workers",[101,31570,157],{"class":107},[101,31572,303],{"class":160},[101,31574,118],{"class":111},[101,31576,31577],{"class":103,"line":1751},[101,31578,2387],{"emptyLinePlaceholder":27},[101,31580,31581],{"class":103,"line":1765},[101,31582,31583],{"class":170},"# 获得一个batch的数据\n",[101,31585,31586,31588,31591,31593,31596],{"class":103,"line":1770},[101,31587,3012],{"class":107},[101,31589,31590],{"class":111}," step,(b_x,b_y) ",[101,31592,26032],{"class":107},[101,31594,31595],{"class":160}," enumerate",[101,31597,31598],{"class":111},"(train_loader):\n",[101,31600,31601,31603,31606,31608,31610],{"class":103,"line":2564},[101,31602,3088],{"class":107},[101,31604,31605],{"class":111}," step ",[101,31607,1071],{"class":107},[101,31609,4080],{"class":160},[101,31611,3726],{"class":111},[101,31613,31614],{"class":103,"line":2578},[101,31615,31616],{"class":107},"        break\n",[101,31618,31619],{"class":103,"line":2586},[101,31620,31621],{"class":170},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[101,31623,31624,31627,31629,31632],{"class":103,"line":2591},[101,31625,31626],{"class":111},"batch_x",[101,31628,157],{"class":107},[101,31630,31631],{"class":111},"b_x.squeeze().numpy()  ",[101,31633,31634],{"class":170},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[101,31636,31637,31640,31642,31645],{"class":103,"line":2597},[101,31638,31639],{"class":111},"batch_y",[101,31641,157],{"class":107},[101,31643,31644],{"class":111},"b_y.numpy()   ",[101,31646,31647],{"class":170},"#将张量转换成功numpy数组\n",[101,31649,31650,31653,31655,31658],{"class":103,"line":2603},[101,31651,31652],{"class":111},"class_label",[101,31654,157],{"class":107},[101,31656,31657],{"class":111},"train_data.classes  ",[101,31659,31660],{"class":170},"#训练集标签\n",[101,31662,31663],{"class":103,"line":2608},[101,31664,31665],{"class":170},"# print(class_label)\n",[101,31667,31668],{"class":103,"line":7936},[101,31669,2387],{"emptyLinePlaceholder":27},[101,31671,31672],{"class":103,"line":7960},[101,31673,31674],{"class":170},"# 可视化一个batch的图像\n",[101,31676,31677,31680,31683,31685,31687,31689,31691,31693],{"class":103,"line":7965},[101,31678,31679],{"class":111},"plt.figure(",[101,31681,31682],{"class":5204},"figsize",[101,31684,157],{"class":107},[101,31686,112],{"class":111},[101,31688,609],{"class":160},[101,31690,489],{"class":111},[101,31692,430],{"class":160},[101,31694,30486],{"class":111},[101,31696,31697,31699,31702,31704,31707,31709],{"class":103,"line":7971},[101,31698,3012],{"class":107},[101,31700,31701],{"class":111}," ii ",[101,31703,26032],{"class":107},[101,31705,31706],{"class":111}," np.arange(",[101,31708,7346],{"class":160},[101,31710,31711],{"class":111},"(batch_y)):\n",[101,31713,31714,31717,31719,31721,31723,31726,31728,31730],{"class":103,"line":7998},[101,31715,31716],{"class":111},"    plt.subplot(",[101,31718,404],{"class":160},[101,31720,489],{"class":111},[101,31722,712],{"class":160},[101,31724,31725],{"class":111},",ii ",[101,31727,592],{"class":107},[101,31729,25107],{"class":160},[101,31731,118],{"class":111},[101,31733,31734,31737,31740,31742],{"class":103,"line":8003},[101,31735,31736],{"class":111},"    plt.imshow(batch_x[ii,:,:],",[101,31738,31739],{"class":5204},"cmap",[101,31741,157],{"class":107},[101,31743,31744],{"class":111},"plt.cm.gray)\n",[101,31746,31747,31750,31752,31754,31756],{"class":103,"line":8009},[101,31748,31749],{"class":111},"    plt.title(class_label[batch_y[ii]],",[101,31751,31485],{"class":5204},[101,31753,157],{"class":107},[101,31755,557],{"class":160},[101,31757,118],{"class":111},[101,31759,31760,31763,31766],{"class":103,"line":8021},[101,31761,31762],{"class":111},"    plt.axis(",[101,31764,31765],{"class":216},"\"off\"",[101,31767,118],{"class":111},[101,31769,31770,31773,31776,31778,31781],{"class":103,"line":8033},[101,31771,31772],{"class":111},"    plt.subplots_adjust(",[101,31774,31775],{"class":5204},"wspace",[101,31777,157],{"class":107},[101,31779,31780],{"class":160},"0.05",[101,31782,118],{"class":111},[101,31784,31785],{"class":103,"line":8045},[101,31786,31787],{"class":111},"plt.show()\n",[10,31789,31790],{},"用matplotlib进行展示的过程可以后续再补",[10,31792,31793],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[10,31795,31796],{},"训练次数就是按照批次过整个训练集数据的次数",[10,31798,31799],{},"模型训练：",[92,31801,31803],{"className":30367,"code":31802,"language":30369,"meta":20,"style":20},"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",[98,31804,31805,31812,31819,31823,31835,31841,31852,31862,31872,31882,31892,31897,31909,31919,31923,31927,31932,31943,31956,31967,31984,31995,32034,32050,32062,32073,32078,32089,32105,32116,32127,32138,32145,32149,32154,32159,32163,32168,32178,32199,32203,32207,32212,32217,32222,32242,32246,32251,32261,32265,32270,32279,32284,32289,32294,32304,32308,32312,32317,32322,32332,32337,32347,32352,32361,32366,32375,32380,32389,32393,32398,32408,32412,32416,32421,32436,32464,32479,32483,32488,32493,32502,32507,32516,32521,32530,32535,32544,32549,32558,32563,32572,32577,32590,32595,32605,32610,32620,32626,32632,32638,32644,32655,32661,32681,32687,32698,32704,32710,32716,32722,32728,32734,32740,32760,32766,32782,32788,32802,32808,32823,32829,32838,32844,32853,32859,32865,32874,32880,32891,32897,32916,32922,32933,32939,32959,32975,32981,32995,33001,33007,33018,33024,33030,33040,33046,33057,33063,33073,33078,33084,33133,33180,33185,33191,33210,33216,33236,33242,33248,33258,33263,33269,33285,33330,33336,33342,33348,33359,33365,33371,33377,33395,33409,33418,33427,33436,33445,33451,33457,33465,33470,33476,33487,33493,33513,33519,33525,33531,33548,33554,33560,33566,33572,33578,33605,33629,33635,33641,33647,33658,33669,33675,33692,33715,33738,33744,33749,33758,33768,33774,33779,33785,33798,33804,33815,33826,33845],{"__ignoreMap":20},[101,31806,31807,31809],{"class":103,"line":104},[101,31808,30381],{"class":107},[101,31810,31811],{"class":111}," copy\n",[101,31813,31814,31816],{"class":103,"line":21},[101,31815,30381],{"class":107},[101,31817,31818],{"class":111}," time\n",[101,31820,31821],{"class":103,"line":1166},[101,31822,2387],{"emptyLinePlaceholder":27},[101,31824,31825,31827,31830,31832],{"class":103,"line":1181},[101,31826,30381],{"class":107},[101,31828,31829],{"class":111}," pandas ",[101,31831,31372],{"class":107},[101,31833,31834],{"class":111}," pd\n",[101,31836,31837,31839],{"class":103,"line":1187},[101,31838,30381],{"class":107},[101,31840,30384],{"class":111},[101,31842,31843,31845,31847,31849],{"class":103,"line":1201},[101,31844,30726],{"class":107},[101,31846,31404],{"class":111},[101,31848,30381],{"class":107},[101,31850,31851],{"class":111}," Dataset\n",[101,31853,31854,31856,31858,31860],{"class":103,"line":1207},[101,31855,30726],{"class":107},[101,31857,31357],{"class":111},[101,31859,30381],{"class":107},[101,31861,31362],{"class":111},[101,31863,31864,31866,31868,31870],{"class":103,"line":1298},[101,31865,30726],{"class":107},[101,31867,31387],{"class":111},[101,31869,30381],{"class":107},[101,31871,31392],{"class":111},[101,31873,31874,31876,31878,31880],{"class":103,"line":1304},[101,31875,30381],{"class":107},[101,31877,31404],{"class":111},[101,31879,31372],{"class":107},[101,31881,31409],{"class":111},[101,31883,31884,31886,31888,31890],{"class":103,"line":1316},[101,31885,30381],{"class":107},[101,31887,31421],{"class":111},[101,31889,31372],{"class":107},[101,31891,31426],{"class":111},[101,31893,31894],{"class":103,"line":1599},[101,31895,31896],{"class":170},"# 导入模型\n",[101,31898,31899,31901,31904,31906],{"class":103,"line":1604},[101,31900,30726],{"class":107},[101,31902,31903],{"class":111}," model ",[101,31905,30381],{"class":107},[101,31907,31908],{"class":111}," LeNet\n",[101,31910,31911,31913,31915,31917],{"class":103,"line":1610},[101,31912,30726],{"class":107},[101,31914,30729],{"class":111},[101,31916,30381],{"class":107},[101,31918,30734],{"class":111},[101,31920,31921],{"class":103,"line":1615},[101,31922,2387],{"emptyLinePlaceholder":27},[101,31924,31925],{"class":103,"line":1629},[101,31926,2387],{"emptyLinePlaceholder":27},[101,31928,31929],{"class":103,"line":1634},[101,31930,31931],{"class":170},"# 处理训练集与验证集函数--->划分数据集\n",[101,31933,31934,31937,31940],{"class":103,"line":1640},[101,31935,31936],{"class":107},"def",[101,31938,31939],{"class":1950}," train_val_data_process",[101,31941,31942],{"class":111},"():\n",[101,31944,31945,31948,31950,31952,31954],{"class":103,"line":1661},[101,31946,31947],{"class":111},"    train_data",[101,31949,157],{"class":107},[101,31951,31444],{"class":111},[101,31953,31452],{"class":216},[101,31955,31455],{"class":111},[101,31957,31958,31961,31963,31965],{"class":103,"line":1666},[101,31959,31960],{"class":5204},"                            train",[101,31962,157],{"class":107},[101,31964,31465],{"class":160},[101,31966,31455],{"class":111},[101,31968,31969,31972,31974,31976,31978,31980,31982],{"class":103,"line":1680},[101,31970,31971],{"class":5204},"                            transform",[101,31973,157],{"class":107},[101,31975,31482],{"class":111},[101,31977,31485],{"class":5204},[101,31979,157],{"class":107},[101,31981,1012],{"class":160},[101,31983,31493],{"class":111},[101,31985,31986,31989,31991,31993],{"class":103,"line":1685},[101,31987,31988],{"class":5204},"                            download",[101,31990,157],{"class":107},[101,31992,31465],{"class":160},[101,31994,118],{"class":111},[101,31996,31997,32000,32002,32005,32008,32010,32013,32015,32017,32020,32022,32024,32027,32029,32031],{"class":103,"line":1714},[101,31998,31999],{"class":111},"    train_data,val_data",[101,32001,157],{"class":107},[101,32003,32004],{"class":111},"Data.random_split(train_data,[",[101,32006,32007],{"class":160},"round",[101,32009,112],{"class":111},[101,32011,32012],{"class":160},"0.8",[101,32014,566],{"class":107},[101,32016,7346],{"class":160},[101,32018,32019],{"class":111},"(train_data)),",[101,32021,32007],{"class":160},[101,32023,112],{"class":111},[101,32025,32026],{"class":160},"0.2",[101,32028,566],{"class":107},[101,32030,7346],{"class":160},[101,32032,32033],{"class":111},"(train_data))])\n",[101,32035,32036,32039,32041,32044,32046,32048],{"class":103,"line":1719},[101,32037,32038],{"class":111},"    train_dataloader ",[101,32040,157],{"class":107},[101,32042,32043],{"class":111}," Data.DataLoader(",[101,32045,31526],{"class":5204},[101,32047,157],{"class":107},[101,32049,31531],{"class":111},[101,32051,32052,32055,32057,32060],{"class":103,"line":1736},[101,32053,32054],{"class":5204},"                                       batch_size",[101,32056,157],{"class":107},[101,32058,32059],{"class":160},"128",[101,32061,31455],{"class":111},[101,32063,32064,32067,32069,32071],{"class":103,"line":1741},[101,32065,32066],{"class":5204},"                                       shuffle",[101,32068,157],{"class":107},[101,32070,31465],{"class":160},[101,32072,31455],{"class":111},[101,32074,32075],{"class":103,"line":1746},[101,32076,32077],{"class":170},"                                       # 规定8个进程\n",[101,32079,32080,32083,32085,32087],{"class":103,"line":1751},[101,32081,32082],{"class":5204},"                                       num_workers",[101,32084,157],{"class":107},[101,32086,506],{"class":160},[101,32088,118],{"class":111},[101,32090,32091,32094,32096,32098,32100,32102],{"class":103,"line":1765},[101,32092,32093],{"class":111},"    val_dataloader",[101,32095,157],{"class":107},[101,32097,31523],{"class":111},[101,32099,31526],{"class":5204},[101,32101,157],{"class":107},[101,32103,32104],{"class":111},"val_data,\n",[101,32106,32107,32110,32112,32114],{"class":103,"line":1770},[101,32108,32109],{"class":5204},"                                   batch_size",[101,32111,157],{"class":107},[101,32113,32059],{"class":160},[101,32115,31455],{"class":111},[101,32117,32118,32121,32123,32125],{"class":103,"line":2564},[101,32119,32120],{"class":5204},"                                   shuffle",[101,32122,157],{"class":107},[101,32124,31465],{"class":160},[101,32126,31455],{"class":111},[101,32128,32129,32132,32134,32136],{"class":103,"line":2578},[101,32130,32131],{"class":5204},"                                   num_workers",[101,32133,157],{"class":107},[101,32135,506],{"class":160},[101,32137,118],{"class":111},[101,32139,32140,32142],{"class":103,"line":2586},[101,32141,4077],{"class":107},[101,32143,32144],{"class":111}," train_dataloader,val_dataloader\n",[101,32146,32147],{"class":103,"line":2591},[101,32148,2387],{"emptyLinePlaceholder":27},[101,32150,32151],{"class":103,"line":2597},[101,32152,32153],{"class":170},"# 验证是否出错\n",[101,32155,32156],{"class":103,"line":2603},[101,32157,32158],{"class":170},"# train_val_data_process()\n",[101,32160,32161],{"class":103,"line":2608},[101,32162,2387],{"emptyLinePlaceholder":27},[101,32164,32165],{"class":103,"line":7936},[101,32166,32167],{"class":170},"# 定义模型训练函数\n",[101,32169,32170,32172,32175],{"class":103,"line":7960},[101,32171,31936],{"class":107},[101,32173,32174],{"class":1950}," train_model_process",[101,32176,32177],{"class":111},"(model,train_dataloader,val_dataloader,num_epochs):\n",[101,32179,32180,32182,32184,32186,32188,32190,32192,32194,32197],{"class":103,"line":7965},[101,32181,31226],{"class":111},[101,32183,157],{"class":107},[101,32185,30440],{"class":111},[101,32187,31233],{"class":216},[101,32189,1691],{"class":107},[101,32191,31238],{"class":111},[101,32193,1688],{"class":107},[101,32195,32196],{"class":216}," 'cpu'",[101,32198,118],{"class":111},[101,32200,32201],{"class":103,"line":7971},[101,32202,2387],{"emptyLinePlaceholder":27},[101,32204,32205],{"class":103,"line":7998},[101,32206,2387],{"emptyLinePlaceholder":27},[101,32208,32209],{"class":103,"line":8003},[101,32210,32211],{"class":170},"    # 定义优化器\n",[101,32213,32214],{"class":103,"line":8009},[101,32215,32216],{"class":170},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[101,32218,32219],{"class":103,"line":8021},[101,32220,32221],{"class":170},"    # lr为学习率\n",[101,32223,32224,32227,32229,32232,32235,32237,32240],{"class":103,"line":8033},[101,32225,32226],{"class":111},"    optimizer",[101,32228,157],{"class":107},[101,32230,32231],{"class":111},"torch.optim.Adam(model.parameters(),",[101,32233,32234],{"class":5204},"lr",[101,32236,157],{"class":107},[101,32238,32239],{"class":160},"0.001",[101,32241,118],{"class":111},[101,32243,32244],{"class":103,"line":8045},[101,32245,2387],{"emptyLinePlaceholder":27},[101,32247,32248],{"class":103,"line":9704},[101,32249,32250],{"class":170},"    # 定义损失函数使用交叉熵损失函数\n",[101,32252,32253,32256,32258],{"class":103,"line":9729},[101,32254,32255],{"class":111},"    criterion",[101,32257,157],{"class":107},[101,32259,32260],{"class":111},"nn.CrossEntropyLoss()\n",[101,32262,32263],{"class":103,"line":9752},[101,32264,2387],{"emptyLinePlaceholder":27},[101,32266,32267],{"class":103,"line":9776},[101,32268,32269],{"class":170},"    # 将模型放到GPU中进行训练\n",[101,32271,32272,32274,32276],{"class":103,"line":9781},[101,32273,31278],{"class":111},[101,32275,157],{"class":107},[101,32277,32278],{"class":111},"model.to(device)\n",[101,32280,32281],{"class":103,"line":9786},[101,32282,32283],{"class":170},"    # 复制当前模型的参数\n",[101,32285,32286],{"class":103,"line":9791},[101,32287,32288],{"class":170},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[101,32290,32291],{"class":103,"line":9800},[101,32292,32293],{"class":170},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[101,32295,32296,32299,32301],{"class":103,"line":9805},[101,32297,32298],{"class":111},"    best_model_wts",[101,32300,157],{"class":107},[101,32302,32303],{"class":111},"copy.deepcopy(model.state_dict())\n",[101,32305,32306],{"class":103,"line":9811},[101,32307,2387],{"emptyLinePlaceholder":27},[101,32309,32310],{"class":103,"line":9832},[101,32311,2387],{"emptyLinePlaceholder":27},[101,32313,32314],{"class":103,"line":9838},[101,32315,32316],{"class":170},"    # 初始化参数\n",[101,32318,32319],{"class":103,"line":9852},[101,32320,32321],{"class":170},"    # 最高准确度\n",[101,32323,32324,32327,32329],{"class":103,"line":9858},[101,32325,32326],{"class":111},"    best_acc",[101,32328,157],{"class":107},[101,32330,32331],{"class":160},"0.0\n",[101,32333,32334],{"class":103,"line":9885},[101,32335,32336],{"class":170},"    # 训练集损失列表\n",[101,32338,32339,32342,32344],{"class":103,"line":9894},[101,32340,32341],{"class":111},"    train_loss_all",[101,32343,157],{"class":107},[101,32345,32346],{"class":111},"[]\n",[101,32348,32349],{"class":103,"line":9900},[101,32350,32351],{"class":170},"    # 验证集函数列表\n",[101,32353,32354,32357,32359],{"class":103,"line":9908},[101,32355,32356],{"class":111},"    val_loss_all",[101,32358,157],{"class":107},[101,32360,32346],{"class":111},[101,32362,32363],{"class":103,"line":9913},[101,32364,32365],{"class":170},"    # 训练集准确度列表\n",[101,32367,32368,32371,32373],{"class":103,"line":16592},[101,32369,32370],{"class":111},"    train_acc_all",[101,32372,157],{"class":107},[101,32374,32346],{"class":111},[101,32376,32377],{"class":103,"line":16598},[101,32378,32379],{"class":170},"    # 验证集准确度列表\n",[101,32381,32382,32385,32387],{"class":103,"line":16621},[101,32383,32384],{"class":111},"    val_acc_all",[101,32386,157],{"class":107},[101,32388,32346],{"class":111},[101,32390,32391],{"class":103,"line":16627},[101,32392,2387],{"emptyLinePlaceholder":27},[101,32394,32395],{"class":103,"line":16650},[101,32396,32397],{"class":170},"    # 保存当前时间--->方便看每轮训练的时间\n",[101,32399,32400,32403,32405],{"class":103,"line":16664},[101,32401,32402],{"class":111},"    since",[101,32404,157],{"class":107},[101,32406,32407],{"class":111},"time.time()\n",[101,32409,32410],{"class":103,"line":16684},[101,32411,2387],{"emptyLinePlaceholder":27},[101,32413,32414],{"class":103,"line":16690},[101,32415,2387],{"emptyLinePlaceholder":27},[101,32417,32418],{"class":103,"line":16701},[101,32419,32420],{"class":170},"    # 准备工作完成--->开始训练模型\n",[101,32422,32423,32425,32428,32430,32433],{"class":103,"line":16724},[101,32424,3188],{"class":107},[101,32426,32427],{"class":111}," epoch ",[101,32429,26032],{"class":107},[101,32431,32432],{"class":160}," range",[101,32434,32435],{"class":111},"(num_epochs):\n",[101,32437,32438,32441,32443,32446,32449,32451,32453,32455,32458,32460,32462],{"class":103,"line":16746},[101,32439,32440],{"class":160},"        print",[101,32442,112],{"class":111},[101,32444,32445],{"class":216},"\"Epoch ",[101,32447,32448],{"class":160},"{}",[101,32450,695],{"class":216},[101,32452,32448],{"class":160},[101,32454,362],{"class":216},[101,32456,32457],{"class":111},".format(epoch,num_epochs",[101,32459,643],{"class":107},[101,32461,329],{"class":160},[101,32463,30486],{"class":111},[101,32465,32466,32468,32470,32473,32475,32477],{"class":103,"line":16751},[101,32467,32440],{"class":160},[101,32469,112],{"class":111},[101,32471,32472],{"class":216},"\"-\"",[101,32474,566],{"class":107},[101,32476,557],{"class":160},[101,32478,118],{"class":111},[101,32480,32481],{"class":103,"line":16757},[101,32482,2387],{"emptyLinePlaceholder":27},[101,32484,32485],{"class":103,"line":16771},[101,32486,32487],{"class":170},"        # 初始化参数\n",[101,32489,32490],{"class":103,"line":16784},[101,32491,32492],{"class":170},"        # 训练集损失函数\n",[101,32494,32495,32498,32500],{"class":103,"line":16789},[101,32496,32497],{"class":111},"        train_loss",[101,32499,157],{"class":107},[101,32501,32331],{"class":160},[101,32503,32504],{"class":103,"line":16803},[101,32505,32506],{"class":170},"        # 训练集准确度\n",[101,32508,32509,32512,32514],{"class":103,"line":16808},[101,32510,32511],{"class":111},"        train_corrects",[101,32513,157],{"class":107},[101,32515,3072],{"class":160},[101,32517,32518],{"class":103,"line":16814},[101,32519,32520],{"class":170},"        # 验证集损失函数\n",[101,32522,32523,32526,32528],{"class":103,"line":16819},[101,32524,32525],{"class":111},"        val_loss",[101,32527,157],{"class":107},[101,32529,32331],{"class":160},[101,32531,32532],{"class":103,"line":16833},[101,32533,32534],{"class":170},"        # 验证集准确度\n",[101,32536,32537,32540,32542],{"class":103,"line":16838},[101,32538,32539],{"class":111},"        val_corrects",[101,32541,157],{"class":107},[101,32543,3072],{"class":160},[101,32545,32546],{"class":103,"line":16843},[101,32547,32548],{"class":170},"        # 训练集样本数量\n",[101,32550,32551,32554,32556],{"class":103,"line":16857},[101,32552,32553],{"class":111},"        train_num",[101,32555,157],{"class":107},[101,32557,3072],{"class":160},[101,32559,32560],{"class":103,"line":16869},[101,32561,32562],{"class":170},"        # 验证集样本数量\n",[101,32564,32565,32568,32570],{"class":103,"line":16874},[101,32566,32567],{"class":111},"        val_num",[101,32569,157],{"class":107},[101,32571,3072],{"class":160},[101,32573,32574],{"class":103,"line":16887},[101,32575,32576],{"class":170},"        # 将数据放到设备,并开始训练\n",[101,32578,32579,32581,32583,32585,32587],{"class":103,"line":16892},[101,32580,3390],{"class":107},[101,32582,31590],{"class":111},[101,32584,26032],{"class":107},[101,32586,31595],{"class":160},[101,32588,32589],{"class":111},"(train_dataloader):\n",[101,32591,32592],{"class":103,"line":16897},[101,32593,32594],{"class":170},"            # 将特征放入到训练设备\n",[101,32596,32597,32600,32602],{"class":103,"line":16902},[101,32598,32599],{"class":111},"            b_x",[101,32601,157],{"class":107},[101,32603,32604],{"class":111},"b_x.to(device)\n",[101,32606,32607],{"class":103,"line":16915},[101,32608,32609],{"class":170},"            # 将标签放入到训练设备当中\n",[101,32611,32612,32615,32617],{"class":103,"line":16920},[101,32613,32614],{"class":111},"            b_y",[101,32616,157],{"class":107},[101,32618,32619],{"class":111},"b_y.to(device)\n",[101,32621,32623],{"class":103,"line":32622},98,[101,32624,32625],{"class":170},"            # 设置模型为训练模式\n",[101,32627,32629],{"class":103,"line":32628},99,[101,32630,32631],{"class":111},"            model.train()\n",[101,32633,32635],{"class":103,"line":32634},100,[101,32636,32637],{"class":170},"            # 将数据放到模型当中,开始前向传播\n",[101,32639,32641],{"class":103,"line":32640},101,[101,32642,32643],{"class":170},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[101,32645,32647,32650,32652],{"class":103,"line":32646},102,[101,32648,32649],{"class":111},"            output",[101,32651,157],{"class":107},[101,32653,32654],{"class":111},"model(b_x)\n",[101,32656,32658],{"class":103,"line":32657},103,[101,32659,32660],{"class":170},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[101,32662,32664,32667,32669,32672,32675,32677,32679],{"class":103,"line":32663},104,[101,32665,32666],{"class":111},"            pre_lab",[101,32668,157],{"class":107},[101,32670,32671],{"class":111},"torch.argmax(output,",[101,32673,32674],{"class":5204},"dim",[101,32676,157],{"class":107},[101,32678,329],{"class":160},[101,32680,118],{"class":111},[101,32682,32684],{"class":103,"line":32683},105,[101,32685,32686],{"class":170},"            # 计算每一个batch的损失函数\n",[101,32688,32690,32693,32695],{"class":103,"line":32689},106,[101,32691,32692],{"class":111},"            loss",[101,32694,157],{"class":107},[101,32696,32697],{"class":111},"criterion(output,b_y)\n",[101,32699,32701],{"class":103,"line":32700},107,[101,32702,32703],{"class":170},"            # 将梯度初始化为0\n",[101,32705,32707],{"class":103,"line":32706},108,[101,32708,32709],{"class":111},"            optimizer.zero_grad()\n",[101,32711,32713],{"class":103,"line":32712},109,[101,32714,32715],{"class":170},"            # 梯度置为0后再进行反向传播\n",[101,32717,32719],{"class":103,"line":32718},110,[101,32720,32721],{"class":111},"            loss.backward()\n",[101,32723,32725],{"class":103,"line":32724},111,[101,32726,32727],{"class":170},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[101,32729,32731],{"class":103,"line":32730},112,[101,32732,32733],{"class":111},"            optimizer.step()\n",[101,32735,32737],{"class":103,"line":32736},113,[101,32738,32739],{"class":170},"            # loss.item()指的是batch的平均损失\n",[101,32741,32743,32746,32748,32751,32753,32756,32758],{"class":103,"line":32742},114,[101,32744,32745],{"class":111},"            train_loss",[101,32747,9465],{"class":107},[101,32749,32750],{"class":111},"loss.item()",[101,32752,566],{"class":107},[101,32754,32755],{"class":111},"b_x.size(",[101,32757,303],{"class":160},[101,32759,118],{"class":111},[101,32761,32763],{"class":103,"line":32762},115,[101,32764,32765],{"class":170},"            # 计算每个批次中正确预测的数量\n",[101,32767,32769,32772,32774,32777,32779],{"class":103,"line":32768},116,[101,32770,32771],{"class":111},"            train_corrects",[101,32773,9465],{"class":107},[101,32775,32776],{"class":111},"torch.sum(pre_lab",[101,32778,2936],{"class":107},[101,32780,32781],{"class":111},"b_y.data)\n",[101,32783,32785],{"class":103,"line":32784},117,[101,32786,32787],{"class":170},"            # 计算目前为止一共处理了多少样本\n",[101,32789,32791,32794,32796,32798,32800],{"class":103,"line":32790},118,[101,32792,32793],{"class":111},"            train_num",[101,32795,9465],{"class":107},[101,32797,32755],{"class":111},[101,32799,303],{"class":160},[101,32801,118],{"class":111},[101,32803,32805],{"class":103,"line":32804},119,[101,32806,32807],{"class":170},"        # 验证数据\n",[101,32809,32811,32813,32816,32818,32820],{"class":103,"line":32810},120,[101,32812,3390],{"class":107},[101,32814,32815],{"class":111}," step ,(b_x,b_y) ",[101,32817,26032],{"class":107},[101,32819,31595],{"class":160},[101,32821,32822],{"class":111},"(val_dataloader):\n",[101,32824,32826],{"class":103,"line":32825},121,[101,32827,32828],{"class":170},"            # 将特征放到验证设备当中\n",[101,32830,32832,32834,32836],{"class":103,"line":32831},122,[101,32833,32599],{"class":111},[101,32835,157],{"class":107},[101,32837,32604],{"class":111},[101,32839,32841],{"class":103,"line":32840},123,[101,32842,32843],{"class":170},"            # 将标签放到放到训练设备当中\n",[101,32845,32847,32849,32851],{"class":103,"line":32846},124,[101,32848,32614],{"class":111},[101,32850,157],{"class":107},[101,32852,32619],{"class":111},[101,32854,32856],{"class":103,"line":32855},125,[101,32857,32858],{"class":170},"            # 开启验证模式，设置模型为评估模式\n",[101,32860,32862],{"class":103,"line":32861},126,[101,32863,32864],{"class":111},"            model.eval()\n",[101,32866,32868,32871],{"class":103,"line":32867},127,[101,32869,32870],{"class":107},"            with",[101,32872,32873],{"class":111}," torch.no_grad():\n",[101,32875,32877],{"class":103,"line":32876},128,[101,32878,32879],{"class":170},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[101,32881,32883,32886,32888],{"class":103,"line":32882},129,[101,32884,32885],{"class":111},"                output ",[101,32887,157],{"class":107},[101,32889,32890],{"class":111}," model(b_x)\n",[101,32892,32894],{"class":103,"line":32893},130,[101,32895,32896],{"class":170},"                # 查找每一行中最大值对应的下标\n",[101,32898,32900,32903,32905,32908,32910,32912,32914],{"class":103,"line":32899},131,[101,32901,32902],{"class":111},"                pre_lab ",[101,32904,157],{"class":107},[101,32906,32907],{"class":111}," torch.argmax(output, ",[101,32909,32674],{"class":5204},[101,32911,157],{"class":107},[101,32913,329],{"class":160},[101,32915,118],{"class":111},[101,32917,32919],{"class":103,"line":32918},132,[101,32920,32921],{"class":170},"                # 计算验证集上的当前 batch 损失\n",[101,32923,32925,32928,32930],{"class":103,"line":32924},133,[101,32926,32927],{"class":111},"                val_batch_loss ",[101,32929,157],{"class":107},[101,32931,32932],{"class":111}," criterion(output, b_y)\n",[101,32934,32936],{"class":103,"line":32935},134,[101,32937,32938],{"class":170},"                # 对损失函数进行累加（按样本数加权）\n",[101,32940,32942,32945,32947,32950,32952,32955,32957],{"class":103,"line":32941},135,[101,32943,32944],{"class":111},"                val_loss ",[101,32946,9465],{"class":107},[101,32948,32949],{"class":111}," val_batch_loss.item() ",[101,32951,566],{"class":107},[101,32953,32954],{"class":111}," b_x.size(",[101,32956,303],{"class":160},[101,32958,118],{"class":111},[101,32960,32962,32965,32967,32970,32972],{"class":103,"line":32961},136,[101,32963,32964],{"class":111},"                val_corrects ",[101,32966,9465],{"class":107},[101,32968,32969],{"class":111}," torch.sum(pre_lab ",[101,32971,2936],{"class":107},[101,32973,32974],{"class":111}," b_y.data)\n",[101,32976,32978],{"class":103,"line":32977},137,[101,32979,32980],{"class":170},"                # 当前用于验证的样本数量\n",[101,32982,32984,32987,32989,32991,32993],{"class":103,"line":32983},138,[101,32985,32986],{"class":111},"            val_num ",[101,32988,9465],{"class":107},[101,32990,32954],{"class":111},[101,32992,303],{"class":160},[101,32994,118],{"class":111},[101,32996,32998],{"class":103,"line":32997},139,[101,32999,33000],{"class":170},"        # 计算并保存每一次迭代的loss值和准确率\n",[101,33002,33004],{"class":103,"line":33003},140,[101,33005,33006],{"class":170},"        # 计算并保存训练集的loss值\n",[101,33008,33010,33013,33015],{"class":103,"line":33009},141,[101,33011,33012],{"class":111},"        train_loss_all.append(train_loss",[101,33014,695],{"class":107},[101,33016,33017],{"class":111},"train_num)\n",[101,33019,33021],{"class":103,"line":33020},142,[101,33022,33023],{"class":170},"        # 取双精度\n",[101,33025,33027],{"class":103,"line":33026},143,[101,33028,33029],{"class":170},"        # 计算并保存训练集的准确率\n",[101,33031,33033,33036,33038],{"class":103,"line":33032},144,[101,33034,33035],{"class":111},"        train_acc_all.append(train_corrects.double().item()",[101,33037,695],{"class":107},[101,33039,33017],{"class":111},[101,33041,33043],{"class":103,"line":33042},145,[101,33044,33045],{"class":170},"        # 计算并保存验证集的loss值\n",[101,33047,33049,33052,33054],{"class":103,"line":33048},146,[101,33050,33051],{"class":111},"        val_loss_all.append(val_loss",[101,33053,695],{"class":107},[101,33055,33056],{"class":111},"val_num)\n",[101,33058,33060],{"class":103,"line":33059},147,[101,33061,33062],{"class":170},"        # 计算并保存验证集的准确率\n",[101,33064,33066,33069,33071],{"class":103,"line":33065},148,[101,33067,33068],{"class":111},"        val_acc_all.append(val_corrects.double().item()",[101,33070,695],{"class":107},[101,33072,33056],{"class":111},[101,33074,33076],{"class":103,"line":33075},149,[101,33077,2387],{"emptyLinePlaceholder":27},[101,33079,33081],{"class":103,"line":33080},150,[101,33082,33083],{"class":170},"        # 打印训练一轮的loss值和准确率\n",[101,33085,33087,33089,33091,33093,33095,33098,33100,33103,33105,33108,33110,33112,33114,33116,33119,33121,33123,33126,33128,33130],{"class":103,"line":33086},151,[101,33088,32440],{"class":160},[101,33090,112],{"class":111},[101,33092,3579],{"class":216},[101,33094,32448],{"class":160},[101,33096,33097],{"class":216},"train loss:",[101,33099,1007],{"class":160},[101,33101,33102],{"class":107},":.4f",[101,33104,1057],{"class":160},[101,33106,33107],{"class":216}," train acc:",[101,33109,1007],{"class":160},[101,33111,33102],{"class":107},[101,33113,1057],{"class":160},[101,33115,3579],{"class":216},[101,33117,33118],{"class":111},".format(epoch,train_loss_all[",[101,33120,643],{"class":107},[101,33122,329],{"class":160},[101,33124,33125],{"class":111},"],train_acc_all[",[101,33127,643],{"class":107},[101,33129,329],{"class":160},[101,33131,33132],{"class":111},"]))\n",[101,33134,33136,33138,33140,33142,33144,33147,33149,33151,33153,33156,33158,33160,33162,33164,33167,33169,33171,33174,33176,33178],{"class":103,"line":33135},152,[101,33137,32440],{"class":160},[101,33139,112],{"class":111},[101,33141,3579],{"class":216},[101,33143,32448],{"class":160},[101,33145,33146],{"class":216},"val loss:",[101,33148,1007],{"class":160},[101,33150,33102],{"class":107},[101,33152,1057],{"class":160},[101,33154,33155],{"class":216}," val acc:",[101,33157,1007],{"class":160},[101,33159,33102],{"class":107},[101,33161,1057],{"class":160},[101,33163,3579],{"class":216},[101,33165,33166],{"class":111},".format(epoch,val_loss_all[",[101,33168,643],{"class":107},[101,33170,329],{"class":160},[101,33172,33173],{"class":111},"],val_acc_all[",[101,33175,643],{"class":107},[101,33177,329],{"class":160},[101,33179,33132],{"class":111},[101,33181,33183],{"class":103,"line":33182},153,[101,33184,2387],{"emptyLinePlaceholder":27},[101,33186,33188],{"class":103,"line":33187},154,[101,33189,33190],{"class":170},"        # 判断准确度--->保存最优模型\n",[101,33192,33194,33196,33199,33201,33203,33205,33207],{"class":103,"line":33193},155,[101,33195,2484],{"class":107},[101,33197,33198],{"class":111}," val_acc_all[",[101,33200,643],{"class":107},[101,33202,329],{"class":160},[101,33204,1051],{"class":111},[101,33206,1071],{"class":107},[101,33208,33209],{"class":111},"best_acc:\n",[101,33211,33213],{"class":103,"line":33212},156,[101,33214,33215],{"class":170},"            # 保存当前模型准确度\n",[101,33217,33219,33222,33224,33226,33229,33231,33233],{"class":103,"line":33218},157,[101,33220,33221],{"class":111},"            best_acc:",[101,33223,151],{"class":160},[101,33225,157],{"class":107},[101,33227,33228],{"class":111},"val_acc_all[",[101,33230,643],{"class":107},[101,33232,329],{"class":160},[101,33234,33235],{"class":111},"]\n",[101,33237,33239],{"class":103,"line":33238},158,[101,33240,33241],{"class":170},"            # 保存当前的准确度\n",[101,33243,33245],{"class":103,"line":33244},159,[101,33246,33247],{"class":170},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[101,33249,33251,33254,33256],{"class":103,"line":33250},160,[101,33252,33253],{"class":111},"            best_model_wts",[101,33255,157],{"class":107},[101,33257,32303],{"class":111},[101,33259,33261],{"class":103,"line":33260},161,[101,33262,2387],{"emptyLinePlaceholder":27},[101,33264,33266],{"class":103,"line":33265},162,[101,33267,33268],{"class":170},"        # 计算耗时\n",[101,33270,33272,33275,33277,33280,33282],{"class":103,"line":33271},163,[101,33273,33274],{"class":111},"        time_use",[101,33276,157],{"class":107},[101,33278,33279],{"class":111},"time.time()",[101,33281,643],{"class":107},[101,33283,33284],{"class":111},"since\n",[101,33286,33288,33290,33292,33295,33297,33300,33302,33304,33306,33308,33310,33313,33316,33319,33321,33324,33326,33328],{"class":103,"line":33287},164,[101,33289,32440],{"class":160},[101,33291,112],{"class":111},[101,33293,33294],{"class":216},"'训练和验证耗费的时间",[101,33296,1007],{"class":160},[101,33298,33299],{"class":107},":.0f",[101,33301,1057],{"class":160},[101,33303,655],{"class":216},[101,33305,1007],{"class":160},[101,33307,33299],{"class":107},[101,33309,1057],{"class":160},[101,33311,33312],{"class":216},"s'",[101,33314,33315],{"class":111},".format(time_use",[101,33317,33318],{"class":107},"\u002F\u002F",[101,33320,1018],{"class":160},[101,33322,33323],{"class":111},",time_use",[101,33325,439],{"class":107},[101,33327,1018],{"class":160},[101,33329,30486],{"class":111},[101,33331,33333],{"class":103,"line":33332},165,[101,33334,33335],{"class":170},"    # 选择最优参数\n",[101,33337,33339],{"class":103,"line":33338},166,[101,33340,33341],{"class":170},"    # 加载最高准确率下的模型参数\n",[101,33343,33345],{"class":103,"line":33344},167,[101,33346,33347],{"class":170},"    # model.load_state_dict(best_model_wts)\n",[101,33349,33351,33354,33357],{"class":103,"line":33350},168,[101,33352,33353],{"class":111},"    torch.save(model.state_dict(best_model_wts), ",[101,33355,33356],{"class":216},"'.\u002Fbest_model.pth'",[101,33358,118],{"class":111},[101,33360,33362],{"class":103,"line":33361},169,[101,33363,33364],{"class":170},"    # 或者写成\n",[101,33366,33368],{"class":103,"line":33367},170,[101,33369,33370],{"class":170},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[101,33372,33374],{"class":103,"line":33373},171,[101,33375,33376],{"class":170},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[101,33378,33380,33383,33385,33388,33391,33393],{"class":103,"line":33379},172,[101,33381,33382],{"class":111},"    train_process",[101,33384,157],{"class":107},[101,33386,33387],{"class":111},"pd.DataFrame(",[101,33389,33390],{"class":5204},"data",[101,33392,157],{"class":107},[101,33394,1533],{"class":111},[101,33396,33398,33401,33403,33406],{"class":103,"line":33397},173,[101,33399,33400],{"class":216},"        \"epoch\"",[101,33402,970],{"class":111},[101,33404,33405],{"class":160},"range",[101,33407,33408],{"class":111},"(num_epochs),\n",[101,33410,33412,33415],{"class":103,"line":33411},174,[101,33413,33414],{"class":216},"        \"train_loss_all\"",[101,33416,33417],{"class":111},":train_loss_all,\n",[101,33419,33421,33424],{"class":103,"line":33420},175,[101,33422,33423],{"class":216},"        \"val_loss_all\"",[101,33425,33426],{"class":111},":val_loss_all,\n",[101,33428,33430,33433],{"class":103,"line":33429},176,[101,33431,33432],{"class":216},"        \"train_acc_all\"",[101,33434,33435],{"class":111},":train_acc_all,\n",[101,33437,33439,33442],{"class":103,"line":33438},177,[101,33440,33441],{"class":216},"        \"val_acc_all\"",[101,33443,33444],{"class":111},":val_acc_all\n",[101,33446,33448],{"class":103,"line":33447},178,[101,33449,33450],{"class":111},"    })\n",[101,33452,33454],{"class":103,"line":33453},179,[101,33455,33456],{"class":170},"    # 返回训练保存的过程\n",[101,33458,33460,33462],{"class":103,"line":33459},180,[101,33461,4077],{"class":107},[101,33463,33464],{"class":111}," train_process\n",[101,33466,33468],{"class":103,"line":33467},181,[101,33469,2387],{"emptyLinePlaceholder":27},[101,33471,33473],{"class":103,"line":33472},182,[101,33474,33475],{"class":170},"# 将loss值和精度按照图片的形式展示出来\n",[101,33477,33479,33481,33484],{"class":103,"line":33478},183,[101,33480,31936],{"class":107},[101,33482,33483],{"class":1950}," matplot_acc_loss",[101,33485,33486],{"class":111},"(train_process):\n",[101,33488,33490],{"class":103,"line":33489},184,[101,33491,33492],{"class":170},"    # 设置图的大小\n",[101,33494,33496,33499,33501,33503,33505,33507,33509,33511],{"class":103,"line":33495},185,[101,33497,33498],{"class":111},"    plt.figure(",[101,33500,31682],{"class":5204},[101,33502,157],{"class":107},[101,33504,112],{"class":111},[101,33506,609],{"class":160},[101,33508,489],{"class":111},[101,33510,404],{"class":160},[101,33512,30486],{"class":111},[101,33514,33516],{"class":103,"line":33515},186,[101,33517,33518],{"class":170},"    # 设置图中有几张图\n",[101,33520,33522],{"class":103,"line":33521},187,[101,33523,33524],{"class":170},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[101,33526,33528],{"class":103,"line":33527},188,[101,33529,33530],{"class":170},"    # ①loss图\n",[101,33532,33534,33536,33538,33540,33542,33544,33546],{"class":103,"line":33533},189,[101,33535,31716],{"class":111},[101,33537,329],{"class":160},[101,33539,489],{"class":111},[101,33541,189],{"class":160},[101,33543,489],{"class":111},[101,33545,329],{"class":160},[101,33547,118],{"class":111},[101,33549,33551],{"class":103,"line":33550},190,[101,33552,33553],{"class":170},"    # 补充:\n",[101,33555,33557],{"class":103,"line":33556},191,[101,33558,33559],{"class":170},"    # plt.subplot(nrows, ncols, index)\n",[101,33561,33563],{"class":103,"line":33562},192,[101,33564,33565],{"class":170},"    # nrows：行数\n",[101,33567,33569],{"class":103,"line":33568},193,[101,33570,33571],{"class":170},"    # ncols：列数\n",[101,33573,33575],{"class":103,"line":33574},194,[101,33576,33577],{"class":170},"    # index：目前选中第几个子图（从1开始）\n",[101,33579,33581,33584,33587,33590,33593,33595,33598,33600,33603],{"class":103,"line":33580},195,[101,33582,33583],{"class":111},"    plt.plot(train_process[",[101,33585,33586],{"class":216},"\"epoch\"",[101,33588,33589],{"class":111},"],train_process.train_loss_all,",[101,33591,33592],{"class":216},"'ro-'",[101,33594,489],{"class":111},[101,33596,33597],{"class":5204},"label",[101,33599,157],{"class":107},[101,33601,33602],{"class":216},"'train loss'",[101,33604,118],{"class":111},[101,33606,33608,33610,33612,33615,33618,33620,33622,33624,33627],{"class":103,"line":33607},196,[101,33609,33583],{"class":111},[101,33611,33586],{"class":216},[101,33613,33614],{"class":111},"],train_process.val_loss_all,",[101,33616,33617],{"class":216},"'bs--'",[101,33619,489],{"class":111},[101,33621,33597],{"class":5204},[101,33623,157],{"class":107},[101,33625,33626],{"class":216},"'val loss'",[101,33628,118],{"class":111},[101,33630,33632],{"class":103,"line":33631},197,[101,33633,33634],{"class":170},"    # 添加一个图例\n",[101,33636,33638],{"class":103,"line":33637},198,[101,33639,33640],{"class":111},"    plt.legend()\n",[101,33642,33644],{"class":103,"line":33643},199,[101,33645,33646],{"class":170},"    # 给轴添加标签\n",[101,33648,33650,33653,33656],{"class":103,"line":33649},200,[101,33651,33652],{"class":111},"    plt.xlabel(",[101,33654,33655],{"class":216},"'epoch'",[101,33657,118],{"class":111},[101,33659,33661,33664,33667],{"class":103,"line":33660},201,[101,33662,33663],{"class":111},"    plt.ylabel(",[101,33665,33666],{"class":216},"'loss'",[101,33668,118],{"class":111},[101,33670,33672],{"class":103,"line":33671},202,[101,33673,33674],{"class":170},"    # ②准确度图\n",[101,33676,33678,33680,33682,33684,33686,33688,33690],{"class":103,"line":33677},203,[101,33679,31716],{"class":111},[101,33681,329],{"class":160},[101,33683,489],{"class":111},[101,33685,189],{"class":160},[101,33687,489],{"class":111},[101,33689,189],{"class":160},[101,33691,118],{"class":111},[101,33693,33695,33697,33699,33702,33704,33706,33708,33710,33713],{"class":103,"line":33694},204,[101,33696,33583],{"class":111},[101,33698,33586],{"class":216},[101,33700,33701],{"class":111},"],train_process.train_acc_all,",[101,33703,33592],{"class":216},[101,33705,489],{"class":111},[101,33707,33597],{"class":5204},[101,33709,157],{"class":107},[101,33711,33712],{"class":216},"'train acc'",[101,33714,118],{"class":111},[101,33716,33718,33720,33722,33725,33727,33729,33731,33733,33736],{"class":103,"line":33717},205,[101,33719,33583],{"class":111},[101,33721,33586],{"class":216},[101,33723,33724],{"class":111},"],train_process.val_acc_all,",[101,33726,33617],{"class":216},[101,33728,489],{"class":111},[101,33730,33597],{"class":5204},[101,33732,157],{"class":107},[101,33734,33735],{"class":216},"'val acc'",[101,33737,118],{"class":111},[101,33739,33741],{"class":103,"line":33740},206,[101,33742,33743],{"class":170},"    # 添加图例\n",[101,33745,33747],{"class":103,"line":33746},207,[101,33748,33640],{"class":111},[101,33750,33752,33754,33756],{"class":103,"line":33751},208,[101,33753,33652],{"class":111},[101,33755,33586],{"class":216},[101,33757,118],{"class":111},[101,33759,33761,33763,33766],{"class":103,"line":33760},209,[101,33762,33663],{"class":111},[101,33764,33765],{"class":216},"\"acc\"",[101,33767,118],{"class":111},[101,33769,33771],{"class":103,"line":33770},210,[101,33772,33773],{"class":111},"    plt.show()\n",[101,33775,33777],{"class":103,"line":33776},211,[101,33778,2387],{"emptyLinePlaceholder":27},[101,33780,33782],{"class":103,"line":33781},212,[101,33783,33784],{"class":170},"# 正式开始训练:\n",[101,33786,33788,33790,33792,33794,33796],{"class":103,"line":33787},213,[101,33789,1518],{"class":107},[101,33791,31209],{"class":160},[101,33793,2936],{"class":107},[101,33795,31214],{"class":216},[101,33797,3726],{"class":111},[101,33799,33801],{"class":103,"line":33800},214,[101,33802,33803],{"class":170},"    # 将模型实例化\n",[101,33805,33807,33810,33812],{"class":103,"line":33806},215,[101,33808,33809],{"class":111},"    LeNet",[101,33811,157],{"class":107},[101,33813,33814],{"class":111},"LeNet()\n",[101,33816,33818,33821,33823],{"class":103,"line":33817},216,[101,33819,33820],{"class":111},"    train_dataloader,val_dataloader",[101,33822,157],{"class":107},[101,33824,33825],{"class":111},"train_val_data_process()\n",[101,33827,33829,33831,33833,33836,33839,33841,33843],{"class":103,"line":33828},217,[101,33830,33382],{"class":111},[101,33832,157],{"class":107},[101,33834,33835],{"class":111},"train_model_process(LeNet,train_dataloader,val_dataloader,",[101,33837,33838],{"class":5204},"num_epochs",[101,33840,157],{"class":107},[101,33842,811],{"class":160},[101,33844,118],{"class":111},[101,33846,33848],{"class":103,"line":33847},218,[101,33849,33850],{"class":111},"    matplot_acc_loss(train_process)\n",[10,33852,33853],{},"画图的补充点学习：",[10,33855,33856],{},[1449,33857],{"alt":20,"src":33858},"\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",[55,33860,33861],{"start":1166},[58,33862,33863],{},"测试",[92,33865,33867],{"className":30367,"code":33866,"language":30369,"meta":20,"style":20},"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",[98,33868,33869,33875,33885,33897,33907,33912,33922,33932,33936,33941,33950,33967,33979,33996,34007,34023,34028,34039,34050,34061,34068,34072,34077,34087,34092,34109,34117,34121,34126,34135,34144,34148,34153,34158,34163,34170,34175,34187,34197,34207,34212,34216,34221,34230,34235,34251,34256,34261,34266,34280,34285,34299,34303,34308,34323,34328,34340,34344,34349,34361,34366,34374,34379,34384,34394,34399,34408,34413,34418,34422,34427,34432,34448,34456,34461,34466,34525,34531,34536,34547,34555,34563,34567,34572,34576,34581,34589,34594,34610,34615,34625,34635],{"__ignoreMap":20},[101,33870,33871,33873],{"class":103,"line":104},[101,33872,30381],{"class":107},[101,33874,30384],{"class":111},[101,33876,33877,33879,33881,33883],{"class":103,"line":21},[101,33878,30381],{"class":107},[101,33880,31404],{"class":111},[101,33882,31372],{"class":107},[101,33884,31409],{"class":111},[101,33886,33887,33889,33892,33894],{"class":103,"line":1166},[101,33888,30726],{"class":107},[101,33890,33891],{"class":111}," jupyter_client.consoleapp ",[101,33893,30381],{"class":107},[101,33895,33896],{"class":111}," classes\n",[101,33898,33899,33901,33903,33905],{"class":103,"line":1181},[101,33900,30726],{"class":107},[101,33902,31387],{"class":111},[101,33904,30381],{"class":107},[101,33906,31392],{"class":111},[101,33908,33909],{"class":103,"line":1187},[101,33910,33911],{"class":170},"# 导入数据集\n",[101,33913,33914,33916,33918,33920],{"class":103,"line":1201},[101,33915,30726],{"class":107},[101,33917,31357],{"class":111},[101,33919,30381],{"class":107},[101,33921,31362],{"class":111},[101,33923,33924,33926,33928,33930],{"class":103,"line":1207},[101,33925,30726],{"class":107},[101,33927,31903],{"class":111},[101,33929,30381],{"class":107},[101,33931,31908],{"class":111},[101,33933,33934],{"class":103,"line":1298},[101,33935,2387],{"emptyLinePlaceholder":27},[101,33937,33938],{"class":103,"line":1304},[101,33939,33940],{"class":170},"# 测试数据处理\n",[101,33942,33943,33945,33948],{"class":103,"line":1316},[101,33944,31936],{"class":107},[101,33946,33947],{"class":1950}," test_data_process",[101,33949,31942],{"class":111},[101,33951,33952,33955,33957,33959,33961,33963,33965],{"class":103,"line":1599},[101,33953,33954],{"class":111},"    test_data",[101,33956,157],{"class":107},[101,33958,31444],{"class":111},[101,33960,31447],{"class":5204},[101,33962,157],{"class":107},[101,33964,31452],{"class":216},[101,33966,31455],{"class":111},[101,33968,33969,33972,33974,33977],{"class":103,"line":1604},[101,33970,33971],{"class":5204},"                           train",[101,33973,157],{"class":107},[101,33975,33976],{"class":160},"False",[101,33978,31455],{"class":111},[101,33980,33981,33984,33986,33988,33990,33992,33994],{"class":103,"line":1610},[101,33982,33983],{"class":5204},"                           transform",[101,33985,157],{"class":107},[101,33987,31482],{"class":111},[101,33989,31485],{"class":5204},[101,33991,157],{"class":107},[101,33993,1012],{"class":160},[101,33995,31493],{"class":111},[101,33997,33998,34001,34003,34005],{"class":103,"line":1615},[101,33999,34000],{"class":5204},"                           download",[101,34002,157],{"class":107},[101,34004,31465],{"class":160},[101,34006,118],{"class":111},[101,34008,34009,34012,34014,34016,34018,34020],{"class":103,"line":1629},[101,34010,34011],{"class":111},"    test_dataloader",[101,34013,157],{"class":107},[101,34015,31523],{"class":111},[101,34017,31526],{"class":5204},[101,34019,157],{"class":107},[101,34021,34022],{"class":111},"test_data,\n",[101,34024,34025],{"class":103,"line":1634},[101,34026,34027],{"class":170},"                                    # 这里是一张一张进行测试\n",[101,34029,34030,34033,34035,34037],{"class":103,"line":1640},[101,34031,34032],{"class":5204},"                                    batch_size",[101,34034,157],{"class":107},[101,34036,329],{"class":160},[101,34038,31455],{"class":111},[101,34040,34041,34044,34046,34048],{"class":103,"line":1661},[101,34042,34043],{"class":5204},"                                    shuffle",[101,34045,157],{"class":107},[101,34047,31465],{"class":160},[101,34049,31455],{"class":111},[101,34051,34052,34055,34057,34059],{"class":103,"line":1666},[101,34053,34054],{"class":5204},"                                    num_workers",[101,34056,157],{"class":107},[101,34058,303],{"class":160},[101,34060,118],{"class":111},[101,34062,34063,34065],{"class":103,"line":1680},[101,34064,4077],{"class":107},[101,34066,34067],{"class":111}," test_dataloader\n",[101,34069,34070],{"class":103,"line":1685},[101,34071,2387],{"emptyLinePlaceholder":27},[101,34073,34074],{"class":103,"line":1714},[101,34075,34076],{"class":170},"# 定义模型测试函数\n",[101,34078,34079,34081,34084],{"class":103,"line":1719},[101,34080,31936],{"class":107},[101,34082,34083],{"class":1950}," test_model_process",[101,34085,34086],{"class":111},"(model,test_dataloader):\n",[101,34088,34089],{"class":103,"line":1736},[101,34090,34091],{"class":170},"    # 将模型放到设备当中，先进行判断\n",[101,34093,34094,34096,34098,34100,34102,34104,34106],{"class":103,"line":1741},[101,34095,31226],{"class":111},[101,34097,157],{"class":107},[101,34099,31233],{"class":216},[101,34101,1691],{"class":107},[101,34103,31238],{"class":111},[101,34105,1688],{"class":107},[101,34107,34108],{"class":216}," \"cpu\"\n",[101,34110,34111,34113,34115],{"class":103,"line":1746},[101,34112,31278],{"class":111},[101,34114,157],{"class":107},[101,34116,32278],{"class":111},[101,34118,34119],{"class":103,"line":1751},[101,34120,2387],{"emptyLinePlaceholder":27},[101,34122,34123],{"class":103,"line":1765},[101,34124,34125],{"class":170},"    # 设置初始化参数\n",[101,34127,34128,34131,34133],{"class":103,"line":1770},[101,34129,34130],{"class":111},"    test_corrects",[101,34132,157],{"class":107},[101,34134,32331],{"class":160},[101,34136,34137,34140,34142],{"class":103,"line":2564},[101,34138,34139],{"class":111},"    test_num",[101,34141,157],{"class":107},[101,34143,3072],{"class":160},[101,34145,34146],{"class":103,"line":2578},[101,34147,2387],{"emptyLinePlaceholder":27},[101,34149,34150],{"class":103,"line":2586},[101,34151,34152],{"class":170},"    # 进行模型测试\n",[101,34154,34155],{"class":103,"line":2591},[101,34156,34157],{"class":170},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[101,34159,34160],{"class":103,"line":2597},[101,34161,34162],{"class":170},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[101,34164,34165,34168],{"class":103,"line":2603},[101,34166,34167],{"class":107},"    with",[101,34169,32873],{"class":111},[101,34171,34172],{"class":103,"line":2608},[101,34173,34174],{"class":170},"        # 从数据中进行\n",[101,34176,34177,34179,34182,34184],{"class":103,"line":7936},[101,34178,3390],{"class":107},[101,34180,34181],{"class":111}," test_data_x,test_data_y ",[101,34183,26032],{"class":107},[101,34185,34186],{"class":111}," test_dataloader:\n",[101,34188,34189,34192,34194],{"class":103,"line":7960},[101,34190,34191],{"class":111},"            test_data_x",[101,34193,157],{"class":107},[101,34195,34196],{"class":111},"test_data_x.to(device)\n",[101,34198,34199,34202,34204],{"class":103,"line":7965},[101,34200,34201],{"class":111},"            test_data_y",[101,34203,157],{"class":107},[101,34205,34206],{"class":111},"test_data_y.to(device)\n",[101,34208,34209],{"class":103,"line":7971},[101,34210,34211],{"class":170},"            # 设置为验证模式\n",[101,34213,34214],{"class":103,"line":7998},[101,34215,32864],{"class":111},[101,34217,34218],{"class":103,"line":8003},[101,34219,34220],{"class":170},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[101,34222,34223,34225,34227],{"class":103,"line":8009},[101,34224,32649],{"class":111},[101,34226,157],{"class":107},[101,34228,34229],{"class":111},"model(test_data_x)\n",[101,34231,34232],{"class":103,"line":8021},[101,34233,34234],{"class":170},"            # 查找每一行中最大值对应的下标\n",[101,34236,34237,34239,34241,34243,34245,34247,34249],{"class":103,"line":8033},[101,34238,32666],{"class":111},[101,34240,157],{"class":107},[101,34242,32671],{"class":111},[101,34244,32674],{"class":5204},[101,34246,157],{"class":107},[101,34248,329],{"class":160},[101,34250,118],{"class":111},[101,34252,34253],{"class":103,"line":8045},[101,34254,34255],{"class":170},"            # 计算正确率\n",[101,34257,34258],{"class":103,"line":9704},[101,34259,34260],{"class":170},"            # .data表示是一个不带梯度信息的tensor\n",[101,34262,34263],{"class":103,"line":9729},[101,34264,34265],{"class":170},"            # 如果预测正确，则准确度test_corrects加1\n",[101,34267,34268,34271,34273,34275,34277],{"class":103,"line":9752},[101,34269,34270],{"class":111},"            test_corrects",[101,34272,9465],{"class":107},[101,34274,32776],{"class":111},[101,34276,2936],{"class":107},[101,34278,34279],{"class":111},"test_data_y.data)\n",[101,34281,34282],{"class":103,"line":9776},[101,34283,34284],{"class":170},"            # 将所有的测试样本进行累计\n",[101,34286,34287,34290,34292,34295,34297],{"class":103,"line":9781},[101,34288,34289],{"class":111},"            test_num",[101,34291,9465],{"class":107},[101,34293,34294],{"class":111},"test_data_x.size(",[101,34296,303],{"class":160},[101,34298,118],{"class":111},[101,34300,34301],{"class":103,"line":9786},[101,34302,2387],{"emptyLinePlaceholder":27},[101,34304,34305],{"class":103,"line":9791},[101,34306,34307],{"class":170},"        # 计算准确度\n",[101,34309,34310,34313,34315,34318,34320],{"class":103,"line":9800},[101,34311,34312],{"class":111},"        test_acc",[101,34314,157],{"class":107},[101,34316,34317],{"class":111},"test_corrects.double().item()",[101,34319,695],{"class":107},[101,34321,34322],{"class":111},"test_num\n",[101,34324,34325],{"class":103,"line":9805},[101,34326,34327],{"class":170},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[101,34329,34330,34332,34334,34337],{"class":103,"line":9811},[101,34331,32440],{"class":160},[101,34333,112],{"class":111},[101,34335,34336],{"class":216},"\"测试的准确率：\"",[101,34338,34339],{"class":111},",test_acc)\n",[101,34341,34342],{"class":103,"line":9832},[101,34343,2387],{"emptyLinePlaceholder":27},[101,34345,34346],{"class":103,"line":9838},[101,34347,34348],{"class":170},"# 实现模型的测试功能\n",[101,34350,34351,34353,34355,34357,34359],{"class":103,"line":9852},[101,34352,1518],{"class":107},[101,34354,31209],{"class":160},[101,34356,2936],{"class":107},[101,34358,31214],{"class":216},[101,34360,3726],{"class":111},[101,34362,34363],{"class":103,"line":9858},[101,34364,34365],{"class":170},"    # 加载模型\n",[101,34367,34368,34370,34372],{"class":103,"line":9885},[101,34369,31278],{"class":111},[101,34371,157],{"class":107},[101,34373,33814],{"class":111},[101,34375,34376],{"class":103,"line":9894},[101,34377,34378],{"class":170},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[101,34380,34381],{"class":103,"line":9900},[101,34382,34383],{"class":170},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[101,34385,34386,34389,34392],{"class":103,"line":9908},[101,34387,34388],{"class":111},"    model.load_state_dict(torch.load(",[101,34390,34391],{"class":216},"'best_model.pth'",[101,34393,30486],{"class":111},[101,34395,34396],{"class":103,"line":9913},[101,34397,34398],{"class":170},"    # 数据加载\n",[101,34400,34401,34403,34405],{"class":103,"line":16592},[101,34402,34011],{"class":111},[101,34404,157],{"class":107},[101,34406,34407],{"class":111},"test_data_process()\n",[101,34409,34410],{"class":103,"line":16598},[101,34411,34412],{"class":170},"    # 加载模型测试的函数\n",[101,34414,34415],{"class":103,"line":16621},[101,34416,34417],{"class":111},"    test_model_process(model,test_dataloader)\n",[101,34419,34420],{"class":103,"line":16627},[101,34421,2387],{"emptyLinePlaceholder":27},[101,34423,34424],{"class":103,"line":16650},[101,34425,34426],{"class":170},"    # 验证集推理实现：\n",[101,34428,34429],{"class":103,"line":16664},[101,34430,34431],{"class":170},"    # 加载数据加载的更详细一些\n",[101,34433,34434,34436,34438,34440,34442,34444,34446],{"class":103,"line":16684},[101,34435,31226],{"class":111},[101,34437,157],{"class":107},[101,34439,31233],{"class":216},[101,34441,1691],{"class":107},[101,34443,31238],{"class":111},[101,34445,1688],{"class":107},[101,34447,34108],{"class":216},[101,34449,34450,34452,34454],{"class":103,"line":16690},[101,34451,31278],{"class":111},[101,34453,157],{"class":107},[101,34455,32278],{"class":111},[101,34457,34458],{"class":103,"line":16701},[101,34459,34460],{"class":170},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[101,34462,34463],{"class":103,"line":16724},[101,34464,34465],{"class":170},"    # 顺序不可改变\n",[101,34467,34468,34471,34473,34475,34478,34480,34483,34485,34488,34490,34493,34495,34498,34500,34503,34505,34508,34510,34513,34515,34518,34520,34523],{"class":103,"line":16746},[101,34469,34470],{"class":111},"    classes",[101,34472,157],{"class":107},[101,34474,1001],{"class":111},[101,34476,34477],{"class":216},"'T-shirt\u002Ftop'",[101,34479,489],{"class":111},[101,34481,34482],{"class":216},"'Trouser'",[101,34484,489],{"class":111},[101,34486,34487],{"class":216},"'Pullover'",[101,34489,489],{"class":111},[101,34491,34492],{"class":216},"'Dress'",[101,34494,489],{"class":111},[101,34496,34497],{"class":216},"'Coat'",[101,34499,489],{"class":111},[101,34501,34502],{"class":216},"'Sandal'",[101,34504,489],{"class":111},[101,34506,34507],{"class":216},"'Shirt'",[101,34509,489],{"class":111},[101,34511,34512],{"class":216},"'Sneaker'",[101,34514,489],{"class":111},[101,34516,34517],{"class":216},"'Bag'",[101,34519,489],{"class":111},[101,34521,34522],{"class":216},"'Ankle boot'",[101,34524,33235],{"class":111},[101,34526,34527,34529],{"class":103,"line":16751},[101,34528,34167],{"class":107},[101,34530,32873],{"class":111},[101,34532,34533],{"class":103,"line":16757},[101,34534,34535],{"class":170},"        # 将数据和标签都放到设备当中\n",[101,34537,34538,34540,34543,34545],{"class":103,"line":16771},[101,34539,3390],{"class":107},[101,34541,34542],{"class":111}," b_x,b_y ",[101,34544,26032],{"class":107},[101,34546,34186],{"class":111},[101,34548,34549,34551,34553],{"class":103,"line":16784},[101,34550,32599],{"class":111},[101,34552,157],{"class":107},[101,34554,32604],{"class":111},[101,34556,34557,34559,34561],{"class":103,"line":16789},[101,34558,32614],{"class":111},[101,34560,157],{"class":107},[101,34562,32619],{"class":111},[101,34564,34565],{"class":103,"line":16803},[101,34566,2387],{"emptyLinePlaceholder":27},[101,34568,34569],{"class":103,"line":16808},[101,34570,34571],{"class":170},"            # 设置模型为验证模式\n",[101,34573,34574],{"class":103,"line":16814},[101,34575,32864],{"class":111},[101,34577,34578],{"class":103,"line":16819},[101,34579,34580],{"class":170},"            # 模型推理结果\n",[101,34582,34583,34585,34587],{"class":103,"line":16833},[101,34584,32649],{"class":111},[101,34586,157],{"class":107},[101,34588,32654],{"class":111},[101,34590,34591],{"class":103,"line":16838},[101,34592,34593],{"class":170},"            # 获取最大下标，最大下标就是类别号\n",[101,34595,34596,34598,34600,34602,34604,34606,34608],{"class":103,"line":16843},[101,34597,32666],{"class":111},[101,34599,157],{"class":107},[101,34601,32671],{"class":111},[101,34603,32674],{"class":5204},[101,34605,157],{"class":107},[101,34607,329],{"class":160},[101,34609,118],{"class":111},[101,34611,34612],{"class":103,"line":16857},[101,34613,34614],{"class":170},"            # 取出张量中的数值\n",[101,34616,34617,34620,34622],{"class":103,"line":16869},[101,34618,34619],{"class":111},"            result",[101,34621,157],{"class":107},[101,34623,34624],{"class":111},"pre_lab.item()\n",[101,34626,34627,34630,34632],{"class":103,"line":16874},[101,34628,34629],{"class":111},"            label",[101,34631,157],{"class":107},[101,34633,34634],{"class":111},"b_y.item()\n",[101,34636,34637,34640,34642,34645,34648,34651,34653,34656],{"class":103,"line":16887},[101,34638,34639],{"class":160},"            print",[101,34641,112],{"class":111},[101,34643,34644],{"class":216},"\"预测值：\"",[101,34646,34647],{"class":111},",classes[result],",[101,34649,34650],{"class":216},"\"------\"",[101,34652,489],{"class":111},[101,34654,34655],{"class":216},"\"真实值：\"",[101,34657,34658],{"class":111},",classes[label])\n",[10,34660,34661],{},"（2）AlexNet",[55,34663,34664],{},[58,34665,34666],{},"神经网络构建",[92,34668,34670],{"className":30367,"code":34669,"language":30369,"meta":20,"style":20},"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",[98,34671,34672,34678,34688,34698,34710,34714,34731,34739,34754,34766,34808,34835,34878,34904,34948,34991,35034,35061,35065,35075,35080,35108,35127,35146,35150,35155,35163,35178,35188,35202,35212,35227,35242,35257,35268,35272,35277,35287,35302,35307,35321,35336,35348,35353,35364,35369,35375,35380,35392,35412,35417,35426],{"__ignoreMap":20},[101,34673,34674,34676],{"class":103,"line":104},[101,34675,30381],{"class":107},[101,34677,30384],{"class":111},[101,34679,34680,34682,34684,34686],{"class":103,"line":21},[101,34681,30726],{"class":107},[101,34683,30729],{"class":111},[101,34685,30381],{"class":107},[101,34687,30734],{"class":111},[101,34689,34690,34692,34694,34696],{"class":103,"line":1166},[101,34691,30726],{"class":107},[101,34693,30746],{"class":111},[101,34695,30381],{"class":107},[101,34697,30751],{"class":111},[101,34699,34700,34702,34705,34707],{"class":103,"line":1181},[101,34701,30381],{"class":107},[101,34703,34704],{"class":111}," torch.nn.functional ",[101,34706,31372],{"class":107},[101,34708,34709],{"class":111}," F\n",[101,34711,34712],{"class":103,"line":1187},[101,34713,2387],{"emptyLinePlaceholder":27},[101,34715,34716,34718,34721,34723,34725,34727,34729],{"class":103,"line":1201},[101,34717,14682],{"class":107},[101,34719,34720],{"class":1950}," AlexNet",[101,34722,112],{"class":111},[101,34724,30767],{"class":1950},[101,34726,669],{"class":111},[101,34728,30772],{"class":1950},[101,34730,30775],{"class":111},[101,34732,34733,34735,34737],{"class":103,"line":1207},[101,34734,30790],{"class":107},[101,34736,30793],{"class":160},[101,34738,30796],{"class":111},[101,34740,34741,34743,34746,34748,34750,34752],{"class":103,"line":1298},[101,34742,30806],{"class":160},[101,34744,34745],{"class":111},"(AlexNet,",[101,34747,30812],{"class":160},[101,34749,30815],{"class":111},[101,34751,30818],{"class":160},[101,34753,1963],{"class":111},[101,34755,34756,34758,34761,34763],{"class":103,"line":1304},[101,34757,30834],{"class":160},[101,34759,34760],{"class":111},".ReLu",[101,34762,157],{"class":107},[101,34764,34765],{"class":111},"nn.ReLU()\n",[101,34767,34768,34770,34772,34774,34776,34778,34780,34782,34784,34786,34788,34790,34792,34794,34796,34798,34800,34802,34804,34806],{"class":103,"line":1316},[101,34769,30834],{"class":160},[101,34771,30837],{"class":111},[101,34773,157],{"class":107},[101,34775,30842],{"class":111},[101,34777,30845],{"class":5204},[101,34779,157],{"class":107},[101,34781,329],{"class":160},[101,34783,489],{"class":111},[101,34785,30854],{"class":5204},[101,34787,157],{"class":107},[101,34789,321],{"class":160},[101,34791,489],{"class":111},[101,34793,30863],{"class":5204},[101,34795,157],{"class":107},[101,34797,583],{"class":160},[101,34799,489],{"class":111},[101,34801,30918],{"class":5204},[101,34803,157],{"class":107},[101,34805,404],{"class":160},[101,34807,118],{"class":111},[101,34809,34810,34812,34814,34816,34819,34821,34823,34825,34827,34829,34831,34833],{"class":103,"line":1599},[101,34811,30834],{"class":160},[101,34813,30902],{"class":111},[101,34815,157],{"class":107},[101,34817,34818],{"class":111},"nn.MaxPool2d(",[101,34820,30863],{"class":5204},[101,34822,157],{"class":107},[101,34824,183],{"class":160},[101,34826,489],{"class":111},[101,34828,30918],{"class":5204},[101,34830,157],{"class":107},[101,34832,189],{"class":160},[101,34834,118],{"class":111},[101,34836,34837,34839,34841,34843,34845,34847,34849,34851,34853,34855,34857,34860,34862,34864,34866,34868,34870,34872,34874,34876],{"class":103,"line":1604},[101,34838,30834],{"class":160},[101,34840,30931],{"class":111},[101,34842,157],{"class":107},[101,34844,30842],{"class":111},[101,34846,30845],{"class":5204},[101,34848,157],{"class":107},[101,34850,321],{"class":160},[101,34852,489],{"class":111},[101,34854,30854],{"class":5204},[101,34856,157],{"class":107},[101,34858,34859],{"class":160},"256",[101,34861,489],{"class":111},[101,34863,30863],{"class":5204},[101,34865,157],{"class":107},[101,34867,430],{"class":160},[101,34869,489],{"class":111},[101,34871,30872],{"class":5204},[101,34873,157],{"class":107},[101,34875,189],{"class":160},[101,34877,118],{"class":111},[101,34879,34880,34882,34884,34886,34888,34890,34892,34894,34896,34898,34900,34902],{"class":103,"line":1610},[101,34881,30834],{"class":160},[101,34883,30966],{"class":111},[101,34885,157],{"class":107},[101,34887,34818],{"class":111},[101,34889,30863],{"class":5204},[101,34891,157],{"class":107},[101,34893,183],{"class":160},[101,34895,489],{"class":111},[101,34897,30918],{"class":5204},[101,34899,157],{"class":107},[101,34901,189],{"class":160},[101,34903,118],{"class":111},[101,34905,34906,34908,34911,34913,34915,34917,34919,34921,34923,34925,34927,34930,34932,34934,34936,34938,34940,34942,34944,34946],{"class":103,"line":1615},[101,34907,30834],{"class":160},[101,34909,34910],{"class":111},".c5",[101,34912,157],{"class":107},[101,34914,30842],{"class":111},[101,34916,30845],{"class":5204},[101,34918,157],{"class":107},[101,34920,34859],{"class":160},[101,34922,489],{"class":111},[101,34924,30854],{"class":5204},[101,34926,157],{"class":107},[101,34928,34929],{"class":160},"384",[101,34931,489],{"class":111},[101,34933,30863],{"class":5204},[101,34935,157],{"class":107},[101,34937,183],{"class":160},[101,34939,489],{"class":111},[101,34941,30872],{"class":5204},[101,34943,157],{"class":107},[101,34945,329],{"class":160},[101,34947,118],{"class":111},[101,34949,34950,34952,34955,34957,34959,34961,34963,34965,34967,34969,34971,34973,34975,34977,34979,34981,34983,34985,34987,34989],{"class":103,"line":1629},[101,34951,30834],{"class":160},[101,34953,34954],{"class":111},".c6",[101,34956,157],{"class":107},[101,34958,30842],{"class":111},[101,34960,30845],{"class":5204},[101,34962,157],{"class":107},[101,34964,34929],{"class":160},[101,34966,489],{"class":111},[101,34968,30854],{"class":5204},[101,34970,157],{"class":107},[101,34972,34929],{"class":160},[101,34974,489],{"class":111},[101,34976,30863],{"class":5204},[101,34978,157],{"class":107},[101,34980,183],{"class":160},[101,34982,489],{"class":111},[101,34984,30872],{"class":5204},[101,34986,157],{"class":107},[101,34988,329],{"class":160},[101,34990,118],{"class":111},[101,34992,34993,34995,34998,35000,35002,35004,35006,35008,35010,35012,35014,35016,35018,35020,35022,35024,35026,35028,35030,35032],{"class":103,"line":1634},[101,34994,30834],{"class":160},[101,34996,34997],{"class":111},".c7",[101,34999,157],{"class":107},[101,35001,30842],{"class":111},[101,35003,30845],{"class":5204},[101,35005,157],{"class":107},[101,35007,34929],{"class":160},[101,35009,489],{"class":111},[101,35011,30854],{"class":5204},[101,35013,157],{"class":107},[101,35015,34859],{"class":160},[101,35017,489],{"class":111},[101,35019,30863],{"class":5204},[101,35021,157],{"class":107},[101,35023,183],{"class":160},[101,35025,489],{"class":111},[101,35027,30872],{"class":5204},[101,35029,157],{"class":107},[101,35031,329],{"class":160},[101,35033,118],{"class":111},[101,35035,35036,35038,35041,35043,35045,35047,35049,35051,35053,35055,35057,35059],{"class":103,"line":1640},[101,35037,30834],{"class":160},[101,35039,35040],{"class":111},".s8",[101,35042,157],{"class":107},[101,35044,34818],{"class":111},[101,35046,30863],{"class":5204},[101,35048,157],{"class":107},[101,35050,183],{"class":160},[101,35052,489],{"class":111},[101,35054,30918],{"class":5204},[101,35056,157],{"class":107},[101,35058,189],{"class":160},[101,35060,118],{"class":111},[101,35062,35063],{"class":103,"line":1661},[101,35064,30991],{"class":170},[101,35066,35067,35069,35071,35073],{"class":103,"line":1666},[101,35068,30834],{"class":160},[101,35070,30998],{"class":111},[101,35072,157],{"class":107},[101,35074,31003],{"class":111},[101,35076,35077],{"class":103,"line":1680},[101,35078,35079],{"class":170},"       # 定义全连接层\n",[101,35081,35082,35084,35087,35089,35091,35093,35095,35097,35099,35101,35103,35106],{"class":103,"line":1685},[101,35083,30834],{"class":160},[101,35085,35086],{"class":111},".f1",[101,35088,157],{"class":107},[101,35090,31020],{"class":111},[101,35092,455],{"class":160},[101,35094,566],{"class":107},[101,35096,455],{"class":160},[101,35098,566],{"class":107},[101,35100,34859],{"class":160},[101,35102,489],{"class":111},[101,35104,35105],{"class":160},"4096",[101,35107,118],{"class":111},[101,35109,35110,35112,35115,35117,35119,35121,35123,35125],{"class":103,"line":1714},[101,35111,30834],{"class":160},[101,35113,35114],{"class":111},".f2",[101,35116,157],{"class":107},[101,35118,31020],{"class":111},[101,35120,35105],{"class":160},[101,35122,489],{"class":111},[101,35124,35105],{"class":160},[101,35126,118],{"class":111},[101,35128,35129,35131,35134,35136,35138,35140,35142,35144],{"class":103,"line":1719},[101,35130,30834],{"class":160},[101,35132,35133],{"class":111},".f3",[101,35135,157],{"class":107},[101,35137,31020],{"class":111},[101,35139,35105],{"class":160},[101,35141,489],{"class":111},[101,35143,557],{"class":160},[101,35145,118],{"class":111},[101,35147,35148],{"class":103,"line":1736},[101,35149,2387],{"emptyLinePlaceholder":27},[101,35151,35152],{"class":103,"line":1741},[101,35153,35154],{"class":170},"    # 定义前向传播\n",[101,35156,35157,35159,35161],{"class":103,"line":1746},[101,35158,30790],{"class":107},[101,35160,31082],{"class":1950},[101,35162,31085],{"class":111},[101,35164,35165,35167,35169,35171,35174,35176],{"class":103,"line":1751},[101,35166,31090],{"class":111},[101,35168,157],{"class":107},[101,35170,30812],{"class":160},[101,35172,35173],{"class":111},".ReLu(",[101,35175,30812],{"class":160},[101,35177,31102],{"class":111},[101,35179,35180,35182,35184,35186],{"class":103,"line":1765},[101,35181,31090],{"class":111},[101,35183,157],{"class":107},[101,35185,30812],{"class":160},[101,35187,31113],{"class":111},[101,35189,35190,35192,35194,35196,35198,35200],{"class":103,"line":1770},[101,35191,31090],{"class":111},[101,35193,157],{"class":107},[101,35195,30812],{"class":160},[101,35197,35173],{"class":111},[101,35199,30812],{"class":160},[101,35201,31128],{"class":111},[101,35203,35204,35206,35208,35210],{"class":103,"line":2564},[101,35205,31090],{"class":111},[101,35207,157],{"class":107},[101,35209,30812],{"class":160},[101,35211,31139],{"class":111},[101,35213,35214,35216,35218,35220,35222,35224],{"class":103,"line":2578},[101,35215,31090],{"class":111},[101,35217,157],{"class":107},[101,35219,30812],{"class":160},[101,35221,35173],{"class":111},[101,35223,30812],{"class":160},[101,35225,35226],{"class":111},".c5(x))\n",[101,35228,35229,35231,35233,35235,35237,35239],{"class":103,"line":2586},[101,35230,31090],{"class":111},[101,35232,157],{"class":107},[101,35234,30812],{"class":160},[101,35236,35173],{"class":111},[101,35238,30812],{"class":160},[101,35240,35241],{"class":111},".c6(x))\n",[101,35243,35244,35246,35248,35250,35252,35254],{"class":103,"line":2591},[101,35245,31090],{"class":111},[101,35247,157],{"class":107},[101,35249,30812],{"class":160},[101,35251,35173],{"class":111},[101,35253,30812],{"class":160},[101,35255,35256],{"class":111},".c7(x))\n",[101,35258,35259,35261,35263,35265],{"class":103,"line":2597},[101,35260,31090],{"class":111},[101,35262,157],{"class":107},[101,35264,30812],{"class":160},[101,35266,35267],{"class":111},".s8(x)\n",[101,35269,35270],{"class":103,"line":2603},[101,35271,2387],{"emptyLinePlaceholder":27},[101,35273,35274],{"class":103,"line":2608},[101,35275,35276],{"class":170},"        # 展平加线性全连接层\n",[101,35278,35279,35281,35283,35285],{"class":103,"line":7936},[101,35280,31090],{"class":111},[101,35282,157],{"class":107},[101,35284,30812],{"class":160},[101,35286,31150],{"class":111},[101,35288,35289,35291,35293,35295,35297,35299],{"class":103,"line":7960},[101,35290,31090],{"class":111},[101,35292,157],{"class":107},[101,35294,30812],{"class":160},[101,35296,35173],{"class":111},[101,35298,30812],{"class":160},[101,35300,35301],{"class":111},".f1(x))\n",[101,35303,35304],{"class":103,"line":7965},[101,35305,35306],{"class":170},"        # 还需要dropout对神经元随机进行失活\n",[101,35308,35309,35311,35313,35316,35319],{"class":103,"line":7971},[101,35310,31090],{"class":111},[101,35312,157],{"class":107},[101,35314,35315],{"class":111},"F.dropout(x,",[101,35317,35318],{"class":160},"0.5",[101,35320,118],{"class":111},[101,35322,35323,35325,35327,35329,35331,35333],{"class":103,"line":7998},[101,35324,31090],{"class":111},[101,35326,157],{"class":107},[101,35328,30812],{"class":160},[101,35330,35173],{"class":111},[101,35332,30812],{"class":160},[101,35334,35335],{"class":111},".f2(x))\n",[101,35337,35338,35340,35342,35344,35346],{"class":103,"line":8003},[101,35339,31090],{"class":111},[101,35341,157],{"class":107},[101,35343,35315],{"class":111},[101,35345,35318],{"class":160},[101,35347,118],{"class":111},[101,35349,35350],{"class":103,"line":8009},[101,35351,35352],{"class":170},"        # 直接输出\n",[101,35354,35355,35357,35359,35361],{"class":103,"line":8021},[101,35356,31090],{"class":111},[101,35358,157],{"class":107},[101,35360,30812],{"class":160},[101,35362,35363],{"class":111},".f3(x)\n",[101,35365,35366],{"class":103,"line":8033},[101,35367,35368],{"class":170},"        # 前向传播输出\n",[101,35370,35371,35373],{"class":103,"line":8045},[101,35372,14740],{"class":107},[101,35374,31198],{"class":111},[101,35376,35377],{"class":103,"line":9704},[101,35378,35379],{"class":170},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[101,35381,35382,35384,35386,35388,35390],{"class":103,"line":9729},[101,35383,1518],{"class":107},[101,35385,31209],{"class":160},[101,35387,2936],{"class":107},[101,35389,31214],{"class":216},[101,35391,3726],{"class":111},[101,35393,35394,35396,35398,35400,35402,35404,35406,35408,35410],{"class":103,"line":9752},[101,35395,31226],{"class":111},[101,35397,157],{"class":107},[101,35399,30440],{"class":111},[101,35401,31233],{"class":216},[101,35403,1691],{"class":107},[101,35405,31238],{"class":111},[101,35407,1688],{"class":107},[101,35409,30465],{"class":216},[101,35411,118],{"class":111},[101,35413,35414],{"class":103,"line":9776},[101,35415,35416],{"class":170},"    # 模型实例化，然后将实例化的模型放到设备中\n",[101,35418,35419,35421,35423],{"class":103,"line":9781},[101,35420,31278],{"class":111},[101,35422,157],{"class":107},[101,35424,35425],{"class":111},"AlexNet().to(device)\n",[101,35427,35428,35430,35432,35434,35436,35439,35441,35443],{"class":103,"line":9786},[101,35429,31288],{"class":160},[101,35431,31291],{"class":111},[101,35433,329],{"class":160},[101,35435,489],{"class":111},[101,35437,35438],{"class":160},"227",[101,35440,489],{"class":111},[101,35442,35438],{"class":160},[101,35444,31304],{"class":111},[55,35446,35447],{"start":21},[58,35448,31317],{},[92,35450,35452],{"className":30367,"code":35451,"language":30369,"meta":20,"style":20},"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",[98,35453,35454,35460,35466,35476,35482,35492,35502,35512,35522,35532,35536,35547,35557,35561,35565,35569,35577,35589,35599,35615,35625,35657,35671,35681,35691,35695,35705,35719,35729,35739,35749,35755,35759,35763,35767,35771,35775,35783,35803,35807,35811,35815,35819,35823,35839,35843,35847,35855,35859,35863,35871,35875,35879,35883,35891,35895,35899,35903,35907,35915,35919,35927,35931,35939,35943,35951,35955,35963,35967,35971,35979,35983,35987,35991,36003,36027,36041,36045,36049,36053,36061,36065,36073,36077,36085,36089,36097,36101,36109,36113,36121,36125,36137,36141,36149,36153,36161,36165,36169,36173,36177,36185,36189,36205,36209,36217,36221,36225,36229,36233,36237,36241,36245,36261,36265,36277,36281,36293,36297,36309,36313,36321,36325,36333,36337,36341,36346,36352,36356,36365,36369,36386,36390,36399,36403,36421,36434,36439,36452,36456,36460,36468,36472,36476,36484,36488,36496,36500,36508,36512,36516,36558,36600,36604,36608,36624,36628,36644,36648,36652,36660,36664,36668,36680,36718,36723,36728,36737,36741,36755,36765,36771,36777,36783,36789,36793,36797,36803,36807,36811,36819,36823,36841,36845,36849,36853,36869,36873,36877,36881,36885,36889,36909,36929,36933,36937,36941,36949,36957,36961,36977,36997,37017,37021,37025,37033,37041,37045,37049,37053,37065,37069,37079,37087,37104],{"__ignoreMap":20},[101,35455,35456,35458],{"class":103,"line":104},[101,35457,30381],{"class":107},[101,35459,31811],{"class":111},[101,35461,35462,35464],{"class":103,"line":21},[101,35463,30381],{"class":107},[101,35465,31818],{"class":111},[101,35467,35468,35470,35472,35474],{"class":103,"line":1166},[101,35469,30381],{"class":107},[101,35471,31829],{"class":111},[101,35473,31372],{"class":107},[101,35475,31834],{"class":111},[101,35477,35478,35480],{"class":103,"line":1181},[101,35479,30381],{"class":107},[101,35481,30384],{"class":111},[101,35483,35484,35486,35488,35490],{"class":103,"line":1187},[101,35485,30726],{"class":107},[101,35487,31404],{"class":111},[101,35489,30381],{"class":107},[101,35491,31851],{"class":111},[101,35493,35494,35496,35498,35500],{"class":103,"line":1201},[101,35495,30726],{"class":107},[101,35497,31357],{"class":111},[101,35499,30381],{"class":107},[101,35501,31362],{"class":111},[101,35503,35504,35506,35508,35510],{"class":103,"line":1207},[101,35505,30726],{"class":107},[101,35507,31387],{"class":111},[101,35509,30381],{"class":107},[101,35511,31392],{"class":111},[101,35513,35514,35516,35518,35520],{"class":103,"line":1298},[101,35515,30381],{"class":107},[101,35517,31404],{"class":111},[101,35519,31372],{"class":107},[101,35521,31409],{"class":111},[101,35523,35524,35526,35528,35530],{"class":103,"line":1304},[101,35525,30381],{"class":107},[101,35527,31421],{"class":111},[101,35529,31372],{"class":107},[101,35531,31426],{"class":111},[101,35533,35534],{"class":103,"line":1316},[101,35535,31896],{"class":170},[101,35537,35538,35540,35542,35544],{"class":103,"line":1599},[101,35539,30726],{"class":107},[101,35541,31903],{"class":111},[101,35543,30381],{"class":107},[101,35545,35546],{"class":111}," AlexNet\n",[101,35548,35549,35551,35553,35555],{"class":103,"line":1604},[101,35550,30726],{"class":107},[101,35552,30729],{"class":111},[101,35554,30381],{"class":107},[101,35556,30734],{"class":111},[101,35558,35559],{"class":103,"line":1610},[101,35560,2387],{"emptyLinePlaceholder":27},[101,35562,35563],{"class":103,"line":1615},[101,35564,2387],{"emptyLinePlaceholder":27},[101,35566,35567],{"class":103,"line":1629},[101,35568,31931],{"class":170},[101,35570,35571,35573,35575],{"class":103,"line":1634},[101,35572,31936],{"class":107},[101,35574,31939],{"class":1950},[101,35576,31942],{"class":111},[101,35578,35579,35581,35583,35585,35587],{"class":103,"line":1640},[101,35580,31947],{"class":111},[101,35582,157],{"class":107},[101,35584,31444],{"class":111},[101,35586,31452],{"class":216},[101,35588,31455],{"class":111},[101,35590,35591,35593,35595,35597],{"class":103,"line":1661},[101,35592,31960],{"class":5204},[101,35594,157],{"class":107},[101,35596,31465],{"class":160},[101,35598,31455],{"class":111},[101,35600,35601,35603,35605,35607,35609,35611,35613],{"class":103,"line":1666},[101,35602,31971],{"class":5204},[101,35604,157],{"class":107},[101,35606,31482],{"class":111},[101,35608,31485],{"class":5204},[101,35610,157],{"class":107},[101,35612,35438],{"class":160},[101,35614,31493],{"class":111},[101,35616,35617,35619,35621,35623],{"class":103,"line":1680},[101,35618,31988],{"class":5204},[101,35620,157],{"class":107},[101,35622,31465],{"class":160},[101,35624,118],{"class":111},[101,35626,35627,35629,35631,35633,35635,35637,35639,35641,35643,35645,35647,35649,35651,35653,35655],{"class":103,"line":1685},[101,35628,31999],{"class":111},[101,35630,157],{"class":107},[101,35632,32004],{"class":111},[101,35634,32007],{"class":160},[101,35636,112],{"class":111},[101,35638,32012],{"class":160},[101,35640,566],{"class":107},[101,35642,7346],{"class":160},[101,35644,32019],{"class":111},[101,35646,32007],{"class":160},[101,35648,112],{"class":111},[101,35650,32026],{"class":160},[101,35652,566],{"class":107},[101,35654,7346],{"class":160},[101,35656,32033],{"class":111},[101,35658,35659,35661,35663,35665,35667,35669],{"class":103,"line":1714},[101,35660,32038],{"class":111},[101,35662,157],{"class":107},[101,35664,32043],{"class":111},[101,35666,31526],{"class":5204},[101,35668,157],{"class":107},[101,35670,31531],{"class":111},[101,35672,35673,35675,35677,35679],{"class":103,"line":1719},[101,35674,32054],{"class":5204},[101,35676,157],{"class":107},[101,35678,32059],{"class":160},[101,35680,31455],{"class":111},[101,35682,35683,35685,35687,35689],{"class":103,"line":1736},[101,35684,32066],{"class":5204},[101,35686,157],{"class":107},[101,35688,31465],{"class":160},[101,35690,31455],{"class":111},[101,35692,35693],{"class":103,"line":1741},[101,35694,32077],{"class":170},[101,35696,35697,35699,35701,35703],{"class":103,"line":1746},[101,35698,32082],{"class":5204},[101,35700,157],{"class":107},[101,35702,506],{"class":160},[101,35704,118],{"class":111},[101,35706,35707,35709,35711,35713,35715,35717],{"class":103,"line":1751},[101,35708,32093],{"class":111},[101,35710,157],{"class":107},[101,35712,31523],{"class":111},[101,35714,31526],{"class":5204},[101,35716,157],{"class":107},[101,35718,32104],{"class":111},[101,35720,35721,35723,35725,35727],{"class":103,"line":1765},[101,35722,32109],{"class":5204},[101,35724,157],{"class":107},[101,35726,32059],{"class":160},[101,35728,31455],{"class":111},[101,35730,35731,35733,35735,35737],{"class":103,"line":1770},[101,35732,32120],{"class":5204},[101,35734,157],{"class":107},[101,35736,31465],{"class":160},[101,35738,31455],{"class":111},[101,35740,35741,35743,35745,35747],{"class":103,"line":2564},[101,35742,32131],{"class":5204},[101,35744,157],{"class":107},[101,35746,506],{"class":160},[101,35748,118],{"class":111},[101,35750,35751,35753],{"class":103,"line":2578},[101,35752,4077],{"class":107},[101,35754,32144],{"class":111},[101,35756,35757],{"class":103,"line":2586},[101,35758,2387],{"emptyLinePlaceholder":27},[101,35760,35761],{"class":103,"line":2591},[101,35762,32153],{"class":170},[101,35764,35765],{"class":103,"line":2597},[101,35766,32158],{"class":170},[101,35768,35769],{"class":103,"line":2603},[101,35770,2387],{"emptyLinePlaceholder":27},[101,35772,35773],{"class":103,"line":2608},[101,35774,32167],{"class":170},[101,35776,35777,35779,35781],{"class":103,"line":7936},[101,35778,31936],{"class":107},[101,35780,32174],{"class":1950},[101,35782,32177],{"class":111},[101,35784,35785,35787,35789,35791,35793,35795,35797,35799,35801],{"class":103,"line":7960},[101,35786,31226],{"class":111},[101,35788,157],{"class":107},[101,35790,30440],{"class":111},[101,35792,31233],{"class":216},[101,35794,1691],{"class":107},[101,35796,31238],{"class":111},[101,35798,1688],{"class":107},[101,35800,32196],{"class":216},[101,35802,118],{"class":111},[101,35804,35805],{"class":103,"line":7965},[101,35806,2387],{"emptyLinePlaceholder":27},[101,35808,35809],{"class":103,"line":7971},[101,35810,2387],{"emptyLinePlaceholder":27},[101,35812,35813],{"class":103,"line":7998},[101,35814,32211],{"class":170},[101,35816,35817],{"class":103,"line":8003},[101,35818,32216],{"class":170},[101,35820,35821],{"class":103,"line":8009},[101,35822,32221],{"class":170},[101,35824,35825,35827,35829,35831,35833,35835,35837],{"class":103,"line":8021},[101,35826,32226],{"class":111},[101,35828,157],{"class":107},[101,35830,32231],{"class":111},[101,35832,32234],{"class":5204},[101,35834,157],{"class":107},[101,35836,32239],{"class":160},[101,35838,118],{"class":111},[101,35840,35841],{"class":103,"line":8033},[101,35842,2387],{"emptyLinePlaceholder":27},[101,35844,35845],{"class":103,"line":8045},[101,35846,32250],{"class":170},[101,35848,35849,35851,35853],{"class":103,"line":9704},[101,35850,32255],{"class":111},[101,35852,157],{"class":107},[101,35854,32260],{"class":111},[101,35856,35857],{"class":103,"line":9729},[101,35858,2387],{"emptyLinePlaceholder":27},[101,35860,35861],{"class":103,"line":9752},[101,35862,32269],{"class":170},[101,35864,35865,35867,35869],{"class":103,"line":9776},[101,35866,31278],{"class":111},[101,35868,157],{"class":107},[101,35870,32278],{"class":111},[101,35872,35873],{"class":103,"line":9781},[101,35874,32283],{"class":170},[101,35876,35877],{"class":103,"line":9786},[101,35878,32288],{"class":170},[101,35880,35881],{"class":103,"line":9791},[101,35882,32293],{"class":170},[101,35884,35885,35887,35889],{"class":103,"line":9800},[101,35886,32298],{"class":111},[101,35888,157],{"class":107},[101,35890,32303],{"class":111},[101,35892,35893],{"class":103,"line":9805},[101,35894,2387],{"emptyLinePlaceholder":27},[101,35896,35897],{"class":103,"line":9811},[101,35898,2387],{"emptyLinePlaceholder":27},[101,35900,35901],{"class":103,"line":9832},[101,35902,32316],{"class":170},[101,35904,35905],{"class":103,"line":9838},[101,35906,32321],{"class":170},[101,35908,35909,35911,35913],{"class":103,"line":9852},[101,35910,32326],{"class":111},[101,35912,157],{"class":107},[101,35914,32331],{"class":160},[101,35916,35917],{"class":103,"line":9858},[101,35918,32336],{"class":170},[101,35920,35921,35923,35925],{"class":103,"line":9885},[101,35922,32341],{"class":111},[101,35924,157],{"class":107},[101,35926,32346],{"class":111},[101,35928,35929],{"class":103,"line":9894},[101,35930,32351],{"class":170},[101,35932,35933,35935,35937],{"class":103,"line":9900},[101,35934,32356],{"class":111},[101,35936,157],{"class":107},[101,35938,32346],{"class":111},[101,35940,35941],{"class":103,"line":9908},[101,35942,32365],{"class":170},[101,35944,35945,35947,35949],{"class":103,"line":9913},[101,35946,32370],{"class":111},[101,35948,157],{"class":107},[101,35950,32346],{"class":111},[101,35952,35953],{"class":103,"line":16592},[101,35954,32379],{"class":170},[101,35956,35957,35959,35961],{"class":103,"line":16598},[101,35958,32384],{"class":111},[101,35960,157],{"class":107},[101,35962,32346],{"class":111},[101,35964,35965],{"class":103,"line":16621},[101,35966,2387],{"emptyLinePlaceholder":27},[101,35968,35969],{"class":103,"line":16627},[101,35970,32397],{"class":170},[101,35972,35973,35975,35977],{"class":103,"line":16650},[101,35974,32402],{"class":111},[101,35976,157],{"class":107},[101,35978,32407],{"class":111},[101,35980,35981],{"class":103,"line":16664},[101,35982,2387],{"emptyLinePlaceholder":27},[101,35984,35985],{"class":103,"line":16684},[101,35986,2387],{"emptyLinePlaceholder":27},[101,35988,35989],{"class":103,"line":16690},[101,35990,32420],{"class":170},[101,35992,35993,35995,35997,35999,36001],{"class":103,"line":16701},[101,35994,3188],{"class":107},[101,35996,32427],{"class":111},[101,35998,26032],{"class":107},[101,36000,32432],{"class":160},[101,36002,32435],{"class":111},[101,36004,36005,36007,36009,36011,36013,36015,36017,36019,36021,36023,36025],{"class":103,"line":16724},[101,36006,32440],{"class":160},[101,36008,112],{"class":111},[101,36010,32445],{"class":216},[101,36012,32448],{"class":160},[101,36014,695],{"class":216},[101,36016,32448],{"class":160},[101,36018,362],{"class":216},[101,36020,32457],{"class":111},[101,36022,643],{"class":107},[101,36024,329],{"class":160},[101,36026,30486],{"class":111},[101,36028,36029,36031,36033,36035,36037,36039],{"class":103,"line":16746},[101,36030,32440],{"class":160},[101,36032,112],{"class":111},[101,36034,32472],{"class":216},[101,36036,566],{"class":107},[101,36038,557],{"class":160},[101,36040,118],{"class":111},[101,36042,36043],{"class":103,"line":16751},[101,36044,2387],{"emptyLinePlaceholder":27},[101,36046,36047],{"class":103,"line":16757},[101,36048,32487],{"class":170},[101,36050,36051],{"class":103,"line":16771},[101,36052,32492],{"class":170},[101,36054,36055,36057,36059],{"class":103,"line":16784},[101,36056,32497],{"class":111},[101,36058,157],{"class":107},[101,36060,32331],{"class":160},[101,36062,36063],{"class":103,"line":16789},[101,36064,32506],{"class":170},[101,36066,36067,36069,36071],{"class":103,"line":16803},[101,36068,32511],{"class":111},[101,36070,157],{"class":107},[101,36072,3072],{"class":160},[101,36074,36075],{"class":103,"line":16808},[101,36076,32520],{"class":170},[101,36078,36079,36081,36083],{"class":103,"line":16814},[101,36080,32525],{"class":111},[101,36082,157],{"class":107},[101,36084,32331],{"class":160},[101,36086,36087],{"class":103,"line":16819},[101,36088,32534],{"class":170},[101,36090,36091,36093,36095],{"class":103,"line":16833},[101,36092,32539],{"class":111},[101,36094,157],{"class":107},[101,36096,3072],{"class":160},[101,36098,36099],{"class":103,"line":16838},[101,36100,32548],{"class":170},[101,36102,36103,36105,36107],{"class":103,"line":16843},[101,36104,32553],{"class":111},[101,36106,157],{"class":107},[101,36108,3072],{"class":160},[101,36110,36111],{"class":103,"line":16857},[101,36112,32562],{"class":170},[101,36114,36115,36117,36119],{"class":103,"line":16869},[101,36116,32567],{"class":111},[101,36118,157],{"class":107},[101,36120,3072],{"class":160},[101,36122,36123],{"class":103,"line":16874},[101,36124,32576],{"class":170},[101,36126,36127,36129,36131,36133,36135],{"class":103,"line":16887},[101,36128,3390],{"class":107},[101,36130,31590],{"class":111},[101,36132,26032],{"class":107},[101,36134,31595],{"class":160},[101,36136,32589],{"class":111},[101,36138,36139],{"class":103,"line":16892},[101,36140,32594],{"class":170},[101,36142,36143,36145,36147],{"class":103,"line":16897},[101,36144,32599],{"class":111},[101,36146,157],{"class":107},[101,36148,32604],{"class":111},[101,36150,36151],{"class":103,"line":16902},[101,36152,32609],{"class":170},[101,36154,36155,36157,36159],{"class":103,"line":16915},[101,36156,32614],{"class":111},[101,36158,157],{"class":107},[101,36160,32619],{"class":111},[101,36162,36163],{"class":103,"line":16920},[101,36164,32625],{"class":170},[101,36166,36167],{"class":103,"line":32622},[101,36168,32631],{"class":111},[101,36170,36171],{"class":103,"line":32628},[101,36172,32637],{"class":170},[101,36174,36175],{"class":103,"line":32634},[101,36176,32643],{"class":170},[101,36178,36179,36181,36183],{"class":103,"line":32640},[101,36180,32649],{"class":111},[101,36182,157],{"class":107},[101,36184,32654],{"class":111},[101,36186,36187],{"class":103,"line":32646},[101,36188,32660],{"class":170},[101,36190,36191,36193,36195,36197,36199,36201,36203],{"class":103,"line":32657},[101,36192,32666],{"class":111},[101,36194,157],{"class":107},[101,36196,32671],{"class":111},[101,36198,32674],{"class":5204},[101,36200,157],{"class":107},[101,36202,329],{"class":160},[101,36204,118],{"class":111},[101,36206,36207],{"class":103,"line":32663},[101,36208,32686],{"class":170},[101,36210,36211,36213,36215],{"class":103,"line":32683},[101,36212,32692],{"class":111},[101,36214,157],{"class":107},[101,36216,32697],{"class":111},[101,36218,36219],{"class":103,"line":32689},[101,36220,32703],{"class":170},[101,36222,36223],{"class":103,"line":32700},[101,36224,32709],{"class":111},[101,36226,36227],{"class":103,"line":32706},[101,36228,32715],{"class":170},[101,36230,36231],{"class":103,"line":32712},[101,36232,32721],{"class":111},[101,36234,36235],{"class":103,"line":32718},[101,36236,32727],{"class":170},[101,36238,36239],{"class":103,"line":32724},[101,36240,32733],{"class":111},[101,36242,36243],{"class":103,"line":32730},[101,36244,32739],{"class":170},[101,36246,36247,36249,36251,36253,36255,36257,36259],{"class":103,"line":32736},[101,36248,32745],{"class":111},[101,36250,9465],{"class":107},[101,36252,32750],{"class":111},[101,36254,566],{"class":107},[101,36256,32755],{"class":111},[101,36258,303],{"class":160},[101,36260,118],{"class":111},[101,36262,36263],{"class":103,"line":32742},[101,36264,32765],{"class":170},[101,36266,36267,36269,36271,36273,36275],{"class":103,"line":32762},[101,36268,32771],{"class":111},[101,36270,9465],{"class":107},[101,36272,32776],{"class":111},[101,36274,2936],{"class":107},[101,36276,32781],{"class":111},[101,36278,36279],{"class":103,"line":32768},[101,36280,32787],{"class":170},[101,36282,36283,36285,36287,36289,36291],{"class":103,"line":32784},[101,36284,32793],{"class":111},[101,36286,9465],{"class":107},[101,36288,32755],{"class":111},[101,36290,303],{"class":160},[101,36292,118],{"class":111},[101,36294,36295],{"class":103,"line":32790},[101,36296,32807],{"class":170},[101,36298,36299,36301,36303,36305,36307],{"class":103,"line":32804},[101,36300,3390],{"class":107},[101,36302,32815],{"class":111},[101,36304,26032],{"class":107},[101,36306,31595],{"class":160},[101,36308,32822],{"class":111},[101,36310,36311],{"class":103,"line":32810},[101,36312,32828],{"class":170},[101,36314,36315,36317,36319],{"class":103,"line":32825},[101,36316,32599],{"class":111},[101,36318,157],{"class":107},[101,36320,32604],{"class":111},[101,36322,36323],{"class":103,"line":32831},[101,36324,32843],{"class":170},[101,36326,36327,36329,36331],{"class":103,"line":32840},[101,36328,32614],{"class":111},[101,36330,157],{"class":107},[101,36332,32619],{"class":111},[101,36334,36335],{"class":103,"line":32846},[101,36336,32858],{"class":170},[101,36338,36339],{"class":103,"line":32855},[101,36340,32864],{"class":111},[101,36342,36343],{"class":103,"line":32861},[101,36344,36345],{"class":170},"            # 验证时不计算梯度以节省内存\u002F计算\n",[101,36347,36348,36350],{"class":103,"line":32867},[101,36349,32870],{"class":107},[101,36351,32873],{"class":111},[101,36353,36354],{"class":103,"line":32876},[101,36355,32879],{"class":170},[101,36357,36358,36361,36363],{"class":103,"line":32882},[101,36359,36360],{"class":111},"                output",[101,36362,157],{"class":107},[101,36364,32654],{"class":111},[101,36366,36367],{"class":103,"line":32893},[101,36368,32896],{"class":170},[101,36370,36371,36374,36376,36378,36380,36382,36384],{"class":103,"line":32899},[101,36372,36373],{"class":111},"                pre_lab",[101,36375,157],{"class":107},[101,36377,32671],{"class":111},[101,36379,32674],{"class":5204},[101,36381,157],{"class":107},[101,36383,329],{"class":160},[101,36385,118],{"class":111},[101,36387,36388],{"class":103,"line":32918},[101,36389,32921],{"class":170},[101,36391,36392,36395,36397],{"class":103,"line":32924},[101,36393,36394],{"class":111},"                val_batch_loss",[101,36396,157],{"class":107},[101,36398,32697],{"class":111},[101,36400,36401],{"class":103,"line":32935},[101,36402,32938],{"class":170},[101,36404,36405,36408,36410,36413,36415,36417,36419],{"class":103,"line":32941},[101,36406,36407],{"class":111},"                val_loss",[101,36409,9465],{"class":107},[101,36411,36412],{"class":111},"val_batch_loss.item()",[101,36414,566],{"class":107},[101,36416,32755],{"class":111},[101,36418,303],{"class":160},[101,36420,118],{"class":111},[101,36422,36423,36426,36428,36430,36432],{"class":103,"line":32961},[101,36424,36425],{"class":111},"                val_corrects",[101,36427,9465],{"class":107},[101,36429,32776],{"class":111},[101,36431,2936],{"class":107},[101,36433,32781],{"class":111},[101,36435,36436],{"class":103,"line":32977},[101,36437,36438],{"class":170},"            # 当前用于验证的样本数量\n",[101,36440,36441,36444,36446,36448,36450],{"class":103,"line":32983},[101,36442,36443],{"class":111},"            val_num",[101,36445,9465],{"class":107},[101,36447,32755],{"class":111},[101,36449,303],{"class":160},[101,36451,118],{"class":111},[101,36453,36454],{"class":103,"line":32997},[101,36455,33000],{"class":170},[101,36457,36458],{"class":103,"line":33003},[101,36459,33006],{"class":170},[101,36461,36462,36464,36466],{"class":103,"line":33009},[101,36463,33012],{"class":111},[101,36465,695],{"class":107},[101,36467,33017],{"class":111},[101,36469,36470],{"class":103,"line":33020},[101,36471,33023],{"class":170},[101,36473,36474],{"class":103,"line":33026},[101,36475,33029],{"class":170},[101,36477,36478,36480,36482],{"class":103,"line":33032},[101,36479,33035],{"class":111},[101,36481,695],{"class":107},[101,36483,33017],{"class":111},[101,36485,36486],{"class":103,"line":33042},[101,36487,33045],{"class":170},[101,36489,36490,36492,36494],{"class":103,"line":33048},[101,36491,33051],{"class":111},[101,36493,695],{"class":107},[101,36495,33056],{"class":111},[101,36497,36498],{"class":103,"line":33059},[101,36499,33062],{"class":170},[101,36501,36502,36504,36506],{"class":103,"line":33065},[101,36503,33068],{"class":111},[101,36505,695],{"class":107},[101,36507,33056],{"class":111},[101,36509,36510],{"class":103,"line":33075},[101,36511,2387],{"emptyLinePlaceholder":27},[101,36513,36514],{"class":103,"line":33080},[101,36515,33083],{"class":170},[101,36517,36518,36520,36522,36524,36526,36528,36530,36532,36534,36536,36538,36540,36542,36544,36546,36548,36550,36552,36554,36556],{"class":103,"line":33086},[101,36519,32440],{"class":160},[101,36521,112],{"class":111},[101,36523,3579],{"class":216},[101,36525,32448],{"class":160},[101,36527,33097],{"class":216},[101,36529,1007],{"class":160},[101,36531,33102],{"class":107},[101,36533,1057],{"class":160},[101,36535,33107],{"class":216},[101,36537,1007],{"class":160},[101,36539,33102],{"class":107},[101,36541,1057],{"class":160},[101,36543,3579],{"class":216},[101,36545,33118],{"class":111},[101,36547,643],{"class":107},[101,36549,329],{"class":160},[101,36551,33125],{"class":111},[101,36553,643],{"class":107},[101,36555,329],{"class":160},[101,36557,33132],{"class":111},[101,36559,36560,36562,36564,36566,36568,36570,36572,36574,36576,36578,36580,36582,36584,36586,36588,36590,36592,36594,36596,36598],{"class":103,"line":33135},[101,36561,32440],{"class":160},[101,36563,112],{"class":111},[101,36565,3579],{"class":216},[101,36567,32448],{"class":160},[101,36569,33146],{"class":216},[101,36571,1007],{"class":160},[101,36573,33102],{"class":107},[101,36575,1057],{"class":160},[101,36577,33155],{"class":216},[101,36579,1007],{"class":160},[101,36581,33102],{"class":107},[101,36583,1057],{"class":160},[101,36585,3579],{"class":216},[101,36587,33166],{"class":111},[101,36589,643],{"class":107},[101,36591,329],{"class":160},[101,36593,33173],{"class":111},[101,36595,643],{"class":107},[101,36597,329],{"class":160},[101,36599,33132],{"class":111},[101,36601,36602],{"class":103,"line":33182},[101,36603,2387],{"emptyLinePlaceholder":27},[101,36605,36606],{"class":103,"line":33187},[101,36607,33190],{"class":170},[101,36609,36610,36612,36614,36616,36618,36620,36622],{"class":103,"line":33193},[101,36611,2484],{"class":107},[101,36613,33198],{"class":111},[101,36615,643],{"class":107},[101,36617,329],{"class":160},[101,36619,1051],{"class":111},[101,36621,1071],{"class":107},[101,36623,33209],{"class":111},[101,36625,36626],{"class":103,"line":33212},[101,36627,33215],{"class":170},[101,36629,36630,36632,36634,36636,36638,36640,36642],{"class":103,"line":33218},[101,36631,33221],{"class":111},[101,36633,151],{"class":160},[101,36635,157],{"class":107},[101,36637,33228],{"class":111},[101,36639,643],{"class":107},[101,36641,329],{"class":160},[101,36643,33235],{"class":111},[101,36645,36646],{"class":103,"line":33238},[101,36647,33241],{"class":170},[101,36649,36650],{"class":103,"line":33244},[101,36651,33247],{"class":170},[101,36653,36654,36656,36658],{"class":103,"line":33250},[101,36655,33253],{"class":111},[101,36657,157],{"class":107},[101,36659,32303],{"class":111},[101,36661,36662],{"class":103,"line":33260},[101,36663,2387],{"emptyLinePlaceholder":27},[101,36665,36666],{"class":103,"line":33265},[101,36667,33268],{"class":170},[101,36669,36670,36672,36674,36676,36678],{"class":103,"line":33271},[101,36671,33274],{"class":111},[101,36673,157],{"class":107},[101,36675,33279],{"class":111},[101,36677,643],{"class":107},[101,36679,33284],{"class":111},[101,36681,36682,36684,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706,36708,36710,36712,36714,36716],{"class":103,"line":33287},[101,36683,32440],{"class":160},[101,36685,112],{"class":111},[101,36687,33294],{"class":216},[101,36689,1007],{"class":160},[101,36691,33299],{"class":107},[101,36693,1057],{"class":160},[101,36695,655],{"class":216},[101,36697,1007],{"class":160},[101,36699,33299],{"class":107},[101,36701,1057],{"class":160},[101,36703,33312],{"class":216},[101,36705,33315],{"class":111},[101,36707,33318],{"class":107},[101,36709,1018],{"class":160},[101,36711,33323],{"class":111},[101,36713,439],{"class":107},[101,36715,1018],{"class":160},[101,36717,30486],{"class":111},[101,36719,36720],{"class":103,"line":33332},[101,36721,36722],{"class":170},"    # 选择最优参数并保存\n",[101,36724,36725],{"class":103,"line":33338},[101,36726,36727],{"class":170},"    # 保存最佳模型权重字典\n",[101,36729,36730,36733,36735],{"class":103,"line":33344},[101,36731,36732],{"class":111},"    torch.save(best_model_wts,",[101,36734,33356],{"class":216},[101,36736,118],{"class":111},[101,36738,36739],{"class":103,"line":33350},[101,36740,33376],{"class":170},[101,36742,36743,36745,36747,36749,36751,36753],{"class":103,"line":33361},[101,36744,33382],{"class":111},[101,36746,157],{"class":107},[101,36748,33387],{"class":111},[101,36750,33390],{"class":5204},[101,36752,157],{"class":107},[101,36754,1533],{"class":111},[101,36756,36757,36759,36761,36763],{"class":103,"line":33367},[101,36758,33400],{"class":216},[101,36760,970],{"class":111},[101,36762,33405],{"class":160},[101,36764,33408],{"class":111},[101,36766,36767,36769],{"class":103,"line":33373},[101,36768,33414],{"class":216},[101,36770,33417],{"class":111},[101,36772,36773,36775],{"class":103,"line":33379},[101,36774,33423],{"class":216},[101,36776,33426],{"class":111},[101,36778,36779,36781],{"class":103,"line":33397},[101,36780,33432],{"class":216},[101,36782,33435],{"class":111},[101,36784,36785,36787],{"class":103,"line":33411},[101,36786,33441],{"class":216},[101,36788,33444],{"class":111},[101,36790,36791],{"class":103,"line":33420},[101,36792,33450],{"class":111},[101,36794,36795],{"class":103,"line":33429},[101,36796,33456],{"class":170},[101,36798,36799,36801],{"class":103,"line":33438},[101,36800,4077],{"class":107},[101,36802,33464],{"class":111},[101,36804,36805],{"class":103,"line":33447},[101,36806,2387],{"emptyLinePlaceholder":27},[101,36808,36809],{"class":103,"line":33453},[101,36810,33475],{"class":170},[101,36812,36813,36815,36817],{"class":103,"line":33459},[101,36814,31936],{"class":107},[101,36816,33483],{"class":1950},[101,36818,33486],{"class":111},[101,36820,36821],{"class":103,"line":33467},[101,36822,33492],{"class":170},[101,36824,36825,36827,36829,36831,36833,36835,36837,36839],{"class":103,"line":33472},[101,36826,33498],{"class":111},[101,36828,31682],{"class":5204},[101,36830,157],{"class":107},[101,36832,112],{"class":111},[101,36834,609],{"class":160},[101,36836,489],{"class":111},[101,36838,404],{"class":160},[101,36840,30486],{"class":111},[101,36842,36843],{"class":103,"line":33478},[101,36844,33518],{"class":170},[101,36846,36847],{"class":103,"line":33489},[101,36848,33524],{"class":170},[101,36850,36851],{"class":103,"line":33495},[101,36852,33530],{"class":170},[101,36854,36855,36857,36859,36861,36863,36865,36867],{"class":103,"line":33515},[101,36856,31716],{"class":111},[101,36858,329],{"class":160},[101,36860,489],{"class":111},[101,36862,189],{"class":160},[101,36864,489],{"class":111},[101,36866,329],{"class":160},[101,36868,118],{"class":111},[101,36870,36871],{"class":103,"line":33521},[101,36872,33553],{"class":170},[101,36874,36875],{"class":103,"line":33527},[101,36876,33559],{"class":170},[101,36878,36879],{"class":103,"line":33533},[101,36880,33565],{"class":170},[101,36882,36883],{"class":103,"line":33550},[101,36884,33571],{"class":170},[101,36886,36887],{"class":103,"line":33556},[101,36888,33577],{"class":170},[101,36890,36891,36893,36895,36897,36899,36901,36903,36905,36907],{"class":103,"line":33562},[101,36892,33583],{"class":111},[101,36894,33586],{"class":216},[101,36896,33589],{"class":111},[101,36898,33592],{"class":216},[101,36900,489],{"class":111},[101,36902,33597],{"class":5204},[101,36904,157],{"class":107},[101,36906,33602],{"class":216},[101,36908,118],{"class":111},[101,36910,36911,36913,36915,36917,36919,36921,36923,36925,36927],{"class":103,"line":33568},[101,36912,33583],{"class":111},[101,36914,33586],{"class":216},[101,36916,33614],{"class":111},[101,36918,33617],{"class":216},[101,36920,489],{"class":111},[101,36922,33597],{"class":5204},[101,36924,157],{"class":107},[101,36926,33626],{"class":216},[101,36928,118],{"class":111},[101,36930,36931],{"class":103,"line":33574},[101,36932,33634],{"class":170},[101,36934,36935],{"class":103,"line":33580},[101,36936,33640],{"class":111},[101,36938,36939],{"class":103,"line":33607},[101,36940,33646],{"class":170},[101,36942,36943,36945,36947],{"class":103,"line":33631},[101,36944,33652],{"class":111},[101,36946,33655],{"class":216},[101,36948,118],{"class":111},[101,36950,36951,36953,36955],{"class":103,"line":33637},[101,36952,33663],{"class":111},[101,36954,33666],{"class":216},[101,36956,118],{"class":111},[101,36958,36959],{"class":103,"line":33643},[101,36960,33674],{"class":170},[101,36962,36963,36965,36967,36969,36971,36973,36975],{"class":103,"line":33649},[101,36964,31716],{"class":111},[101,36966,329],{"class":160},[101,36968,489],{"class":111},[101,36970,189],{"class":160},[101,36972,489],{"class":111},[101,36974,189],{"class":160},[101,36976,118],{"class":111},[101,36978,36979,36981,36983,36985,36987,36989,36991,36993,36995],{"class":103,"line":33660},[101,36980,33583],{"class":111},[101,36982,33586],{"class":216},[101,36984,33701],{"class":111},[101,36986,33592],{"class":216},[101,36988,489],{"class":111},[101,36990,33597],{"class":5204},[101,36992,157],{"class":107},[101,36994,33712],{"class":216},[101,36996,118],{"class":111},[101,36998,36999,37001,37003,37005,37007,37009,37011,37013,37015],{"class":103,"line":33671},[101,37000,33583],{"class":111},[101,37002,33586],{"class":216},[101,37004,33724],{"class":111},[101,37006,33617],{"class":216},[101,37008,489],{"class":111},[101,37010,33597],{"class":5204},[101,37012,157],{"class":107},[101,37014,33735],{"class":216},[101,37016,118],{"class":111},[101,37018,37019],{"class":103,"line":33677},[101,37020,33743],{"class":170},[101,37022,37023],{"class":103,"line":33694},[101,37024,33640],{"class":111},[101,37026,37027,37029,37031],{"class":103,"line":33717},[101,37028,33652],{"class":111},[101,37030,33586],{"class":216},[101,37032,118],{"class":111},[101,37034,37035,37037,37039],{"class":103,"line":33740},[101,37036,33663],{"class":111},[101,37038,33765],{"class":216},[101,37040,118],{"class":111},[101,37042,37043],{"class":103,"line":33746},[101,37044,33773],{"class":111},[101,37046,37047],{"class":103,"line":33751},[101,37048,2387],{"emptyLinePlaceholder":27},[101,37050,37051],{"class":103,"line":33760},[101,37052,33784],{"class":170},[101,37054,37055,37057,37059,37061,37063],{"class":103,"line":33770},[101,37056,1518],{"class":107},[101,37058,31209],{"class":160},[101,37060,2936],{"class":107},[101,37062,31214],{"class":216},[101,37064,3726],{"class":111},[101,37066,37067],{"class":103,"line":33776},[101,37068,33803],{"class":170},[101,37070,37071,37074,37076],{"class":103,"line":33781},[101,37072,37073],{"class":111},"    AlexNet",[101,37075,157],{"class":107},[101,37077,37078],{"class":111},"AlexNet()\n",[101,37080,37081,37083,37085],{"class":103,"line":33787},[101,37082,33820],{"class":111},[101,37084,157],{"class":107},[101,37086,33825],{"class":111},[101,37088,37089,37091,37093,37096,37098,37100,37102],{"class":103,"line":33800},[101,37090,33382],{"class":111},[101,37092,157],{"class":107},[101,37094,37095],{"class":111},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[101,37097,33838],{"class":5204},[101,37099,157],{"class":107},[101,37101,811],{"class":160},[101,37103,118],{"class":111},[101,37105,37106],{"class":103,"line":33806},[101,37107,33850],{"class":111},[55,37109,37110],{"start":1166},[58,37111,33863],{},[92,37113,37115],{"className":30367,"code":37114,"language":30369,"meta":20,"style":20},"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",[98,37116,37117,37123,37133,37143,37153,37157,37167,37177,37188,37192,37196,37200,37208,37224,37234,37250,37260,37274,37278,37288,37298,37308,37314,37318,37322,37330,37334,37350,37358,37362,37366,37374,37382,37386,37390,37394,37398,37404,37408,37418,37426,37434,37438,37442,37446,37454,37458,37474,37478,37482,37486,37498,37502,37514,37518,37522,37534,37538,37548,37552,37556,37568,37572,37580,37584,37588,37596,37600,37608,37612,37616,37620,37624,37628,37644,37652,37656,37660,37708,37714,37718,37728,37736,37744,37748,37752,37756,37760,37768,37772,37788,37792,37800,37808],{"__ignoreMap":20},[101,37118,37119,37121],{"class":103,"line":104},[101,37120,30381],{"class":107},[101,37122,30384],{"class":111},[101,37124,37125,37127,37129,37131],{"class":103,"line":21},[101,37126,30381],{"class":107},[101,37128,31404],{"class":111},[101,37130,31372],{"class":107},[101,37132,31409],{"class":111},[101,37134,37135,37137,37139,37141],{"class":103,"line":1166},[101,37136,30726],{"class":107},[101,37138,33891],{"class":111},[101,37140,30381],{"class":107},[101,37142,33896],{"class":111},[101,37144,37145,37147,37149,37151],{"class":103,"line":1181},[101,37146,30726],{"class":107},[101,37148,31387],{"class":111},[101,37150,30381],{"class":107},[101,37152,31392],{"class":111},[101,37154,37155],{"class":103,"line":1187},[101,37156,33911],{"class":170},[101,37158,37159,37161,37163,37165],{"class":103,"line":1201},[101,37160,30726],{"class":107},[101,37162,31357],{"class":111},[101,37164,30381],{"class":107},[101,37166,31362],{"class":111},[101,37168,37169,37171,37173,37175],{"class":103,"line":1207},[101,37170,30726],{"class":107},[101,37172,31903],{"class":111},[101,37174,30381],{"class":107},[101,37176,35546],{"class":111},[101,37178,37179,37181,37184,37186],{"class":103,"line":1298},[101,37180,30726],{"class":107},[101,37182,37183],{"class":111}," 练习.AlexNet.model ",[101,37185,30381],{"class":107},[101,37187,35546],{"class":111},[101,37189,37190],{"class":103,"line":1304},[101,37191,2387],{"emptyLinePlaceholder":27},[101,37193,37194],{"class":103,"line":1316},[101,37195,2387],{"emptyLinePlaceholder":27},[101,37197,37198],{"class":103,"line":1599},[101,37199,33940],{"class":170},[101,37201,37202,37204,37206],{"class":103,"line":1604},[101,37203,31936],{"class":107},[101,37205,33947],{"class":1950},[101,37207,31942],{"class":111},[101,37209,37210,37212,37214,37216,37218,37220,37222],{"class":103,"line":1610},[101,37211,33954],{"class":111},[101,37213,157],{"class":107},[101,37215,31444],{"class":111},[101,37217,31447],{"class":5204},[101,37219,157],{"class":107},[101,37221,31452],{"class":216},[101,37223,31455],{"class":111},[101,37225,37226,37228,37230,37232],{"class":103,"line":1615},[101,37227,33971],{"class":5204},[101,37229,157],{"class":107},[101,37231,33976],{"class":160},[101,37233,31455],{"class":111},[101,37235,37236,37238,37240,37242,37244,37246,37248],{"class":103,"line":1629},[101,37237,33983],{"class":5204},[101,37239,157],{"class":107},[101,37241,31482],{"class":111},[101,37243,31485],{"class":5204},[101,37245,157],{"class":107},[101,37247,35438],{"class":160},[101,37249,31493],{"class":111},[101,37251,37252,37254,37256,37258],{"class":103,"line":1634},[101,37253,34000],{"class":5204},[101,37255,157],{"class":107},[101,37257,31465],{"class":160},[101,37259,118],{"class":111},[101,37261,37262,37264,37266,37268,37270,37272],{"class":103,"line":1640},[101,37263,34011],{"class":111},[101,37265,157],{"class":107},[101,37267,31523],{"class":111},[101,37269,31526],{"class":5204},[101,37271,157],{"class":107},[101,37273,34022],{"class":111},[101,37275,37276],{"class":103,"line":1661},[101,37277,34027],{"class":170},[101,37279,37280,37282,37284,37286],{"class":103,"line":1666},[101,37281,34032],{"class":5204},[101,37283,157],{"class":107},[101,37285,329],{"class":160},[101,37287,31455],{"class":111},[101,37289,37290,37292,37294,37296],{"class":103,"line":1680},[101,37291,34043],{"class":5204},[101,37293,157],{"class":107},[101,37295,31465],{"class":160},[101,37297,31455],{"class":111},[101,37299,37300,37302,37304,37306],{"class":103,"line":1685},[101,37301,34054],{"class":5204},[101,37303,157],{"class":107},[101,37305,303],{"class":160},[101,37307,118],{"class":111},[101,37309,37310,37312],{"class":103,"line":1714},[101,37311,4077],{"class":107},[101,37313,34067],{"class":111},[101,37315,37316],{"class":103,"line":1719},[101,37317,2387],{"emptyLinePlaceholder":27},[101,37319,37320],{"class":103,"line":1736},[101,37321,34076],{"class":170},[101,37323,37324,37326,37328],{"class":103,"line":1741},[101,37325,31936],{"class":107},[101,37327,34083],{"class":1950},[101,37329,34086],{"class":111},[101,37331,37332],{"class":103,"line":1746},[101,37333,34091],{"class":170},[101,37335,37336,37338,37340,37342,37344,37346,37348],{"class":103,"line":1751},[101,37337,31226],{"class":111},[101,37339,157],{"class":107},[101,37341,31233],{"class":216},[101,37343,1691],{"class":107},[101,37345,31238],{"class":111},[101,37347,1688],{"class":107},[101,37349,34108],{"class":216},[101,37351,37352,37354,37356],{"class":103,"line":1765},[101,37353,31278],{"class":111},[101,37355,157],{"class":107},[101,37357,32278],{"class":111},[101,37359,37360],{"class":103,"line":1770},[101,37361,2387],{"emptyLinePlaceholder":27},[101,37363,37364],{"class":103,"line":2564},[101,37365,34125],{"class":170},[101,37367,37368,37370,37372],{"class":103,"line":2578},[101,37369,34130],{"class":111},[101,37371,157],{"class":107},[101,37373,32331],{"class":160},[101,37375,37376,37378,37380],{"class":103,"line":2586},[101,37377,34139],{"class":111},[101,37379,157],{"class":107},[101,37381,3072],{"class":160},[101,37383,37384],{"class":103,"line":2591},[101,37385,2387],{"emptyLinePlaceholder":27},[101,37387,37388],{"class":103,"line":2597},[101,37389,34152],{"class":170},[101,37391,37392],{"class":103,"line":2603},[101,37393,34157],{"class":170},[101,37395,37396],{"class":103,"line":2608},[101,37397,34162],{"class":170},[101,37399,37400,37402],{"class":103,"line":7936},[101,37401,34167],{"class":107},[101,37403,32873],{"class":111},[101,37405,37406],{"class":103,"line":7960},[101,37407,34174],{"class":170},[101,37409,37410,37412,37414,37416],{"class":103,"line":7965},[101,37411,3390],{"class":107},[101,37413,34181],{"class":111},[101,37415,26032],{"class":107},[101,37417,34186],{"class":111},[101,37419,37420,37422,37424],{"class":103,"line":7971},[101,37421,34191],{"class":111},[101,37423,157],{"class":107},[101,37425,34196],{"class":111},[101,37427,37428,37430,37432],{"class":103,"line":7998},[101,37429,34201],{"class":111},[101,37431,157],{"class":107},[101,37433,34206],{"class":111},[101,37435,37436],{"class":103,"line":8003},[101,37437,34211],{"class":170},[101,37439,37440],{"class":103,"line":8009},[101,37441,32864],{"class":111},[101,37443,37444],{"class":103,"line":8021},[101,37445,34220],{"class":170},[101,37447,37448,37450,37452],{"class":103,"line":8033},[101,37449,32649],{"class":111},[101,37451,157],{"class":107},[101,37453,34229],{"class":111},[101,37455,37456],{"class":103,"line":8045},[101,37457,34234],{"class":170},[101,37459,37460,37462,37464,37466,37468,37470,37472],{"class":103,"line":9704},[101,37461,32666],{"class":111},[101,37463,157],{"class":107},[101,37465,32671],{"class":111},[101,37467,32674],{"class":5204},[101,37469,157],{"class":107},[101,37471,329],{"class":160},[101,37473,118],{"class":111},[101,37475,37476],{"class":103,"line":9729},[101,37477,34255],{"class":170},[101,37479,37480],{"class":103,"line":9752},[101,37481,34260],{"class":170},[101,37483,37484],{"class":103,"line":9776},[101,37485,34265],{"class":170},[101,37487,37488,37490,37492,37494,37496],{"class":103,"line":9781},[101,37489,34270],{"class":111},[101,37491,9465],{"class":107},[101,37493,32776],{"class":111},[101,37495,2936],{"class":107},[101,37497,34279],{"class":111},[101,37499,37500],{"class":103,"line":9786},[101,37501,34284],{"class":170},[101,37503,37504,37506,37508,37510,37512],{"class":103,"line":9791},[101,37505,34289],{"class":111},[101,37507,9465],{"class":107},[101,37509,34294],{"class":111},[101,37511,303],{"class":160},[101,37513,118],{"class":111},[101,37515,37516],{"class":103,"line":9800},[101,37517,2387],{"emptyLinePlaceholder":27},[101,37519,37520],{"class":103,"line":9805},[101,37521,34307],{"class":170},[101,37523,37524,37526,37528,37530,37532],{"class":103,"line":9811},[101,37525,34312],{"class":111},[101,37527,157],{"class":107},[101,37529,34317],{"class":111},[101,37531,695],{"class":107},[101,37533,34322],{"class":111},[101,37535,37536],{"class":103,"line":9832},[101,37537,34327],{"class":170},[101,37539,37540,37542,37544,37546],{"class":103,"line":9838},[101,37541,32440],{"class":160},[101,37543,112],{"class":111},[101,37545,34336],{"class":216},[101,37547,34339],{"class":111},[101,37549,37550],{"class":103,"line":9852},[101,37551,2387],{"emptyLinePlaceholder":27},[101,37553,37554],{"class":103,"line":9858},[101,37555,34348],{"class":170},[101,37557,37558,37560,37562,37564,37566],{"class":103,"line":9885},[101,37559,1518],{"class":107},[101,37561,31209],{"class":160},[101,37563,2936],{"class":107},[101,37565,31214],{"class":216},[101,37567,3726],{"class":111},[101,37569,37570],{"class":103,"line":9894},[101,37571,34365],{"class":170},[101,37573,37574,37576,37578],{"class":103,"line":9900},[101,37575,31278],{"class":111},[101,37577,157],{"class":107},[101,37579,37078],{"class":111},[101,37581,37582],{"class":103,"line":9908},[101,37583,34378],{"class":170},[101,37585,37586],{"class":103,"line":9913},[101,37587,34383],{"class":170},[101,37589,37590,37592,37594],{"class":103,"line":16592},[101,37591,34388],{"class":111},[101,37593,34391],{"class":216},[101,37595,30486],{"class":111},[101,37597,37598],{"class":103,"line":16598},[101,37599,34398],{"class":170},[101,37601,37602,37604,37606],{"class":103,"line":16621},[101,37603,34011],{"class":111},[101,37605,157],{"class":107},[101,37607,34407],{"class":111},[101,37609,37610],{"class":103,"line":16627},[101,37611,34412],{"class":170},[101,37613,37614],{"class":103,"line":16650},[101,37615,34417],{"class":111},[101,37617,37618],{"class":103,"line":16664},[101,37619,2387],{"emptyLinePlaceholder":27},[101,37621,37622],{"class":103,"line":16684},[101,37623,34426],{"class":170},[101,37625,37626],{"class":103,"line":16690},[101,37627,34431],{"class":170},[101,37629,37630,37632,37634,37636,37638,37640,37642],{"class":103,"line":16701},[101,37631,31226],{"class":111},[101,37633,157],{"class":107},[101,37635,31233],{"class":216},[101,37637,1691],{"class":107},[101,37639,31238],{"class":111},[101,37641,1688],{"class":107},[101,37643,34108],{"class":216},[101,37645,37646,37648,37650],{"class":103,"line":16724},[101,37647,31278],{"class":111},[101,37649,157],{"class":107},[101,37651,32278],{"class":111},[101,37653,37654],{"class":103,"line":16746},[101,37655,34460],{"class":170},[101,37657,37658],{"class":103,"line":16751},[101,37659,34465],{"class":170},[101,37661,37662,37664,37666,37668,37670,37672,37674,37676,37678,37680,37682,37684,37686,37688,37690,37692,37694,37696,37698,37700,37702,37704,37706],{"class":103,"line":16757},[101,37663,34470],{"class":111},[101,37665,157],{"class":107},[101,37667,1001],{"class":111},[101,37669,34477],{"class":216},[101,37671,489],{"class":111},[101,37673,34482],{"class":216},[101,37675,489],{"class":111},[101,37677,34487],{"class":216},[101,37679,489],{"class":111},[101,37681,34492],{"class":216},[101,37683,489],{"class":111},[101,37685,34497],{"class":216},[101,37687,489],{"class":111},[101,37689,34502],{"class":216},[101,37691,489],{"class":111},[101,37693,34507],{"class":216},[101,37695,489],{"class":111},[101,37697,34512],{"class":216},[101,37699,489],{"class":111},[101,37701,34517],{"class":216},[101,37703,489],{"class":111},[101,37705,34522],{"class":216},[101,37707,33235],{"class":111},[101,37709,37710,37712],{"class":103,"line":16771},[101,37711,34167],{"class":107},[101,37713,32873],{"class":111},[101,37715,37716],{"class":103,"line":16784},[101,37717,34535],{"class":170},[101,37719,37720,37722,37724,37726],{"class":103,"line":16789},[101,37721,3390],{"class":107},[101,37723,34542],{"class":111},[101,37725,26032],{"class":107},[101,37727,34186],{"class":111},[101,37729,37730,37732,37734],{"class":103,"line":16803},[101,37731,32599],{"class":111},[101,37733,157],{"class":107},[101,37735,32604],{"class":111},[101,37737,37738,37740,37742],{"class":103,"line":16808},[101,37739,32614],{"class":111},[101,37741,157],{"class":107},[101,37743,32619],{"class":111},[101,37745,37746],{"class":103,"line":16814},[101,37747,2387],{"emptyLinePlaceholder":27},[101,37749,37750],{"class":103,"line":16819},[101,37751,34571],{"class":170},[101,37753,37754],{"class":103,"line":16833},[101,37755,32864],{"class":111},[101,37757,37758],{"class":103,"line":16838},[101,37759,34580],{"class":170},[101,37761,37762,37764,37766],{"class":103,"line":16843},[101,37763,32649],{"class":111},[101,37765,157],{"class":107},[101,37767,32654],{"class":111},[101,37769,37770],{"class":103,"line":16857},[101,37771,34593],{"class":170},[101,37773,37774,37776,37778,37780,37782,37784,37786],{"class":103,"line":16869},[101,37775,32666],{"class":111},[101,37777,157],{"class":107},[101,37779,32671],{"class":111},[101,37781,32674],{"class":5204},[101,37783,157],{"class":107},[101,37785,329],{"class":160},[101,37787,118],{"class":111},[101,37789,37790],{"class":103,"line":16874},[101,37791,34614],{"class":170},[101,37793,37794,37796,37798],{"class":103,"line":16887},[101,37795,34619],{"class":111},[101,37797,157],{"class":107},[101,37799,34624],{"class":111},[101,37801,37802,37804,37806],{"class":103,"line":16892},[101,37803,34629],{"class":111},[101,37805,157],{"class":107},[101,37807,34634],{"class":111},[101,37809,37810,37812,37814,37816,37818,37820,37822,37824],{"class":103,"line":16897},[101,37811,34639],{"class":160},[101,37813,112],{"class":111},[101,37815,34644],{"class":216},[101,37817,34647],{"class":111},[101,37819,34650],{"class":216},[101,37821,489],{"class":111},[101,37823,34655],{"class":216},[101,37825,34658],{"class":111},[72,37827,37829],{"id":37828},"_22vgg","2.2.VGG",[21986,37831,37833],{"id":37832},"_221原理","2.2.1.原理",[10,37835,37836],{},[1449,37837],{"alt":20,"src":37838},"\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",[10,37840,37841],{},[1449,37842],{"alt":20,"src":37843},"\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",[10,37845,37846],{},[1449,37847],{"alt":20,"src":37848},"\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",[10,37850,37851],{},"参数详细描述：",[10,37853,37854],{},[1449,37855],{"alt":20,"src":37856},"\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",[10,37858,37859],{},[1449,37860],{"alt":20,"src":37861},"\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",[10,37863,37864],{},[1449,37865],{"alt":20,"src":37866},"\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",[10,37868,37869],{},[1449,37870],{"alt":20,"src":37871},"\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",[10,37873,37874],{},[1449,37875],{"alt":20,"src":37876},"\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",[21986,37878,37880],{"id":37879},"_222代码实现","2.2.2.代码实现",[55,37882,37883],{},[58,37884,37885],{},"网络搭建",[92,37887,37889],{"className":30367,"code":37888,"language":30369,"meta":20,"style":20},"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",[98,37890,37891,37897,37909,37919,37929,37933,37950,37958,37977,37982,37987,37999,38037,38042,38078,38082,38111,38116,38121,38132,38168,38172,38208,38212,38240,38244,38249,38260,38296,38300,38336,38340,38376,38380,38408,38412,38417,38428,38465,38469,38505,38509,38545,38549,38577,38581,38586,38597,38633,38637,38673,38677,38713,38717,38745,38749,38754,38765,38770,38775,38780,38801,38805,38817,38821,38833,38837,38841,38846,38851,38866,38871,38881,38886,38901,38906,38925,38930,38939,38944,38954,38959,38964,38978,38983,38997,39005,39009,39013,39021,39032,39043,39054,39065,39076,39087,39093,39097,39102,39115,39135,39141,39150],{"__ignoreMap":20},[101,37892,37893,37895],{"class":103,"line":104},[101,37894,30381],{"class":107},[101,37896,30384],{"class":111},[101,37898,37899,37901,37904,37906],{"class":103,"line":21},[101,37900,30726],{"class":107},[101,37902,37903],{"class":111}," sympy.core.sympify ",[101,37905,30381],{"class":107},[101,37907,37908],{"class":111}," kernS\n",[101,37910,37911,37913,37915,37917],{"class":103,"line":1166},[101,37912,30726],{"class":107},[101,37914,30729],{"class":111},[101,37916,30381],{"class":107},[101,37918,30734],{"class":111},[101,37920,37921,37923,37925,37927],{"class":103,"line":1181},[101,37922,30726],{"class":107},[101,37924,30746],{"class":111},[101,37926,30381],{"class":107},[101,37928,30751],{"class":111},[101,37930,37931],{"class":103,"line":1187},[101,37932,2387],{"emptyLinePlaceholder":27},[101,37934,37935,37937,37940,37942,37944,37946,37948],{"class":103,"line":1201},[101,37936,14682],{"class":107},[101,37938,37939],{"class":1950}," VGG16",[101,37941,112],{"class":111},[101,37943,30767],{"class":1950},[101,37945,669],{"class":111},[101,37947,30772],{"class":1950},[101,37949,30775],{"class":111},[101,37951,37952,37954,37956],{"class":103,"line":1207},[101,37953,30790],{"class":107},[101,37955,30793],{"class":160},[101,37957,30796],{"class":111},[101,37959,37960,37962,37964,37967,37969,37971,37973,37975],{"class":103,"line":1298},[101,37961,30806],{"class":160},[101,37963,112],{"class":111},[101,37965,37966],{"class":160},"VGG16",[101,37968,12423],{"class":111},[101,37970,30812],{"class":160},[101,37972,30815],{"class":111},[101,37974,30818],{"class":160},[101,37976,1963],{"class":111},[101,37978,37979],{"class":103,"line":1304},[101,37980,37981],{"class":170},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[101,37983,37984],{"class":103,"line":1316},[101,37985,37986],{"class":170},"        # 这里用的是灰度图\n",[101,37988,37989,37991,37994,37996],{"class":103,"line":1599},[101,37990,30834],{"class":160},[101,37992,37993],{"class":111},".block1",[101,37995,157],{"class":107},[101,37997,37998],{"class":111},"nn.Sequential(\n",[101,38000,38001,38004,38006,38008,38010,38012,38014,38016,38018,38020,38022,38024,38026,38028,38030,38032,38034],{"class":103,"line":1604},[101,38002,38003],{"class":111},"            nn.Conv2d(",[101,38005,30845],{"class":5204},[101,38007,157],{"class":107},[101,38009,329],{"class":160},[101,38011,489],{"class":111},[101,38013,30854],{"class":5204},[101,38015,157],{"class":107},[101,38017,315],{"class":160},[101,38019,489],{"class":111},[101,38021,30863],{"class":5204},[101,38023,157],{"class":107},[101,38025,183],{"class":160},[101,38027,489],{"class":111},[101,38029,30872],{"class":5204},[101,38031,157],{"class":107},[101,38033,329],{"class":160},[101,38035,38036],{"class":111},"),\n",[101,38038,38039],{"class":103,"line":1610},[101,38040,38041],{"class":111},"            nn.ReLU(),\n",[101,38043,38044,38046,38048,38050,38052,38054,38056,38058,38060,38062,38064,38066,38068,38070,38072,38074,38076],{"class":103,"line":1615},[101,38045,38003],{"class":111},[101,38047,30845],{"class":5204},[101,38049,157],{"class":107},[101,38051,315],{"class":160},[101,38053,489],{"class":111},[101,38055,30854],{"class":5204},[101,38057,157],{"class":107},[101,38059,315],{"class":160},[101,38061,489],{"class":111},[101,38063,30863],{"class":5204},[101,38065,157],{"class":107},[101,38067,183],{"class":160},[101,38069,489],{"class":111},[101,38071,30872],{"class":5204},[101,38073,157],{"class":107},[101,38075,329],{"class":160},[101,38077,38036],{"class":111},[101,38079,38080],{"class":103,"line":1629},[101,38081,38041],{"class":111},[101,38083,38084,38087,38089,38091,38093,38095,38097,38099,38101,38103,38105,38107,38109],{"class":103,"line":1634},[101,38085,38086],{"class":111},"            nn.MaxPool2d(",[101,38088,30863],{"class":5204},[101,38090,157],{"class":107},[101,38092,189],{"class":160},[101,38094,489],{"class":111},[101,38096,30918],{"class":5204},[101,38098,157],{"class":107},[101,38100,189],{"class":160},[101,38102,489],{"class":111},[101,38104,30872],{"class":5204},[101,38106,157],{"class":107},[101,38108,303],{"class":160},[101,38110,118],{"class":111},[101,38112,38113],{"class":103,"line":1640},[101,38114,38115],{"class":111},"        )\n",[101,38117,38118],{"class":103,"line":1661},[101,38119,38120],{"class":170},"        # 第二层\n",[101,38122,38123,38125,38128,38130],{"class":103,"line":1666},[101,38124,30834],{"class":160},[101,38126,38127],{"class":111},".block2",[101,38129,157],{"class":107},[101,38131,37998],{"class":111},[101,38133,38134,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158,38160,38162,38164,38166],{"class":103,"line":1680},[101,38135,38003],{"class":111},[101,38137,30845],{"class":5204},[101,38139,157],{"class":107},[101,38141,315],{"class":160},[101,38143,489],{"class":111},[101,38145,30854],{"class":5204},[101,38147,157],{"class":107},[101,38149,32059],{"class":160},[101,38151,489],{"class":111},[101,38153,30863],{"class":5204},[101,38155,157],{"class":107},[101,38157,183],{"class":160},[101,38159,489],{"class":111},[101,38161,30872],{"class":5204},[101,38163,157],{"class":107},[101,38165,329],{"class":160},[101,38167,38036],{"class":111},[101,38169,38170],{"class":103,"line":1685},[101,38171,38041],{"class":111},[101,38173,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196,38198,38200,38202,38204,38206],{"class":103,"line":1714},[101,38175,38003],{"class":111},[101,38177,30845],{"class":5204},[101,38179,157],{"class":107},[101,38181,32059],{"class":160},[101,38183,489],{"class":111},[101,38185,30854],{"class":5204},[101,38187,157],{"class":107},[101,38189,32059],{"class":160},[101,38191,489],{"class":111},[101,38193,30863],{"class":5204},[101,38195,157],{"class":107},[101,38197,183],{"class":160},[101,38199,489],{"class":111},[101,38201,30872],{"class":5204},[101,38203,157],{"class":107},[101,38205,329],{"class":160},[101,38207,38036],{"class":111},[101,38209,38210],{"class":103,"line":1719},[101,38211,38041],{"class":111},[101,38213,38214,38216,38218,38220,38222,38224,38226,38228,38230,38232,38234,38236,38238],{"class":103,"line":1736},[101,38215,38086],{"class":111},[101,38217,30863],{"class":5204},[101,38219,157],{"class":107},[101,38221,189],{"class":160},[101,38223,489],{"class":111},[101,38225,30918],{"class":5204},[101,38227,157],{"class":107},[101,38229,189],{"class":160},[101,38231,489],{"class":111},[101,38233,30872],{"class":5204},[101,38235,157],{"class":107},[101,38237,303],{"class":160},[101,38239,118],{"class":111},[101,38241,38242],{"class":103,"line":1741},[101,38243,38115],{"class":111},[101,38245,38246],{"class":103,"line":1746},[101,38247,38248],{"class":170},"        # 第三层\n",[101,38250,38251,38253,38256,38258],{"class":103,"line":1751},[101,38252,30834],{"class":160},[101,38254,38255],{"class":111},".block3",[101,38257,157],{"class":107},[101,38259,37998],{"class":111},[101,38261,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286,38288,38290,38292,38294],{"class":103,"line":1765},[101,38263,38003],{"class":111},[101,38265,30845],{"class":5204},[101,38267,157],{"class":107},[101,38269,32059],{"class":160},[101,38271,489],{"class":111},[101,38273,30854],{"class":5204},[101,38275,157],{"class":107},[101,38277,34859],{"class":160},[101,38279,489],{"class":111},[101,38281,30863],{"class":5204},[101,38283,157],{"class":107},[101,38285,183],{"class":160},[101,38287,489],{"class":111},[101,38289,30872],{"class":5204},[101,38291,157],{"class":107},[101,38293,329],{"class":160},[101,38295,38036],{"class":111},[101,38297,38298],{"class":103,"line":1770},[101,38299,38041],{"class":111},[101,38301,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320,38322,38324,38326,38328,38330,38332,38334],{"class":103,"line":2564},[101,38303,38003],{"class":111},[101,38305,30845],{"class":5204},[101,38307,157],{"class":107},[101,38309,34859],{"class":160},[101,38311,489],{"class":111},[101,38313,30854],{"class":5204},[101,38315,157],{"class":107},[101,38317,34859],{"class":160},[101,38319,489],{"class":111},[101,38321,30863],{"class":5204},[101,38323,157],{"class":107},[101,38325,183],{"class":160},[101,38327,489],{"class":111},[101,38329,30872],{"class":5204},[101,38331,157],{"class":107},[101,38333,329],{"class":160},[101,38335,38036],{"class":111},[101,38337,38338],{"class":103,"line":2578},[101,38339,38041],{"class":111},[101,38341,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374],{"class":103,"line":2586},[101,38343,38003],{"class":111},[101,38345,30845],{"class":5204},[101,38347,157],{"class":107},[101,38349,34859],{"class":160},[101,38351,489],{"class":111},[101,38353,30854],{"class":5204},[101,38355,157],{"class":107},[101,38357,34859],{"class":160},[101,38359,489],{"class":111},[101,38361,30863],{"class":5204},[101,38363,157],{"class":107},[101,38365,183],{"class":160},[101,38367,489],{"class":111},[101,38369,30872],{"class":5204},[101,38371,157],{"class":107},[101,38373,329],{"class":160},[101,38375,38036],{"class":111},[101,38377,38378],{"class":103,"line":2591},[101,38379,38041],{"class":111},[101,38381,38382,38384,38386,38388,38390,38392,38394,38396,38398,38400,38402,38404,38406],{"class":103,"line":2597},[101,38383,38086],{"class":111},[101,38385,30863],{"class":5204},[101,38387,157],{"class":107},[101,38389,189],{"class":160},[101,38391,489],{"class":111},[101,38393,30918],{"class":5204},[101,38395,157],{"class":107},[101,38397,189],{"class":160},[101,38399,489],{"class":111},[101,38401,30872],{"class":5204},[101,38403,157],{"class":107},[101,38405,303],{"class":160},[101,38407,118],{"class":111},[101,38409,38410],{"class":103,"line":2603},[101,38411,38115],{"class":111},[101,38413,38414],{"class":103,"line":2608},[101,38415,38416],{"class":170},"        # 第四层\n",[101,38418,38419,38421,38424,38426],{"class":103,"line":7936},[101,38420,30834],{"class":160},[101,38422,38423],{"class":111},".block4",[101,38425,157],{"class":107},[101,38427,37998],{"class":111},[101,38429,38430,38432,38434,38436,38438,38440,38442,38444,38447,38449,38451,38453,38455,38457,38459,38461,38463],{"class":103,"line":7960},[101,38431,38003],{"class":111},[101,38433,30845],{"class":5204},[101,38435,157],{"class":107},[101,38437,34859],{"class":160},[101,38439,489],{"class":111},[101,38441,30854],{"class":5204},[101,38443,157],{"class":107},[101,38445,38446],{"class":160},"512",[101,38448,489],{"class":111},[101,38450,30863],{"class":5204},[101,38452,157],{"class":107},[101,38454,183],{"class":160},[101,38456,489],{"class":111},[101,38458,30872],{"class":5204},[101,38460,157],{"class":107},[101,38462,329],{"class":160},[101,38464,38036],{"class":111},[101,38466,38467],{"class":103,"line":7965},[101,38468,38041],{"class":111},[101,38470,38471,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495,38497,38499,38501,38503],{"class":103,"line":7971},[101,38472,38003],{"class":111},[101,38474,30845],{"class":5204},[101,38476,157],{"class":107},[101,38478,38446],{"class":160},[101,38480,489],{"class":111},[101,38482,30854],{"class":5204},[101,38484,157],{"class":107},[101,38486,38446],{"class":160},[101,38488,489],{"class":111},[101,38490,30863],{"class":5204},[101,38492,157],{"class":107},[101,38494,183],{"class":160},[101,38496,489],{"class":111},[101,38498,30872],{"class":5204},[101,38500,157],{"class":107},[101,38502,329],{"class":160},[101,38504,38036],{"class":111},[101,38506,38507],{"class":103,"line":7998},[101,38508,38041],{"class":111},[101,38510,38511,38513,38515,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535,38537,38539,38541,38543],{"class":103,"line":8003},[101,38512,38003],{"class":111},[101,38514,30845],{"class":5204},[101,38516,157],{"class":107},[101,38518,38446],{"class":160},[101,38520,489],{"class":111},[101,38522,30854],{"class":5204},[101,38524,157],{"class":107},[101,38526,38446],{"class":160},[101,38528,489],{"class":111},[101,38530,30863],{"class":5204},[101,38532,157],{"class":107},[101,38534,183],{"class":160},[101,38536,489],{"class":111},[101,38538,30872],{"class":5204},[101,38540,157],{"class":107},[101,38542,329],{"class":160},[101,38544,38036],{"class":111},[101,38546,38547],{"class":103,"line":8009},[101,38548,38041],{"class":111},[101,38550,38551,38553,38555,38557,38559,38561,38563,38565,38567,38569,38571,38573,38575],{"class":103,"line":8021},[101,38552,38086],{"class":111},[101,38554,30863],{"class":5204},[101,38556,157],{"class":107},[101,38558,189],{"class":160},[101,38560,489],{"class":111},[101,38562,30918],{"class":5204},[101,38564,157],{"class":107},[101,38566,189],{"class":160},[101,38568,489],{"class":111},[101,38570,30872],{"class":5204},[101,38572,157],{"class":107},[101,38574,303],{"class":160},[101,38576,118],{"class":111},[101,38578,38579],{"class":103,"line":8033},[101,38580,38115],{"class":111},[101,38582,38583],{"class":103,"line":8045},[101,38584,38585],{"class":170},"        # 第五层\n",[101,38587,38588,38590,38593,38595],{"class":103,"line":9704},[101,38589,30834],{"class":160},[101,38591,38592],{"class":111},".block5",[101,38594,157],{"class":107},[101,38596,37998],{"class":111},[101,38598,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631],{"class":103,"line":9729},[101,38600,38003],{"class":111},[101,38602,30845],{"class":5204},[101,38604,157],{"class":107},[101,38606,38446],{"class":160},[101,38608,489],{"class":111},[101,38610,30854],{"class":5204},[101,38612,157],{"class":107},[101,38614,38446],{"class":160},[101,38616,489],{"class":111},[101,38618,30863],{"class":5204},[101,38620,157],{"class":107},[101,38622,183],{"class":160},[101,38624,489],{"class":111},[101,38626,30872],{"class":5204},[101,38628,157],{"class":107},[101,38630,329],{"class":160},[101,38632,38036],{"class":111},[101,38634,38635],{"class":103,"line":9752},[101,38636,38041],{"class":111},[101,38638,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671],{"class":103,"line":9776},[101,38640,38003],{"class":111},[101,38642,30845],{"class":5204},[101,38644,157],{"class":107},[101,38646,38446],{"class":160},[101,38648,489],{"class":111},[101,38650,30854],{"class":5204},[101,38652,157],{"class":107},[101,38654,38446],{"class":160},[101,38656,489],{"class":111},[101,38658,30863],{"class":5204},[101,38660,157],{"class":107},[101,38662,183],{"class":160},[101,38664,489],{"class":111},[101,38666,30872],{"class":5204},[101,38668,157],{"class":107},[101,38670,329],{"class":160},[101,38672,38036],{"class":111},[101,38674,38675],{"class":103,"line":9781},[101,38676,38041],{"class":111},[101,38678,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711],{"class":103,"line":9786},[101,38680,38003],{"class":111},[101,38682,30845],{"class":5204},[101,38684,157],{"class":107},[101,38686,38446],{"class":160},[101,38688,489],{"class":111},[101,38690,30854],{"class":5204},[101,38692,157],{"class":107},[101,38694,38446],{"class":160},[101,38696,489],{"class":111},[101,38698,30863],{"class":5204},[101,38700,157],{"class":107},[101,38702,183],{"class":160},[101,38704,489],{"class":111},[101,38706,30872],{"class":5204},[101,38708,157],{"class":107},[101,38710,329],{"class":160},[101,38712,38036],{"class":111},[101,38714,38715],{"class":103,"line":9791},[101,38716,38041],{"class":111},[101,38718,38719,38721,38723,38725,38727,38729,38731,38733,38735,38737,38739,38741,38743],{"class":103,"line":9800},[101,38720,38086],{"class":111},[101,38722,30863],{"class":5204},[101,38724,157],{"class":107},[101,38726,189],{"class":160},[101,38728,489],{"class":111},[101,38730,30918],{"class":5204},[101,38732,157],{"class":107},[101,38734,189],{"class":160},[101,38736,489],{"class":111},[101,38738,30872],{"class":5204},[101,38740,157],{"class":107},[101,38742,303],{"class":160},[101,38744,118],{"class":111},[101,38746,38747],{"class":103,"line":9805},[101,38748,38115],{"class":111},[101,38750,38751],{"class":103,"line":9811},[101,38752,38753],{"class":170},"        # 全连接层\n",[101,38755,38756,38758,38761,38763],{"class":103,"line":9832},[101,38757,30834],{"class":160},[101,38759,38760],{"class":111},".block6",[101,38762,157],{"class":107},[101,38764,37998],{"class":111},[101,38766,38767],{"class":103,"line":9838},[101,38768,38769],{"class":170},"            # 平展操作\n",[101,38771,38772],{"class":103,"line":9852},[101,38773,38774],{"class":170},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[101,38776,38777],{"class":103,"line":9858},[101,38778,38779],{"class":111},"            nn.Flatten(),\n",[101,38781,38782,38785,38787,38789,38791,38793,38795,38797,38799],{"class":103,"line":9885},[101,38783,38784],{"class":111},"            nn.Linear(",[101,38786,480],{"class":160},[101,38788,566],{"class":107},[101,38790,480],{"class":160},[101,38792,566],{"class":107},[101,38794,38446],{"class":160},[101,38796,489],{"class":111},[101,38798,34859],{"class":160},[101,38800,38036],{"class":111},[101,38802,38803],{"class":103,"line":9894},[101,38804,38041],{"class":111},[101,38806,38807,38809,38811,38813,38815],{"class":103,"line":9900},[101,38808,38784],{"class":111},[101,38810,34859],{"class":160},[101,38812,489],{"class":111},[101,38814,32059],{"class":160},[101,38816,38036],{"class":111},[101,38818,38819],{"class":103,"line":9908},[101,38820,38041],{"class":111},[101,38822,38823,38825,38827,38829,38831],{"class":103,"line":9913},[101,38824,38784],{"class":111},[101,38826,32059],{"class":160},[101,38828,489],{"class":111},[101,38830,557],{"class":160},[101,38832,118],{"class":111},[101,38834,38835],{"class":103,"line":16592},[101,38836,38115],{"class":111},[101,38838,38839],{"class":103,"line":16598},[101,38840,2387],{"emptyLinePlaceholder":27},[101,38842,38843],{"class":103,"line":16621},[101,38844,38845],{"class":170},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[101,38847,38848],{"class":103,"line":16627},[101,38849,38850],{"class":170},"        # 循环遍历模型\n",[101,38852,38853,38855,38858,38860,38863],{"class":103,"line":16650},[101,38854,3390],{"class":107},[101,38856,38857],{"class":111}," m ",[101,38859,26032],{"class":107},[101,38861,38862],{"class":160}," self",[101,38864,38865],{"class":111},".modules():\n",[101,38867,38868],{"class":103,"line":16664},[101,38869,38870],{"class":170},"            # print(m)\n",[101,38872,38873,38875,38878],{"class":103,"line":16684},[101,38874,4629],{"class":107},[101,38876,38877],{"class":160}," isinstance",[101,38879,38880],{"class":111},"(m,nn.Conv2d):\n",[101,38882,38883],{"class":103,"line":16690},[101,38884,38885],{"class":170},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[101,38887,38888,38891,38894,38896,38899],{"class":103,"line":16701},[101,38889,38890],{"class":111},"                nn.init.kaiming_normal_(m.weight,",[101,38892,38893],{"class":5204},"nonlinearity",[101,38895,157],{"class":107},[101,38897,38898],{"class":216},"'relu'",[101,38900,118],{"class":111},[101,38902,38903],{"class":103,"line":16724},[101,38904,38905],{"class":170},"                # 判断b参数是否存在\n",[101,38907,38908,38911,38914,38917,38920,38923],{"class":103,"line":16746},[101,38909,38910],{"class":107},"                if",[101,38912,38913],{"class":111}," m.bias ",[101,38915,38916],{"class":107},"is",[101,38918,38919],{"class":107}," not",[101,38921,38922],{"class":160}," None",[101,38924,3726],{"class":111},[101,38926,38927],{"class":103,"line":16751},[101,38928,38929],{"class":170},"                    # 如果参数不存在的化初始化b=0\n",[101,38931,38932,38935,38937],{"class":103,"line":16757},[101,38933,38934],{"class":111},"                    nn.init.constant_(m.bias,",[101,38936,303],{"class":160},[101,38938,118],{"class":111},[101,38940,38941],{"class":103,"line":16771},[101,38942,38943],{"class":170},"            # 全连接层初始化\n",[101,38945,38946,38949,38951],{"class":103,"line":16784},[101,38947,38948],{"class":107},"            elif",[101,38950,38877],{"class":160},[101,38952,38953],{"class":111},"(m,nn.Linear):\n",[101,38955,38956],{"class":103,"line":16789},[101,38957,38958],{"class":170},"                # 这个初始化方法是利用的是正太分布的方式\n",[101,38960,38961],{"class":103,"line":16803},[101,38962,38963],{"class":170},"                # 均值为0，方差为0.01\n",[101,38965,38966,38969,38971,38973,38976],{"class":103,"line":16808},[101,38967,38968],{"class":111},"                nn.init.normal_(m.weight,",[101,38970,303],{"class":160},[101,38972,489],{"class":111},[101,38974,38975],{"class":160},"0.01",[101,38977,118],{"class":111},[101,38979,38980],{"class":103,"line":16814},[101,38981,38982],{"class":170},"                # 初始化b参数\n",[101,38984,38985,38987,38989,38991,38993,38995],{"class":103,"line":16819},[101,38986,38910],{"class":107},[101,38988,38913],{"class":111},[101,38990,38916],{"class":107},[101,38992,38919],{"class":107},[101,38994,38922],{"class":160},[101,38996,3726],{"class":111},[101,38998,38999,39001,39003],{"class":103,"line":16833},[101,39000,38934],{"class":111},[101,39002,303],{"class":160},[101,39004,118],{"class":111},[101,39006,39007],{"class":103,"line":16838},[101,39008,2387],{"emptyLinePlaceholder":27},[101,39010,39011],{"class":103,"line":16843},[101,39012,35154],{"class":170},[101,39014,39015,39017,39019],{"class":103,"line":16857},[101,39016,30790],{"class":107},[101,39018,31082],{"class":1950},[101,39020,31085],{"class":111},[101,39022,39023,39025,39027,39029],{"class":103,"line":16869},[101,39024,31090],{"class":111},[101,39026,157],{"class":107},[101,39028,30812],{"class":160},[101,39030,39031],{"class":111},".block1(x)\n",[101,39033,39034,39036,39038,39040],{"class":103,"line":16874},[101,39035,31090],{"class":111},[101,39037,157],{"class":107},[101,39039,30812],{"class":160},[101,39041,39042],{"class":111},".block2(x)\n",[101,39044,39045,39047,39049,39051],{"class":103,"line":16887},[101,39046,31090],{"class":111},[101,39048,157],{"class":107},[101,39050,30812],{"class":160},[101,39052,39053],{"class":111},".block3(x)\n",[101,39055,39056,39058,39060,39062],{"class":103,"line":16892},[101,39057,31090],{"class":111},[101,39059,157],{"class":107},[101,39061,30812],{"class":160},[101,39063,39064],{"class":111},".block4(x)\n",[101,39066,39067,39069,39071,39073],{"class":103,"line":16897},[101,39068,31090],{"class":111},[101,39070,157],{"class":107},[101,39072,30812],{"class":160},[101,39074,39075],{"class":111},".block5(x)\n",[101,39077,39078,39080,39082,39084],{"class":103,"line":16902},[101,39079,31090],{"class":111},[101,39081,157],{"class":107},[101,39083,30812],{"class":160},[101,39085,39086],{"class":111},".block6(x)\n",[101,39088,39089,39091],{"class":103,"line":16915},[101,39090,14740],{"class":107},[101,39092,31198],{"class":111},[101,39094,39095],{"class":103,"line":16920},[101,39096,2387],{"emptyLinePlaceholder":27},[101,39098,39099],{"class":103,"line":32622},[101,39100,39101],{"class":170},"# 验证模型\n",[101,39103,39104,39106,39108,39110,39113],{"class":103,"line":32628},[101,39105,1518],{"class":107},[101,39107,31209],{"class":160},[101,39109,2936],{"class":107},[101,39111,39112],{"class":216},"'__main__'",[101,39114,3726],{"class":111},[101,39116,39117,39119,39121,39123,39125,39127,39129,39131,39133],{"class":103,"line":32634},[101,39118,31226],{"class":111},[101,39120,157],{"class":107},[101,39122,30440],{"class":111},[101,39124,31233],{"class":216},[101,39126,1691],{"class":107},[101,39128,31238],{"class":111},[101,39130,1688],{"class":107},[101,39132,30465],{"class":216},[101,39134,118],{"class":111},[101,39136,39137,39139],{"class":103,"line":32640},[101,39138,31288],{"class":160},[101,39140,30474],{"class":111},[101,39142,39143,39145,39147],{"class":103,"line":32646},[101,39144,31278],{"class":111},[101,39146,157],{"class":107},[101,39148,39149],{"class":111},"VGG16().to(device)\n",[101,39151,39152,39154,39156,39158,39160,39162,39164,39166],{"class":103,"line":32657},[101,39153,31288],{"class":160},[101,39155,31291],{"class":111},[101,39157,329],{"class":160},[101,39159,489],{"class":111},[101,39161,31490],{"class":160},[101,39163,489],{"class":111},[101,39165,31490],{"class":160},[101,39167,31304],{"class":111},[55,39169,39170],{"start":21},[58,39171,39172],{},"训练代码",[10,39174,39175],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[10,39177,39178],{},"解决方式:",[10,39180,39181],{},"①权重初始化",[92,39183,39185],{"className":30367,"code":39184,"language":30369,"meta":20,"style":20},"# 权重初始化,保证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",[98,39186,39187,39192,39197,39209,39214,39222,39227,39240,39245,39259,39264,39273,39278,39287,39292,39297,39310,39315,39329],{"__ignoreMap":20},[101,39188,39189],{"class":103,"line":104},[101,39190,39191],{"class":170},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[101,39193,39194],{"class":103,"line":21},[101,39195,39196],{"class":170},"# 循环遍历模型\n",[101,39198,39199,39201,39203,39205,39207],{"class":103,"line":1166},[101,39200,3012],{"class":107},[101,39202,38857],{"class":111},[101,39204,26032],{"class":107},[101,39206,38862],{"class":160},[101,39208,38865],{"class":111},[101,39210,39211],{"class":103,"line":1181},[101,39212,39213],{"class":170},"    # print(m)\n",[101,39215,39216,39218,39220],{"class":103,"line":1187},[101,39217,3088],{"class":107},[101,39219,38877],{"class":160},[101,39221,38880],{"class":111},[101,39223,39224],{"class":103,"line":1201},[101,39225,39226],{"class":170},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[101,39228,39229,39232,39234,39236,39238],{"class":103,"line":1207},[101,39230,39231],{"class":111},"        nn.init.kaiming_normal_(m.weight,",[101,39233,38893],{"class":5204},[101,39235,157],{"class":107},[101,39237,38898],{"class":216},[101,39239,118],{"class":111},[101,39241,39242],{"class":103,"line":1298},[101,39243,39244],{"class":170},"        # 判断b参数是否存在\n",[101,39246,39247,39249,39251,39253,39255,39257],{"class":103,"line":1304},[101,39248,2484],{"class":107},[101,39250,38913],{"class":111},[101,39252,38916],{"class":107},[101,39254,38919],{"class":107},[101,39256,38922],{"class":160},[101,39258,3726],{"class":111},[101,39260,39261],{"class":103,"line":1316},[101,39262,39263],{"class":170},"            # 如果参数不存在的化初始化b=0\n",[101,39265,39266,39269,39271],{"class":103,"line":1599},[101,39267,39268],{"class":111},"            nn.init.constant_(m.bias,",[101,39270,303],{"class":160},[101,39272,118],{"class":111},[101,39274,39275],{"class":103,"line":1604},[101,39276,39277],{"class":170},"    # 全连接层初始化\n",[101,39279,39280,39283,39285],{"class":103,"line":1610},[101,39281,39282],{"class":107},"    elif",[101,39284,38877],{"class":160},[101,39286,38953],{"class":111},[101,39288,39289],{"class":103,"line":1615},[101,39290,39291],{"class":170},"        # 这个初始化方法是利用的是正太分布的方式\n",[101,39293,39294],{"class":103,"line":1629},[101,39295,39296],{"class":170},"        # 均值为0，方差为0.01\n",[101,39298,39299,39302,39304,39306,39308],{"class":103,"line":1634},[101,39300,39301],{"class":111},"        nn.init.normal_(m.weight,",[101,39303,303],{"class":160},[101,39305,489],{"class":111},[101,39307,38975],{"class":160},[101,39309,118],{"class":111},[101,39311,39312],{"class":103,"line":1640},[101,39313,39314],{"class":170},"        # 初始化b参数\n",[101,39316,39317,39319,39321,39323,39325,39327],{"class":103,"line":1661},[101,39318,2484],{"class":107},[101,39320,38913],{"class":111},[101,39322,38916],{"class":107},[101,39324,38919],{"class":107},[101,39326,38922],{"class":160},[101,39328,3726],{"class":111},[101,39330,39331,39333,39335],{"class":103,"line":1666},[101,39332,39268],{"class":111},[101,39334,303],{"class":160},[101,39336,118],{"class":111},[10,39338,39339],{},"②尽可能地增加批次",[10,39341,39342],{},"训练完整代码：",[92,39344,39345],{"className":30367,"code":37888,"language":30369,"meta":20,"style":20},[98,39346,39347,39353,39363,39373,39383,39387,39403,39411,39429,39433,39437,39447,39483,39487,39523,39527,39555,39559,39563,39573,39609,39613,39649,39653,39681,39685,39689,39699,39735,39739,39775,39779,39815,39819,39847,39851,39855,39865,39901,39905,39941,39945,39981,39985,40013,40017,40021,40031,40067,40071,40107,40111,40147,40151,40179,40183,40187,40197,40201,40205,40209,40229,40233,40245,40249,40261,40265,40269,40273,40277,40289,40293,40301,40305,40317,40321,40335,40339,40347,40351,40359,40363,40367,40379,40383,40397,40405,40409,40413,40421,40431,40441,40451,40461,40471,40481,40487,40491,40495,40507,40527,40533,40541],{"__ignoreMap":20},[101,39348,39349,39351],{"class":103,"line":104},[101,39350,30381],{"class":107},[101,39352,30384],{"class":111},[101,39354,39355,39357,39359,39361],{"class":103,"line":21},[101,39356,30726],{"class":107},[101,39358,37903],{"class":111},[101,39360,30381],{"class":107},[101,39362,37908],{"class":111},[101,39364,39365,39367,39369,39371],{"class":103,"line":1166},[101,39366,30726],{"class":107},[101,39368,30729],{"class":111},[101,39370,30381],{"class":107},[101,39372,30734],{"class":111},[101,39374,39375,39377,39379,39381],{"class":103,"line":1181},[101,39376,30726],{"class":107},[101,39378,30746],{"class":111},[101,39380,30381],{"class":107},[101,39382,30751],{"class":111},[101,39384,39385],{"class":103,"line":1187},[101,39386,2387],{"emptyLinePlaceholder":27},[101,39388,39389,39391,39393,39395,39397,39399,39401],{"class":103,"line":1201},[101,39390,14682],{"class":107},[101,39392,37939],{"class":1950},[101,39394,112],{"class":111},[101,39396,30767],{"class":1950},[101,39398,669],{"class":111},[101,39400,30772],{"class":1950},[101,39402,30775],{"class":111},[101,39404,39405,39407,39409],{"class":103,"line":1207},[101,39406,30790],{"class":107},[101,39408,30793],{"class":160},[101,39410,30796],{"class":111},[101,39412,39413,39415,39417,39419,39421,39423,39425,39427],{"class":103,"line":1298},[101,39414,30806],{"class":160},[101,39416,112],{"class":111},[101,39418,37966],{"class":160},[101,39420,12423],{"class":111},[101,39422,30812],{"class":160},[101,39424,30815],{"class":111},[101,39426,30818],{"class":160},[101,39428,1963],{"class":111},[101,39430,39431],{"class":103,"line":1304},[101,39432,37981],{"class":170},[101,39434,39435],{"class":103,"line":1316},[101,39436,37986],{"class":170},[101,39438,39439,39441,39443,39445],{"class":103,"line":1599},[101,39440,30834],{"class":160},[101,39442,37993],{"class":111},[101,39444,157],{"class":107},[101,39446,37998],{"class":111},[101,39448,39449,39451,39453,39455,39457,39459,39461,39463,39465,39467,39469,39471,39473,39475,39477,39479,39481],{"class":103,"line":1604},[101,39450,38003],{"class":111},[101,39452,30845],{"class":5204},[101,39454,157],{"class":107},[101,39456,329],{"class":160},[101,39458,489],{"class":111},[101,39460,30854],{"class":5204},[101,39462,157],{"class":107},[101,39464,315],{"class":160},[101,39466,489],{"class":111},[101,39468,30863],{"class":5204},[101,39470,157],{"class":107},[101,39472,183],{"class":160},[101,39474,489],{"class":111},[101,39476,30872],{"class":5204},[101,39478,157],{"class":107},[101,39480,329],{"class":160},[101,39482,38036],{"class":111},[101,39484,39485],{"class":103,"line":1610},[101,39486,38041],{"class":111},[101,39488,39489,39491,39493,39495,39497,39499,39501,39503,39505,39507,39509,39511,39513,39515,39517,39519,39521],{"class":103,"line":1615},[101,39490,38003],{"class":111},[101,39492,30845],{"class":5204},[101,39494,157],{"class":107},[101,39496,315],{"class":160},[101,39498,489],{"class":111},[101,39500,30854],{"class":5204},[101,39502,157],{"class":107},[101,39504,315],{"class":160},[101,39506,489],{"class":111},[101,39508,30863],{"class":5204},[101,39510,157],{"class":107},[101,39512,183],{"class":160},[101,39514,489],{"class":111},[101,39516,30872],{"class":5204},[101,39518,157],{"class":107},[101,39520,329],{"class":160},[101,39522,38036],{"class":111},[101,39524,39525],{"class":103,"line":1629},[101,39526,38041],{"class":111},[101,39528,39529,39531,39533,39535,39537,39539,39541,39543,39545,39547,39549,39551,39553],{"class":103,"line":1634},[101,39530,38086],{"class":111},[101,39532,30863],{"class":5204},[101,39534,157],{"class":107},[101,39536,189],{"class":160},[101,39538,489],{"class":111},[101,39540,30918],{"class":5204},[101,39542,157],{"class":107},[101,39544,189],{"class":160},[101,39546,489],{"class":111},[101,39548,30872],{"class":5204},[101,39550,157],{"class":107},[101,39552,303],{"class":160},[101,39554,118],{"class":111},[101,39556,39557],{"class":103,"line":1640},[101,39558,38115],{"class":111},[101,39560,39561],{"class":103,"line":1661},[101,39562,38120],{"class":170},[101,39564,39565,39567,39569,39571],{"class":103,"line":1666},[101,39566,30834],{"class":160},[101,39568,38127],{"class":111},[101,39570,157],{"class":107},[101,39572,37998],{"class":111},[101,39574,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599,39601,39603,39605,39607],{"class":103,"line":1680},[101,39576,38003],{"class":111},[101,39578,30845],{"class":5204},[101,39580,157],{"class":107},[101,39582,315],{"class":160},[101,39584,489],{"class":111},[101,39586,30854],{"class":5204},[101,39588,157],{"class":107},[101,39590,32059],{"class":160},[101,39592,489],{"class":111},[101,39594,30863],{"class":5204},[101,39596,157],{"class":107},[101,39598,183],{"class":160},[101,39600,489],{"class":111},[101,39602,30872],{"class":5204},[101,39604,157],{"class":107},[101,39606,329],{"class":160},[101,39608,38036],{"class":111},[101,39610,39611],{"class":103,"line":1685},[101,39612,38041],{"class":111},[101,39614,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647],{"class":103,"line":1714},[101,39616,38003],{"class":111},[101,39618,30845],{"class":5204},[101,39620,157],{"class":107},[101,39622,32059],{"class":160},[101,39624,489],{"class":111},[101,39626,30854],{"class":5204},[101,39628,157],{"class":107},[101,39630,32059],{"class":160},[101,39632,489],{"class":111},[101,39634,30863],{"class":5204},[101,39636,157],{"class":107},[101,39638,183],{"class":160},[101,39640,489],{"class":111},[101,39642,30872],{"class":5204},[101,39644,157],{"class":107},[101,39646,329],{"class":160},[101,39648,38036],{"class":111},[101,39650,39651],{"class":103,"line":1719},[101,39652,38041],{"class":111},[101,39654,39655,39657,39659,39661,39663,39665,39667,39669,39671,39673,39675,39677,39679],{"class":103,"line":1736},[101,39656,38086],{"class":111},[101,39658,30863],{"class":5204},[101,39660,157],{"class":107},[101,39662,189],{"class":160},[101,39664,489],{"class":111},[101,39666,30918],{"class":5204},[101,39668,157],{"class":107},[101,39670,189],{"class":160},[101,39672,489],{"class":111},[101,39674,30872],{"class":5204},[101,39676,157],{"class":107},[101,39678,303],{"class":160},[101,39680,118],{"class":111},[101,39682,39683],{"class":103,"line":1741},[101,39684,38115],{"class":111},[101,39686,39687],{"class":103,"line":1746},[101,39688,38248],{"class":170},[101,39690,39691,39693,39695,39697],{"class":103,"line":1751},[101,39692,30834],{"class":160},[101,39694,38255],{"class":111},[101,39696,157],{"class":107},[101,39698,37998],{"class":111},[101,39700,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733],{"class":103,"line":1765},[101,39702,38003],{"class":111},[101,39704,30845],{"class":5204},[101,39706,157],{"class":107},[101,39708,32059],{"class":160},[101,39710,489],{"class":111},[101,39712,30854],{"class":5204},[101,39714,157],{"class":107},[101,39716,34859],{"class":160},[101,39718,489],{"class":111},[101,39720,30863],{"class":5204},[101,39722,157],{"class":107},[101,39724,183],{"class":160},[101,39726,489],{"class":111},[101,39728,30872],{"class":5204},[101,39730,157],{"class":107},[101,39732,329],{"class":160},[101,39734,38036],{"class":111},[101,39736,39737],{"class":103,"line":1770},[101,39738,38041],{"class":111},[101,39740,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767,39769,39771,39773],{"class":103,"line":2564},[101,39742,38003],{"class":111},[101,39744,30845],{"class":5204},[101,39746,157],{"class":107},[101,39748,34859],{"class":160},[101,39750,489],{"class":111},[101,39752,30854],{"class":5204},[101,39754,157],{"class":107},[101,39756,34859],{"class":160},[101,39758,489],{"class":111},[101,39760,30863],{"class":5204},[101,39762,157],{"class":107},[101,39764,183],{"class":160},[101,39766,489],{"class":111},[101,39768,30872],{"class":5204},[101,39770,157],{"class":107},[101,39772,329],{"class":160},[101,39774,38036],{"class":111},[101,39776,39777],{"class":103,"line":2578},[101,39778,38041],{"class":111},[101,39780,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813],{"class":103,"line":2586},[101,39782,38003],{"class":111},[101,39784,30845],{"class":5204},[101,39786,157],{"class":107},[101,39788,34859],{"class":160},[101,39790,489],{"class":111},[101,39792,30854],{"class":5204},[101,39794,157],{"class":107},[101,39796,34859],{"class":160},[101,39798,489],{"class":111},[101,39800,30863],{"class":5204},[101,39802,157],{"class":107},[101,39804,183],{"class":160},[101,39806,489],{"class":111},[101,39808,30872],{"class":5204},[101,39810,157],{"class":107},[101,39812,329],{"class":160},[101,39814,38036],{"class":111},[101,39816,39817],{"class":103,"line":2591},[101,39818,38041],{"class":111},[101,39820,39821,39823,39825,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845],{"class":103,"line":2597},[101,39822,38086],{"class":111},[101,39824,30863],{"class":5204},[101,39826,157],{"class":107},[101,39828,189],{"class":160},[101,39830,489],{"class":111},[101,39832,30918],{"class":5204},[101,39834,157],{"class":107},[101,39836,189],{"class":160},[101,39838,489],{"class":111},[101,39840,30872],{"class":5204},[101,39842,157],{"class":107},[101,39844,303],{"class":160},[101,39846,118],{"class":111},[101,39848,39849],{"class":103,"line":2603},[101,39850,38115],{"class":111},[101,39852,39853],{"class":103,"line":2608},[101,39854,38416],{"class":170},[101,39856,39857,39859,39861,39863],{"class":103,"line":7936},[101,39858,30834],{"class":160},[101,39860,38423],{"class":111},[101,39862,157],{"class":107},[101,39864,37998],{"class":111},[101,39866,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899],{"class":103,"line":7960},[101,39868,38003],{"class":111},[101,39870,30845],{"class":5204},[101,39872,157],{"class":107},[101,39874,34859],{"class":160},[101,39876,489],{"class":111},[101,39878,30854],{"class":5204},[101,39880,157],{"class":107},[101,39882,38446],{"class":160},[101,39884,489],{"class":111},[101,39886,30863],{"class":5204},[101,39888,157],{"class":107},[101,39890,183],{"class":160},[101,39892,489],{"class":111},[101,39894,30872],{"class":5204},[101,39896,157],{"class":107},[101,39898,329],{"class":160},[101,39900,38036],{"class":111},[101,39902,39903],{"class":103,"line":7965},[101,39904,38041],{"class":111},[101,39906,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939],{"class":103,"line":7971},[101,39908,38003],{"class":111},[101,39910,30845],{"class":5204},[101,39912,157],{"class":107},[101,39914,38446],{"class":160},[101,39916,489],{"class":111},[101,39918,30854],{"class":5204},[101,39920,157],{"class":107},[101,39922,38446],{"class":160},[101,39924,489],{"class":111},[101,39926,30863],{"class":5204},[101,39928,157],{"class":107},[101,39930,183],{"class":160},[101,39932,489],{"class":111},[101,39934,30872],{"class":5204},[101,39936,157],{"class":107},[101,39938,329],{"class":160},[101,39940,38036],{"class":111},[101,39942,39943],{"class":103,"line":7998},[101,39944,38041],{"class":111},[101,39946,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979],{"class":103,"line":8003},[101,39948,38003],{"class":111},[101,39950,30845],{"class":5204},[101,39952,157],{"class":107},[101,39954,38446],{"class":160},[101,39956,489],{"class":111},[101,39958,30854],{"class":5204},[101,39960,157],{"class":107},[101,39962,38446],{"class":160},[101,39964,489],{"class":111},[101,39966,30863],{"class":5204},[101,39968,157],{"class":107},[101,39970,183],{"class":160},[101,39972,489],{"class":111},[101,39974,30872],{"class":5204},[101,39976,157],{"class":107},[101,39978,329],{"class":160},[101,39980,38036],{"class":111},[101,39982,39983],{"class":103,"line":8009},[101,39984,38041],{"class":111},[101,39986,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011],{"class":103,"line":8021},[101,39988,38086],{"class":111},[101,39990,30863],{"class":5204},[101,39992,157],{"class":107},[101,39994,189],{"class":160},[101,39996,489],{"class":111},[101,39998,30918],{"class":5204},[101,40000,157],{"class":107},[101,40002,189],{"class":160},[101,40004,489],{"class":111},[101,40006,30872],{"class":5204},[101,40008,157],{"class":107},[101,40010,303],{"class":160},[101,40012,118],{"class":111},[101,40014,40015],{"class":103,"line":8033},[101,40016,38115],{"class":111},[101,40018,40019],{"class":103,"line":8045},[101,40020,38585],{"class":170},[101,40022,40023,40025,40027,40029],{"class":103,"line":9704},[101,40024,30834],{"class":160},[101,40026,38592],{"class":111},[101,40028,157],{"class":107},[101,40030,37998],{"class":111},[101,40032,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065],{"class":103,"line":9729},[101,40034,38003],{"class":111},[101,40036,30845],{"class":5204},[101,40038,157],{"class":107},[101,40040,38446],{"class":160},[101,40042,489],{"class":111},[101,40044,30854],{"class":5204},[101,40046,157],{"class":107},[101,40048,38446],{"class":160},[101,40050,489],{"class":111},[101,40052,30863],{"class":5204},[101,40054,157],{"class":107},[101,40056,183],{"class":160},[101,40058,489],{"class":111},[101,40060,30872],{"class":5204},[101,40062,157],{"class":107},[101,40064,329],{"class":160},[101,40066,38036],{"class":111},[101,40068,40069],{"class":103,"line":9752},[101,40070,38041],{"class":111},[101,40072,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105],{"class":103,"line":9776},[101,40074,38003],{"class":111},[101,40076,30845],{"class":5204},[101,40078,157],{"class":107},[101,40080,38446],{"class":160},[101,40082,489],{"class":111},[101,40084,30854],{"class":5204},[101,40086,157],{"class":107},[101,40088,38446],{"class":160},[101,40090,489],{"class":111},[101,40092,30863],{"class":5204},[101,40094,157],{"class":107},[101,40096,183],{"class":160},[101,40098,489],{"class":111},[101,40100,30872],{"class":5204},[101,40102,157],{"class":107},[101,40104,329],{"class":160},[101,40106,38036],{"class":111},[101,40108,40109],{"class":103,"line":9781},[101,40110,38041],{"class":111},[101,40112,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145],{"class":103,"line":9786},[101,40114,38003],{"class":111},[101,40116,30845],{"class":5204},[101,40118,157],{"class":107},[101,40120,38446],{"class":160},[101,40122,489],{"class":111},[101,40124,30854],{"class":5204},[101,40126,157],{"class":107},[101,40128,38446],{"class":160},[101,40130,489],{"class":111},[101,40132,30863],{"class":5204},[101,40134,157],{"class":107},[101,40136,183],{"class":160},[101,40138,489],{"class":111},[101,40140,30872],{"class":5204},[101,40142,157],{"class":107},[101,40144,329],{"class":160},[101,40146,38036],{"class":111},[101,40148,40149],{"class":103,"line":9791},[101,40150,38041],{"class":111},[101,40152,40153,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177],{"class":103,"line":9800},[101,40154,38086],{"class":111},[101,40156,30863],{"class":5204},[101,40158,157],{"class":107},[101,40160,189],{"class":160},[101,40162,489],{"class":111},[101,40164,30918],{"class":5204},[101,40166,157],{"class":107},[101,40168,189],{"class":160},[101,40170,489],{"class":111},[101,40172,30872],{"class":5204},[101,40174,157],{"class":107},[101,40176,303],{"class":160},[101,40178,118],{"class":111},[101,40180,40181],{"class":103,"line":9805},[101,40182,38115],{"class":111},[101,40184,40185],{"class":103,"line":9811},[101,40186,38753],{"class":170},[101,40188,40189,40191,40193,40195],{"class":103,"line":9832},[101,40190,30834],{"class":160},[101,40192,38760],{"class":111},[101,40194,157],{"class":107},[101,40196,37998],{"class":111},[101,40198,40199],{"class":103,"line":9838},[101,40200,38769],{"class":170},[101,40202,40203],{"class":103,"line":9852},[101,40204,38774],{"class":170},[101,40206,40207],{"class":103,"line":9858},[101,40208,38779],{"class":111},[101,40210,40211,40213,40215,40217,40219,40221,40223,40225,40227],{"class":103,"line":9885},[101,40212,38784],{"class":111},[101,40214,480],{"class":160},[101,40216,566],{"class":107},[101,40218,480],{"class":160},[101,40220,566],{"class":107},[101,40222,38446],{"class":160},[101,40224,489],{"class":111},[101,40226,34859],{"class":160},[101,40228,38036],{"class":111},[101,40230,40231],{"class":103,"line":9894},[101,40232,38041],{"class":111},[101,40234,40235,40237,40239,40241,40243],{"class":103,"line":9900},[101,40236,38784],{"class":111},[101,40238,34859],{"class":160},[101,40240,489],{"class":111},[101,40242,32059],{"class":160},[101,40244,38036],{"class":111},[101,40246,40247],{"class":103,"line":9908},[101,40248,38041],{"class":111},[101,40250,40251,40253,40255,40257,40259],{"class":103,"line":9913},[101,40252,38784],{"class":111},[101,40254,32059],{"class":160},[101,40256,489],{"class":111},[101,40258,557],{"class":160},[101,40260,118],{"class":111},[101,40262,40263],{"class":103,"line":16592},[101,40264,38115],{"class":111},[101,40266,40267],{"class":103,"line":16598},[101,40268,2387],{"emptyLinePlaceholder":27},[101,40270,40271],{"class":103,"line":16621},[101,40272,38845],{"class":170},[101,40274,40275],{"class":103,"line":16627},[101,40276,38850],{"class":170},[101,40278,40279,40281,40283,40285,40287],{"class":103,"line":16650},[101,40280,3390],{"class":107},[101,40282,38857],{"class":111},[101,40284,26032],{"class":107},[101,40286,38862],{"class":160},[101,40288,38865],{"class":111},[101,40290,40291],{"class":103,"line":16664},[101,40292,38870],{"class":170},[101,40294,40295,40297,40299],{"class":103,"line":16684},[101,40296,4629],{"class":107},[101,40298,38877],{"class":160},[101,40300,38880],{"class":111},[101,40302,40303],{"class":103,"line":16690},[101,40304,38885],{"class":170},[101,40306,40307,40309,40311,40313,40315],{"class":103,"line":16701},[101,40308,38890],{"class":111},[101,40310,38893],{"class":5204},[101,40312,157],{"class":107},[101,40314,38898],{"class":216},[101,40316,118],{"class":111},[101,40318,40319],{"class":103,"line":16724},[101,40320,38905],{"class":170},[101,40322,40323,40325,40327,40329,40331,40333],{"class":103,"line":16746},[101,40324,38910],{"class":107},[101,40326,38913],{"class":111},[101,40328,38916],{"class":107},[101,40330,38919],{"class":107},[101,40332,38922],{"class":160},[101,40334,3726],{"class":111},[101,40336,40337],{"class":103,"line":16751},[101,40338,38929],{"class":170},[101,40340,40341,40343,40345],{"class":103,"line":16757},[101,40342,38934],{"class":111},[101,40344,303],{"class":160},[101,40346,118],{"class":111},[101,40348,40349],{"class":103,"line":16771},[101,40350,38943],{"class":170},[101,40352,40353,40355,40357],{"class":103,"line":16784},[101,40354,38948],{"class":107},[101,40356,38877],{"class":160},[101,40358,38953],{"class":111},[101,40360,40361],{"class":103,"line":16789},[101,40362,38958],{"class":170},[101,40364,40365],{"class":103,"line":16803},[101,40366,38963],{"class":170},[101,40368,40369,40371,40373,40375,40377],{"class":103,"line":16808},[101,40370,38968],{"class":111},[101,40372,303],{"class":160},[101,40374,489],{"class":111},[101,40376,38975],{"class":160},[101,40378,118],{"class":111},[101,40380,40381],{"class":103,"line":16814},[101,40382,38982],{"class":170},[101,40384,40385,40387,40389,40391,40393,40395],{"class":103,"line":16819},[101,40386,38910],{"class":107},[101,40388,38913],{"class":111},[101,40390,38916],{"class":107},[101,40392,38919],{"class":107},[101,40394,38922],{"class":160},[101,40396,3726],{"class":111},[101,40398,40399,40401,40403],{"class":103,"line":16833},[101,40400,38934],{"class":111},[101,40402,303],{"class":160},[101,40404,118],{"class":111},[101,40406,40407],{"class":103,"line":16838},[101,40408,2387],{"emptyLinePlaceholder":27},[101,40410,40411],{"class":103,"line":16843},[101,40412,35154],{"class":170},[101,40414,40415,40417,40419],{"class":103,"line":16857},[101,40416,30790],{"class":107},[101,40418,31082],{"class":1950},[101,40420,31085],{"class":111},[101,40422,40423,40425,40427,40429],{"class":103,"line":16869},[101,40424,31090],{"class":111},[101,40426,157],{"class":107},[101,40428,30812],{"class":160},[101,40430,39031],{"class":111},[101,40432,40433,40435,40437,40439],{"class":103,"line":16874},[101,40434,31090],{"class":111},[101,40436,157],{"class":107},[101,40438,30812],{"class":160},[101,40440,39042],{"class":111},[101,40442,40443,40445,40447,40449],{"class":103,"line":16887},[101,40444,31090],{"class":111},[101,40446,157],{"class":107},[101,40448,30812],{"class":160},[101,40450,39053],{"class":111},[101,40452,40453,40455,40457,40459],{"class":103,"line":16892},[101,40454,31090],{"class":111},[101,40456,157],{"class":107},[101,40458,30812],{"class":160},[101,40460,39064],{"class":111},[101,40462,40463,40465,40467,40469],{"class":103,"line":16897},[101,40464,31090],{"class":111},[101,40466,157],{"class":107},[101,40468,30812],{"class":160},[101,40470,39075],{"class":111},[101,40472,40473,40475,40477,40479],{"class":103,"line":16902},[101,40474,31090],{"class":111},[101,40476,157],{"class":107},[101,40478,30812],{"class":160},[101,40480,39086],{"class":111},[101,40482,40483,40485],{"class":103,"line":16915},[101,40484,14740],{"class":107},[101,40486,31198],{"class":111},[101,40488,40489],{"class":103,"line":16920},[101,40490,2387],{"emptyLinePlaceholder":27},[101,40492,40493],{"class":103,"line":32622},[101,40494,39101],{"class":170},[101,40496,40497,40499,40501,40503,40505],{"class":103,"line":32628},[101,40498,1518],{"class":107},[101,40500,31209],{"class":160},[101,40502,2936],{"class":107},[101,40504,39112],{"class":216},[101,40506,3726],{"class":111},[101,40508,40509,40511,40513,40515,40517,40519,40521,40523,40525],{"class":103,"line":32634},[101,40510,31226],{"class":111},[101,40512,157],{"class":107},[101,40514,30440],{"class":111},[101,40516,31233],{"class":216},[101,40518,1691],{"class":107},[101,40520,31238],{"class":111},[101,40522,1688],{"class":107},[101,40524,30465],{"class":216},[101,40526,118],{"class":111},[101,40528,40529,40531],{"class":103,"line":32640},[101,40530,31288],{"class":160},[101,40532,30474],{"class":111},[101,40534,40535,40537,40539],{"class":103,"line":32646},[101,40536,31278],{"class":111},[101,40538,157],{"class":107},[101,40540,39149],{"class":111},[101,40542,40543,40545,40547,40549,40551,40553,40555,40557],{"class":103,"line":32657},[101,40544,31288],{"class":160},[101,40546,31291],{"class":111},[101,40548,329],{"class":160},[101,40550,489],{"class":111},[101,40552,31490],{"class":160},[101,40554,489],{"class":111},[101,40556,31490],{"class":160},[101,40558,31304],{"class":111},[55,40560,40561],{"start":1166},[58,40562,40563],{},"测试代码",[92,40565,40567],{"className":30367,"code":40566,"language":30369,"meta":20,"style":20},"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",[98,40568,40569,40575,40585,40595,40599,40609,40620,40624,40628,40632,40640,40656,40666,40682,40692,40706,40710,40720,40730,40740,40746,40750,40754,40762,40766,40782,40790,40794,40798,40806,40814,40818,40822,40826,40830,40836,40840,40850,40858,40866,40870,40874,40878,40886,40890,40906,40910,40914,40918,40930,40934,40946,40950,40954,40966,40970,40980,40984,40988,41000,41004,41013,41017,41021,41029,41033,41041,41045,41049,41053,41057,41061,41077,41085,41089,41093,41141,41147,41151,41161,41169,41177,41181,41185,41189,41193,41201,41205,41221,41225,41233,41241],{"__ignoreMap":20},[101,40570,40571,40573],{"class":103,"line":104},[101,40572,30381],{"class":107},[101,40574,30384],{"class":111},[101,40576,40577,40579,40581,40583],{"class":103,"line":21},[101,40578,30381],{"class":107},[101,40580,31404],{"class":111},[101,40582,31372],{"class":107},[101,40584,31409],{"class":111},[101,40586,40587,40589,40591,40593],{"class":103,"line":1166},[101,40588,30726],{"class":107},[101,40590,31387],{"class":111},[101,40592,30381],{"class":107},[101,40594,31392],{"class":111},[101,40596,40597],{"class":103,"line":1181},[101,40598,33911],{"class":170},[101,40600,40601,40603,40605,40607],{"class":103,"line":1187},[101,40602,30726],{"class":107},[101,40604,31357],{"class":111},[101,40606,30381],{"class":107},[101,40608,31362],{"class":111},[101,40610,40611,40613,40615,40617],{"class":103,"line":1201},[101,40612,30726],{"class":107},[101,40614,31903],{"class":111},[101,40616,30381],{"class":107},[101,40618,40619],{"class":160}," VGG16\n",[101,40621,40622],{"class":103,"line":1207},[101,40623,2387],{"emptyLinePlaceholder":27},[101,40625,40626],{"class":103,"line":1298},[101,40627,2387],{"emptyLinePlaceholder":27},[101,40629,40630],{"class":103,"line":1304},[101,40631,33940],{"class":170},[101,40633,40634,40636,40638],{"class":103,"line":1316},[101,40635,31936],{"class":107},[101,40637,33947],{"class":1950},[101,40639,31942],{"class":111},[101,40641,40642,40644,40646,40648,40650,40652,40654],{"class":103,"line":1599},[101,40643,33954],{"class":111},[101,40645,157],{"class":107},[101,40647,31444],{"class":111},[101,40649,31447],{"class":5204},[101,40651,157],{"class":107},[101,40653,31452],{"class":216},[101,40655,31455],{"class":111},[101,40657,40658,40660,40662,40664],{"class":103,"line":1604},[101,40659,33971],{"class":5204},[101,40661,157],{"class":107},[101,40663,33976],{"class":160},[101,40665,31455],{"class":111},[101,40667,40668,40670,40672,40674,40676,40678,40680],{"class":103,"line":1610},[101,40669,33983],{"class":5204},[101,40671,157],{"class":107},[101,40673,31482],{"class":111},[101,40675,31485],{"class":5204},[101,40677,157],{"class":107},[101,40679,31490],{"class":160},[101,40681,31493],{"class":111},[101,40683,40684,40686,40688,40690],{"class":103,"line":1615},[101,40685,34000],{"class":5204},[101,40687,157],{"class":107},[101,40689,31465],{"class":160},[101,40691,118],{"class":111},[101,40693,40694,40696,40698,40700,40702,40704],{"class":103,"line":1629},[101,40695,34011],{"class":111},[101,40697,157],{"class":107},[101,40699,31523],{"class":111},[101,40701,31526],{"class":5204},[101,40703,157],{"class":107},[101,40705,34022],{"class":111},[101,40707,40708],{"class":103,"line":1634},[101,40709,34027],{"class":170},[101,40711,40712,40714,40716,40718],{"class":103,"line":1640},[101,40713,34032],{"class":5204},[101,40715,157],{"class":107},[101,40717,329],{"class":160},[101,40719,31455],{"class":111},[101,40721,40722,40724,40726,40728],{"class":103,"line":1661},[101,40723,34043],{"class":5204},[101,40725,157],{"class":107},[101,40727,31465],{"class":160},[101,40729,31455],{"class":111},[101,40731,40732,40734,40736,40738],{"class":103,"line":1666},[101,40733,34054],{"class":5204},[101,40735,157],{"class":107},[101,40737,303],{"class":160},[101,40739,118],{"class":111},[101,40741,40742,40744],{"class":103,"line":1680},[101,40743,4077],{"class":107},[101,40745,34067],{"class":111},[101,40747,40748],{"class":103,"line":1685},[101,40749,2387],{"emptyLinePlaceholder":27},[101,40751,40752],{"class":103,"line":1714},[101,40753,34076],{"class":170},[101,40755,40756,40758,40760],{"class":103,"line":1719},[101,40757,31936],{"class":107},[101,40759,34083],{"class":1950},[101,40761,34086],{"class":111},[101,40763,40764],{"class":103,"line":1736},[101,40765,34091],{"class":170},[101,40767,40768,40770,40772,40774,40776,40778,40780],{"class":103,"line":1741},[101,40769,31226],{"class":111},[101,40771,157],{"class":107},[101,40773,31233],{"class":216},[101,40775,1691],{"class":107},[101,40777,31238],{"class":111},[101,40779,1688],{"class":107},[101,40781,34108],{"class":216},[101,40783,40784,40786,40788],{"class":103,"line":1746},[101,40785,31278],{"class":111},[101,40787,157],{"class":107},[101,40789,32278],{"class":111},[101,40791,40792],{"class":103,"line":1751},[101,40793,2387],{"emptyLinePlaceholder":27},[101,40795,40796],{"class":103,"line":1765},[101,40797,34125],{"class":170},[101,40799,40800,40802,40804],{"class":103,"line":1770},[101,40801,34130],{"class":111},[101,40803,157],{"class":107},[101,40805,32331],{"class":160},[101,40807,40808,40810,40812],{"class":103,"line":2564},[101,40809,34139],{"class":111},[101,40811,157],{"class":107},[101,40813,3072],{"class":160},[101,40815,40816],{"class":103,"line":2578},[101,40817,2387],{"emptyLinePlaceholder":27},[101,40819,40820],{"class":103,"line":2586},[101,40821,34152],{"class":170},[101,40823,40824],{"class":103,"line":2591},[101,40825,34157],{"class":170},[101,40827,40828],{"class":103,"line":2597},[101,40829,34162],{"class":170},[101,40831,40832,40834],{"class":103,"line":2603},[101,40833,34167],{"class":107},[101,40835,32873],{"class":111},[101,40837,40838],{"class":103,"line":2608},[101,40839,34174],{"class":170},[101,40841,40842,40844,40846,40848],{"class":103,"line":7936},[101,40843,3390],{"class":107},[101,40845,34181],{"class":111},[101,40847,26032],{"class":107},[101,40849,34186],{"class":111},[101,40851,40852,40854,40856],{"class":103,"line":7960},[101,40853,34191],{"class":111},[101,40855,157],{"class":107},[101,40857,34196],{"class":111},[101,40859,40860,40862,40864],{"class":103,"line":7965},[101,40861,34201],{"class":111},[101,40863,157],{"class":107},[101,40865,34206],{"class":111},[101,40867,40868],{"class":103,"line":7971},[101,40869,34211],{"class":170},[101,40871,40872],{"class":103,"line":7998},[101,40873,32864],{"class":111},[101,40875,40876],{"class":103,"line":8003},[101,40877,34220],{"class":170},[101,40879,40880,40882,40884],{"class":103,"line":8009},[101,40881,32649],{"class":111},[101,40883,157],{"class":107},[101,40885,34229],{"class":111},[101,40887,40888],{"class":103,"line":8021},[101,40889,34234],{"class":170},[101,40891,40892,40894,40896,40898,40900,40902,40904],{"class":103,"line":8033},[101,40893,32666],{"class":111},[101,40895,157],{"class":107},[101,40897,32671],{"class":111},[101,40899,32674],{"class":5204},[101,40901,157],{"class":107},[101,40903,329],{"class":160},[101,40905,118],{"class":111},[101,40907,40908],{"class":103,"line":8045},[101,40909,34255],{"class":170},[101,40911,40912],{"class":103,"line":9704},[101,40913,34260],{"class":170},[101,40915,40916],{"class":103,"line":9729},[101,40917,34265],{"class":170},[101,40919,40920,40922,40924,40926,40928],{"class":103,"line":9752},[101,40921,34270],{"class":111},[101,40923,9465],{"class":107},[101,40925,32776],{"class":111},[101,40927,2936],{"class":107},[101,40929,34279],{"class":111},[101,40931,40932],{"class":103,"line":9776},[101,40933,34284],{"class":170},[101,40935,40936,40938,40940,40942,40944],{"class":103,"line":9781},[101,40937,34289],{"class":111},[101,40939,9465],{"class":107},[101,40941,34294],{"class":111},[101,40943,303],{"class":160},[101,40945,118],{"class":111},[101,40947,40948],{"class":103,"line":9786},[101,40949,2387],{"emptyLinePlaceholder":27},[101,40951,40952],{"class":103,"line":9791},[101,40953,34307],{"class":170},[101,40955,40956,40958,40960,40962,40964],{"class":103,"line":9800},[101,40957,34312],{"class":111},[101,40959,157],{"class":107},[101,40961,34317],{"class":111},[101,40963,695],{"class":107},[101,40965,34322],{"class":111},[101,40967,40968],{"class":103,"line":9805},[101,40969,34327],{"class":170},[101,40971,40972,40974,40976,40978],{"class":103,"line":9811},[101,40973,32440],{"class":160},[101,40975,112],{"class":111},[101,40977,34336],{"class":216},[101,40979,34339],{"class":111},[101,40981,40982],{"class":103,"line":9832},[101,40983,2387],{"emptyLinePlaceholder":27},[101,40985,40986],{"class":103,"line":9838},[101,40987,34348],{"class":170},[101,40989,40990,40992,40994,40996,40998],{"class":103,"line":9852},[101,40991,1518],{"class":107},[101,40993,31209],{"class":160},[101,40995,2936],{"class":107},[101,40997,31214],{"class":216},[101,40999,3726],{"class":111},[101,41001,41002],{"class":103,"line":9858},[101,41003,34365],{"class":170},[101,41005,41006,41008,41010],{"class":103,"line":9885},[101,41007,31278],{"class":111},[101,41009,157],{"class":107},[101,41011,41012],{"class":111},"VGG16()\n",[101,41014,41015],{"class":103,"line":9894},[101,41016,34378],{"class":170},[101,41018,41019],{"class":103,"line":9900},[101,41020,34383],{"class":170},[101,41022,41023,41025,41027],{"class":103,"line":9908},[101,41024,34388],{"class":111},[101,41026,34391],{"class":216},[101,41028,30486],{"class":111},[101,41030,41031],{"class":103,"line":9913},[101,41032,34398],{"class":170},[101,41034,41035,41037,41039],{"class":103,"line":16592},[101,41036,34011],{"class":111},[101,41038,157],{"class":107},[101,41040,34407],{"class":111},[101,41042,41043],{"class":103,"line":16598},[101,41044,34412],{"class":170},[101,41046,41047],{"class":103,"line":16621},[101,41048,34417],{"class":111},[101,41050,41051],{"class":103,"line":16627},[101,41052,2387],{"emptyLinePlaceholder":27},[101,41054,41055],{"class":103,"line":16650},[101,41056,34426],{"class":170},[101,41058,41059],{"class":103,"line":16664},[101,41060,34431],{"class":170},[101,41062,41063,41065,41067,41069,41071,41073,41075],{"class":103,"line":16684},[101,41064,31226],{"class":111},[101,41066,157],{"class":107},[101,41068,31233],{"class":216},[101,41070,1691],{"class":107},[101,41072,31238],{"class":111},[101,41074,1688],{"class":107},[101,41076,34108],{"class":216},[101,41078,41079,41081,41083],{"class":103,"line":16690},[101,41080,31278],{"class":111},[101,41082,157],{"class":107},[101,41084,32278],{"class":111},[101,41086,41087],{"class":103,"line":16701},[101,41088,34460],{"class":170},[101,41090,41091],{"class":103,"line":16724},[101,41092,34465],{"class":170},[101,41094,41095,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131,41133,41135,41137,41139],{"class":103,"line":16746},[101,41096,34470],{"class":111},[101,41098,157],{"class":107},[101,41100,1001],{"class":111},[101,41102,34477],{"class":216},[101,41104,489],{"class":111},[101,41106,34482],{"class":216},[101,41108,489],{"class":111},[101,41110,34487],{"class":216},[101,41112,489],{"class":111},[101,41114,34492],{"class":216},[101,41116,489],{"class":111},[101,41118,34497],{"class":216},[101,41120,489],{"class":111},[101,41122,34502],{"class":216},[101,41124,489],{"class":111},[101,41126,34507],{"class":216},[101,41128,489],{"class":111},[101,41130,34512],{"class":216},[101,41132,489],{"class":111},[101,41134,34517],{"class":216},[101,41136,489],{"class":111},[101,41138,34522],{"class":216},[101,41140,33235],{"class":111},[101,41142,41143,41145],{"class":103,"line":16751},[101,41144,34167],{"class":107},[101,41146,32873],{"class":111},[101,41148,41149],{"class":103,"line":16757},[101,41150,34535],{"class":170},[101,41152,41153,41155,41157,41159],{"class":103,"line":16771},[101,41154,3390],{"class":107},[101,41156,34542],{"class":111},[101,41158,26032],{"class":107},[101,41160,34186],{"class":111},[101,41162,41163,41165,41167],{"class":103,"line":16784},[101,41164,32599],{"class":111},[101,41166,157],{"class":107},[101,41168,32604],{"class":111},[101,41170,41171,41173,41175],{"class":103,"line":16789},[101,41172,32614],{"class":111},[101,41174,157],{"class":107},[101,41176,32619],{"class":111},[101,41178,41179],{"class":103,"line":16803},[101,41180,2387],{"emptyLinePlaceholder":27},[101,41182,41183],{"class":103,"line":16808},[101,41184,34571],{"class":170},[101,41186,41187],{"class":103,"line":16814},[101,41188,32864],{"class":111},[101,41190,41191],{"class":103,"line":16819},[101,41192,34580],{"class":170},[101,41194,41195,41197,41199],{"class":103,"line":16833},[101,41196,32649],{"class":111},[101,41198,157],{"class":107},[101,41200,32654],{"class":111},[101,41202,41203],{"class":103,"line":16838},[101,41204,34593],{"class":170},[101,41206,41207,41209,41211,41213,41215,41217,41219],{"class":103,"line":16843},[101,41208,32666],{"class":111},[101,41210,157],{"class":107},[101,41212,32671],{"class":111},[101,41214,32674],{"class":5204},[101,41216,157],{"class":107},[101,41218,329],{"class":160},[101,41220,118],{"class":111},[101,41222,41223],{"class":103,"line":16857},[101,41224,34614],{"class":170},[101,41226,41227,41229,41231],{"class":103,"line":16869},[101,41228,34619],{"class":111},[101,41230,157],{"class":107},[101,41232,34624],{"class":111},[101,41234,41235,41237,41239],{"class":103,"line":16874},[101,41236,34629],{"class":111},[101,41238,157],{"class":107},[101,41240,34634],{"class":111},[101,41242,41243,41245,41247,41249,41251,41253,41255,41257],{"class":103,"line":16887},[101,41244,34639],{"class":160},[101,41246,112],{"class":111},[101,41248,34644],{"class":216},[101,41250,34647],{"class":111},[101,41252,34650],{"class":216},[101,41254,489],{"class":111},[101,41256,34655],{"class":216},[101,41258,34658],{"class":111},[72,41260,41262],{"id":41261},"_23googlenet","2.3.GoogLeNet",[21986,41264,41266],{"id":41265},"_231原理","2.3.1.原理",[55,41268,41269],{},[58,41270,41271],{},"网络结构",[10,41273,41274],{},[1449,41275],{"alt":20,"src":41276},"\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",[10,41278,41279],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[10,41281,41282],{},[1449,41283],{"alt":20,"src":41284},"\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",[10,41286,41287],{},[1449,41288],{"alt":20,"src":41289},"\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",[10,41291,41292],{},[1449,41293],{"alt":20,"src":41294},"\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",[55,41296,41297],{"start":21},[58,41298,41299],{},"1x1卷积的优点",[10,41301,41302],{},[1449,41303],{"alt":20,"src":41304},"\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",[55,41306,41307],{"start":1166},[58,41308,41309],{},"全局平均池化层优点",[10,41311,41312],{},[1449,41313],{"alt":20,"src":41314},"\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",[10,41316,41317],{},[1449,41318],{"alt":20,"src":41319},"\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",[55,41321,41322],{"start":1181},[58,41323,41324],{},"参数详细描述",[10,41326,41327],{},[1449,41328],{"alt":20,"src":41329},"\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",[10,41331,41332],{},[1449,41333],{"alt":20,"src":41334},"\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",[10,41336,41337],{},[1449,41338],{"alt":20,"src":41339},"\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",[10,41341,41342],{},[1449,41343],{"alt":20,"src":41344},"\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",[10,41346,41347],{},[1449,41348],{"alt":20,"src":41349},"\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",[10,41351,41352],{},[1449,41353],{"alt":20,"src":41354},"\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",[10,41356,41357],{},[1449,41358],{"alt":20,"src":41359},"\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",[10,41361,41362],{},[1449,41363],{"alt":20,"src":41364},"\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",[10,41366,41367],{},[1449,41368],{"alt":20,"src":41369},"\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",[10,41371,41372],{},[1449,41373],{"alt":20,"src":41374},"\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",[10,41376,41377],{},[1449,41378],{"alt":20,"src":41379},"\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",[10,41381,41382],{},[1449,41383],{"alt":20,"src":41384},"\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",[10,41386,41387],{},[1449,41388],{"alt":20,"src":41389},"\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",[10,41391,41392],{},[1449,41393],{"alt":20,"src":41394},"\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",[10,41396,41397],{},[1449,41398],{"alt":20,"src":41399},"\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",[10,41401,41402],{},[1449,41403],{"alt":20,"src":41404},"\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",[10,41406,41407],{},[1449,41408],{"alt":20,"src":41409},"\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",[10,41411,41412],{},[1449,41413],{"alt":20,"src":41414},"\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",[10,41416,41417],{},[1449,41418],{"alt":20,"src":41419},"\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",[10,41421,41422],{},[1449,41423],{"alt":20,"src":41424},"\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",[10,41426,41427],{},[1449,41428],{"alt":20,"src":41429},"\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",[21986,41431,41433],{"id":41432},"_232代码实现","2.3.2.代码实现",[55,41435,41436],{},[58,41437,30700],{},[10,41439,41440],{},"根据原理一步一步搭建即可",[92,41442,41444],{"className":30367,"code":41443,"language":30369,"meta":20,"style":20},"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",[98,41445,41446,41452,41462,41472,41476,41493,41502,41517,41527,41532,41565,41570,41607,41654,41659,41695,41742,41747,41752,41787,41819,41823,41831,41847,41871,41896,41917,41922,41937,41941,41945,41950,41967,41972,41981,41996,42007,42051,42055,42083,42087,42098,42126,42130,42167,42171,42199,42203,42214,42250,42282,42310,42314,42325,42359,42391,42423,42456,42490,42518,42522,42533,42566,42598,42612,42616,42629,42633,42638,42650,42658,42680,42685,42690,42695,42700,42705,42710,42724,42732,42741,42754,42769,42778,42782,42790,42801,42812,42823,42834,42845,42851,42855,42860,42872,42892,42901],{"__ignoreMap":20},[101,41447,41448,41450],{"class":103,"line":104},[101,41449,30381],{"class":107},[101,41451,30384],{"class":111},[101,41453,41454,41456,41458,41460],{"class":103,"line":21},[101,41455,30726],{"class":107},[101,41457,30729],{"class":111},[101,41459,30381],{"class":107},[101,41461,30734],{"class":111},[101,41463,41464,41466,41468,41470],{"class":103,"line":1166},[101,41465,30726],{"class":107},[101,41467,30746],{"class":111},[101,41469,30381],{"class":107},[101,41471,30751],{"class":111},[101,41473,41474],{"class":103,"line":1181},[101,41475,2387],{"emptyLinePlaceholder":27},[101,41477,41478,41480,41483,41485,41487,41489,41491],{"class":103,"line":1187},[101,41479,14682],{"class":107},[101,41481,41482],{"class":1950}," Inception",[101,41484,112],{"class":111},[101,41486,30767],{"class":1950},[101,41488,669],{"class":111},[101,41490,30772],{"class":1950},[101,41492,30775],{"class":111},[101,41494,41495,41497,41499],{"class":103,"line":1201},[101,41496,30790],{"class":107},[101,41498,30793],{"class":160},[101,41500,41501],{"class":111},"(self,in_channels,c1,c2,c3,c4):\n",[101,41503,41504,41506,41509,41511,41513,41515],{"class":103,"line":1207},[101,41505,30806],{"class":160},[101,41507,41508],{"class":111},"(Inception,",[101,41510,30812],{"class":160},[101,41512,30815],{"class":111},[101,41514,30818],{"class":160},[101,41516,1963],{"class":111},[101,41518,41519,41521,41523,41525],{"class":103,"line":1298},[101,41520,30834],{"class":160},[101,41522,34760],{"class":111},[101,41524,157],{"class":107},[101,41526,34765],{"class":111},[101,41528,41529],{"class":103,"line":1304},[101,41530,41531],{"class":170},"        # 路线1：定义1*1卷积\n",[101,41533,41534,41536,41539,41541,41543,41545,41547,41550,41552,41554,41557,41559,41561,41563],{"class":103,"line":1316},[101,41535,30834],{"class":160},[101,41537,41538],{"class":111},".p1_1",[101,41540,157],{"class":107},[101,41542,30842],{"class":111},[101,41544,30845],{"class":5204},[101,41546,157],{"class":107},[101,41548,41549],{"class":111},"in_channels,",[101,41551,30854],{"class":5204},[101,41553,157],{"class":107},[101,41555,41556],{"class":111},"c1,",[101,41558,30863],{"class":5204},[101,41560,157],{"class":107},[101,41562,329],{"class":160},[101,41564,118],{"class":111},[101,41566,41567],{"class":103,"line":1599},[101,41568,41569],{"class":170},"        # 路线2：定义1*1卷积和3*3\n",[101,41571,41572,41574,41577,41579,41581,41583,41585,41587,41589,41591,41594,41596,41599,41601,41603,41605],{"class":103,"line":1604},[101,41573,30834],{"class":160},[101,41575,41576],{"class":111},".p2_1",[101,41578,157],{"class":107},[101,41580,30842],{"class":111},[101,41582,30845],{"class":5204},[101,41584,157],{"class":107},[101,41586,41549],{"class":111},[101,41588,30854],{"class":5204},[101,41590,157],{"class":107},[101,41592,41593],{"class":111},"c2[",[101,41595,303],{"class":160},[101,41597,41598],{"class":111},"],",[101,41600,30863],{"class":5204},[101,41602,157],{"class":107},[101,41604,329],{"class":160},[101,41606,118],{"class":111},[101,41608,41609,41611,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644,41646,41648,41650,41652],{"class":103,"line":1610},[101,41610,30834],{"class":160},[101,41612,41613],{"class":111},".p2_2",[101,41615,157],{"class":107},[101,41617,30842],{"class":111},[101,41619,30845],{"class":5204},[101,41621,157],{"class":107},[101,41623,41593],{"class":111},[101,41625,303],{"class":160},[101,41627,41598],{"class":111},[101,41629,30854],{"class":5204},[101,41631,157],{"class":107},[101,41633,41593],{"class":111},[101,41635,329],{"class":160},[101,41637,41598],{"class":111},[101,41639,30863],{"class":5204},[101,41641,157],{"class":107},[101,41643,183],{"class":160},[101,41645,489],{"class":111},[101,41647,30872],{"class":5204},[101,41649,157],{"class":107},[101,41651,329],{"class":160},[101,41653,118],{"class":111},[101,41655,41656],{"class":103,"line":1615},[101,41657,41658],{"class":170},"        # 路线3：定义1*1卷积和5*5\n",[101,41660,41661,41663,41666,41668,41670,41672,41674,41676,41678,41680,41683,41685,41687,41689,41691,41693],{"class":103,"line":1629},[101,41662,30834],{"class":160},[101,41664,41665],{"class":111},".p3_1",[101,41667,157],{"class":107},[101,41669,30842],{"class":111},[101,41671,30845],{"class":5204},[101,41673,157],{"class":107},[101,41675,41549],{"class":111},[101,41677,30854],{"class":5204},[101,41679,157],{"class":107},[101,41681,41682],{"class":111},"c3[",[101,41684,303],{"class":160},[101,41686,41598],{"class":111},[101,41688,30863],{"class":5204},[101,41690,157],{"class":107},[101,41692,329],{"class":160},[101,41694,118],{"class":111},[101,41696,41697,41699,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734,41736,41738,41740],{"class":103,"line":1634},[101,41698,30834],{"class":160},[101,41700,41701],{"class":111},".p3_2",[101,41703,157],{"class":107},[101,41705,30842],{"class":111},[101,41707,30845],{"class":5204},[101,41709,157],{"class":107},[101,41711,41682],{"class":111},[101,41713,303],{"class":160},[101,41715,41598],{"class":111},[101,41717,30854],{"class":5204},[101,41719,157],{"class":107},[101,41721,41682],{"class":111},[101,41723,329],{"class":160},[101,41725,41598],{"class":111},[101,41727,30863],{"class":5204},[101,41729,157],{"class":107},[101,41731,430],{"class":160},[101,41733,489],{"class":111},[101,41735,30872],{"class":5204},[101,41737,157],{"class":107},[101,41739,189],{"class":160},[101,41741,118],{"class":111},[101,41743,41744],{"class":103,"line":1640},[101,41745,41746],{"class":170},"        # 路线4：定义3*3最大池化和1*1卷积\n",[101,41748,41749],{"class":103,"line":1661},[101,41750,41751],{"class":170},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[101,41753,41754,41756,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777,41779,41781,41783,41785],{"class":103,"line":1666},[101,41755,30834],{"class":160},[101,41757,41758],{"class":111},".p4_1",[101,41760,157],{"class":107},[101,41762,34818],{"class":111},[101,41764,30863],{"class":5204},[101,41766,157],{"class":107},[101,41768,183],{"class":160},[101,41770,489],{"class":111},[101,41772,30918],{"class":5204},[101,41774,157],{"class":107},[101,41776,329],{"class":160},[101,41778,489],{"class":111},[101,41780,30872],{"class":5204},[101,41782,157],{"class":107},[101,41784,329],{"class":160},[101,41786,118],{"class":111},[101,41788,41789,41791,41794,41796,41798,41800,41802,41804,41806,41808,41811,41813,41815,41817],{"class":103,"line":1680},[101,41790,30834],{"class":160},[101,41792,41793],{"class":111},".p4_2",[101,41795,157],{"class":107},[101,41797,30842],{"class":111},[101,41799,30845],{"class":5204},[101,41801,157],{"class":107},[101,41803,41549],{"class":111},[101,41805,30854],{"class":5204},[101,41807,157],{"class":107},[101,41809,41810],{"class":111},"c4,",[101,41812,30863],{"class":5204},[101,41814,157],{"class":107},[101,41816,329],{"class":160},[101,41818,118],{"class":111},[101,41820,41821],{"class":103,"line":1685},[101,41822,2387],{"emptyLinePlaceholder":27},[101,41824,41825,41827,41829],{"class":103,"line":1714},[101,41826,30790],{"class":107},[101,41828,31082],{"class":1950},[101,41830,31085],{"class":111},[101,41832,41833,41836,41838,41840,41842,41844],{"class":103,"line":1719},[101,41834,41835],{"class":111},"        p1",[101,41837,157],{"class":107},[101,41839,30812],{"class":160},[101,41841,35173],{"class":111},[101,41843,30812],{"class":160},[101,41845,41846],{"class":111},".p1_1(x))\n",[101,41848,41849,41851,41853,41855,41857,41859,41862,41864,41866,41868],{"class":103,"line":1736},[101,41850,7073],{"class":111},[101,41852,157],{"class":107},[101,41854,30812],{"class":160},[101,41856,35173],{"class":111},[101,41858,30812],{"class":160},[101,41860,41861],{"class":111},".p2_2(",[101,41863,30812],{"class":160},[101,41865,35173],{"class":111},[101,41867,30812],{"class":160},[101,41869,41870],{"class":111},".p2_1(x))))\n",[101,41872,41873,41876,41878,41880,41882,41884,41887,41889,41891,41893],{"class":103,"line":1741},[101,41874,41875],{"class":111},"        p3",[101,41877,157],{"class":107},[101,41879,30812],{"class":160},[101,41881,35173],{"class":111},[101,41883,30812],{"class":160},[101,41885,41886],{"class":111},".p3_2(",[101,41888,30812],{"class":160},[101,41890,35173],{"class":111},[101,41892,30812],{"class":160},[101,41894,41895],{"class":111},".p3_1(x))))\n",[101,41897,41898,41901,41903,41905,41907,41909,41912,41914],{"class":103,"line":1746},[101,41899,41900],{"class":111},"        p4",[101,41902,157],{"class":107},[101,41904,30812],{"class":160},[101,41906,35173],{"class":111},[101,41908,30812],{"class":160},[101,41910,41911],{"class":111},".p4_2(",[101,41913,30812],{"class":160},[101,41915,41916],{"class":111},".p4_1(x)))\n",[101,41918,41919],{"class":103,"line":1751},[101,41920,41921],{"class":170},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[101,41923,41924,41926,41929,41931,41933,41935],{"class":103,"line":1765},[101,41925,14740],{"class":107},[101,41927,41928],{"class":111}," torch.cat((p1,p2,p3,p4),",[101,41930,32674],{"class":5204},[101,41932,157],{"class":107},[101,41934,329],{"class":160},[101,41936,118],{"class":111},[101,41938,41939],{"class":103,"line":1770},[101,41940,2387],{"emptyLinePlaceholder":27},[101,41942,41943],{"class":103,"line":2564},[101,41944,2387],{"emptyLinePlaceholder":27},[101,41946,41947],{"class":103,"line":2578},[101,41948,41949],{"class":170},"# 搭建GoogLeNet网络\n",[101,41951,41952,41954,41957,41959,41961,41963,41965],{"class":103,"line":2586},[101,41953,14682],{"class":107},[101,41955,41956],{"class":1950}," GoogLeNet",[101,41958,112],{"class":111},[101,41960,30767],{"class":1950},[101,41962,669],{"class":111},[101,41964,30772],{"class":1950},[101,41966,30775],{"class":111},[101,41968,41969],{"class":103,"line":2591},[101,41970,41971],{"class":170},"    # 必须把Inception导入到里边\n",[101,41973,41974,41976,41978],{"class":103,"line":2597},[101,41975,30790],{"class":107},[101,41977,30793],{"class":160},[101,41979,41980],{"class":111},"(self,Inception):\n",[101,41982,41983,41985,41988,41990,41992,41994],{"class":103,"line":2603},[101,41984,30806],{"class":160},[101,41986,41987],{"class":111},"(GoogLeNet,",[101,41989,30812],{"class":160},[101,41991,30815],{"class":111},[101,41993,30818],{"class":160},[101,41995,1963],{"class":111},[101,41997,41998,42000,42003,42005],{"class":103,"line":2608},[101,41999,30834],{"class":160},[101,42001,42002],{"class":111},".b1",[101,42004,157],{"class":107},[101,42006,37998],{"class":111},[101,42008,42009,42011,42013,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039,42041,42043,42045,42047,42049],{"class":103,"line":7936},[101,42010,38003],{"class":111},[101,42012,30845],{"class":5204},[101,42014,157],{"class":107},[101,42016,329],{"class":160},[101,42018,489],{"class":111},[101,42020,30854],{"class":5204},[101,42022,157],{"class":107},[101,42024,315],{"class":160},[101,42026,489],{"class":111},[101,42028,30863],{"class":5204},[101,42030,157],{"class":107},[101,42032,480],{"class":160},[101,42034,489],{"class":111},[101,42036,30918],{"class":5204},[101,42038,157],{"class":107},[101,42040,189],{"class":160},[101,42042,489],{"class":111},[101,42044,30872],{"class":5204},[101,42046,157],{"class":107},[101,42048,183],{"class":160},[101,42050,38036],{"class":111},[101,42052,42053],{"class":103,"line":7960},[101,42054,38041],{"class":111},[101,42056,42057,42059,42061,42063,42065,42067,42069,42071,42073,42075,42077,42079,42081],{"class":103,"line":7965},[101,42058,38086],{"class":111},[101,42060,30863],{"class":5204},[101,42062,157],{"class":107},[101,42064,183],{"class":160},[101,42066,489],{"class":111},[101,42068,30918],{"class":5204},[101,42070,157],{"class":107},[101,42072,189],{"class":160},[101,42074,489],{"class":111},[101,42076,30872],{"class":5204},[101,42078,157],{"class":107},[101,42080,329],{"class":160},[101,42082,118],{"class":111},[101,42084,42085],{"class":103,"line":7971},[101,42086,38115],{"class":111},[101,42088,42089,42091,42094,42096],{"class":103,"line":7998},[101,42090,30834],{"class":160},[101,42092,42093],{"class":111},".b2",[101,42095,157],{"class":107},[101,42097,37998],{"class":111},[101,42099,42100,42102,42104,42106,42108,42110,42112,42114,42116,42118,42120,42122,42124],{"class":103,"line":8003},[101,42101,38003],{"class":111},[101,42103,30845],{"class":5204},[101,42105,157],{"class":107},[101,42107,315],{"class":160},[101,42109,489],{"class":111},[101,42111,30854],{"class":5204},[101,42113,157],{"class":107},[101,42115,315],{"class":160},[101,42117,489],{"class":111},[101,42119,30863],{"class":5204},[101,42121,157],{"class":107},[101,42123,329],{"class":160},[101,42125,38036],{"class":111},[101,42127,42128],{"class":103,"line":8009},[101,42129,38041],{"class":111},[101,42131,42132,42134,42136,42138,42140,42142,42144,42146,42149,42151,42153,42155,42157,42159,42161,42163,42165],{"class":103,"line":8021},[101,42133,38003],{"class":111},[101,42135,30845],{"class":5204},[101,42137,157],{"class":107},[101,42139,315],{"class":160},[101,42141,489],{"class":111},[101,42143,30854],{"class":5204},[101,42145,157],{"class":107},[101,42147,42148],{"class":160},"192",[101,42150,489],{"class":111},[101,42152,30863],{"class":5204},[101,42154,157],{"class":107},[101,42156,183],{"class":160},[101,42158,489],{"class":111},[101,42160,30872],{"class":5204},[101,42162,157],{"class":107},[101,42164,329],{"class":160},[101,42166,38036],{"class":111},[101,42168,42169],{"class":103,"line":8033},[101,42170,38041],{"class":111},[101,42172,42173,42175,42177,42179,42181,42183,42185,42187,42189,42191,42193,42195,42197],{"class":103,"line":8045},[101,42174,38086],{"class":111},[101,42176,30863],{"class":5204},[101,42178,157],{"class":107},[101,42180,183],{"class":160},[101,42182,489],{"class":111},[101,42184,30918],{"class":5204},[101,42186,157],{"class":107},[101,42188,189],{"class":160},[101,42190,489],{"class":111},[101,42192,30872],{"class":5204},[101,42194,157],{"class":107},[101,42196,329],{"class":160},[101,42198,118],{"class":111},[101,42200,42201],{"class":103,"line":9704},[101,42202,38115],{"class":111},[101,42204,42205,42207,42210,42212],{"class":103,"line":9729},[101,42206,30834],{"class":160},[101,42208,42209],{"class":111},".b3",[101,42211,157],{"class":107},[101,42213,37998],{"class":111},[101,42215,42216,42219,42221,42223,42225,42228,42230,42232,42234,42237,42239,42241,42243,42246,42248],{"class":103,"line":9752},[101,42217,42218],{"class":111},"            Inception(",[101,42220,42148],{"class":160},[101,42222,489],{"class":111},[101,42224,315],{"class":160},[101,42226,42227],{"class":111},",(",[101,42229,321],{"class":160},[101,42231,489],{"class":111},[101,42233,32059],{"class":160},[101,42235,42236],{"class":111},"),(",[101,42238,712],{"class":160},[101,42240,489],{"class":111},[101,42242,309],{"class":160},[101,42244,42245],{"class":111},"),",[101,42247,309],{"class":160},[101,42249,38036],{"class":111},[101,42251,42252,42254,42256,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276,42278,42280],{"class":103,"line":9776},[101,42253,42218],{"class":111},[101,42255,34859],{"class":160},[101,42257,489],{"class":111},[101,42259,32059],{"class":160},[101,42261,42227],{"class":111},[101,42263,32059],{"class":160},[101,42265,489],{"class":111},[101,42267,42148],{"class":160},[101,42269,42236],{"class":111},[101,42271,309],{"class":160},[101,42273,489],{"class":111},[101,42275,321],{"class":160},[101,42277,42245],{"class":111},[101,42279,315],{"class":160},[101,42281,38036],{"class":111},[101,42283,42284,42286,42288,42290,42292,42294,42296,42298,42300,42302,42304,42306,42308],{"class":103,"line":9781},[101,42285,38086],{"class":111},[101,42287,30863],{"class":5204},[101,42289,157],{"class":107},[101,42291,183],{"class":160},[101,42293,489],{"class":111},[101,42295,30918],{"class":5204},[101,42297,157],{"class":107},[101,42299,189],{"class":160},[101,42301,489],{"class":111},[101,42303,30872],{"class":5204},[101,42305,157],{"class":107},[101,42307,329],{"class":160},[101,42309,118],{"class":111},[101,42311,42312],{"class":103,"line":9786},[101,42313,38115],{"class":111},[101,42315,42316,42318,42321,42323],{"class":103,"line":9791},[101,42317,30834],{"class":160},[101,42319,42320],{"class":111},".b4",[101,42322,157],{"class":107},[101,42324,37998],{"class":111},[101,42326,42327,42329,42332,42334,42336,42338,42340,42342,42345,42347,42349,42351,42353,42355,42357],{"class":103,"line":9800},[101,42328,42218],{"class":111},[101,42330,42331],{"class":160},"480",[101,42333,489],{"class":111},[101,42335,42148],{"class":160},[101,42337,42227],{"class":111},[101,42339,321],{"class":160},[101,42341,489],{"class":111},[101,42343,42344],{"class":160},"208",[101,42346,42236],{"class":111},[101,42348,712],{"class":160},[101,42350,489],{"class":111},[101,42352,718],{"class":160},[101,42354,42245],{"class":111},[101,42356,315],{"class":160},[101,42358,38036],{"class":111},[101,42360,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385,42387,42389],{"class":103,"line":9805},[101,42362,42218],{"class":111},[101,42364,38446],{"class":160},[101,42366,489],{"class":111},[101,42368,21036],{"class":160},[101,42370,42227],{"class":111},[101,42372,729],{"class":160},[101,42374,489],{"class":111},[101,42376,31490],{"class":160},[101,42378,42236],{"class":111},[101,42380,911],{"class":160},[101,42382,489],{"class":111},[101,42384,315],{"class":160},[101,42386,42245],{"class":111},[101,42388,315],{"class":160},[101,42390,38036],{"class":111},[101,42392,42393,42395,42397,42399,42401,42403,42405,42407,42409,42411,42413,42415,42417,42419,42421],{"class":103,"line":9811},[101,42394,42218],{"class":111},[101,42396,38446],{"class":160},[101,42398,489],{"class":111},[101,42400,32059],{"class":160},[101,42402,42227],{"class":111},[101,42404,32059],{"class":160},[101,42406,489],{"class":111},[101,42408,34859],{"class":160},[101,42410,42236],{"class":111},[101,42412,911],{"class":160},[101,42414,489],{"class":111},[101,42416,315],{"class":160},[101,42418,42245],{"class":111},[101,42420,315],{"class":160},[101,42422,38036],{"class":111},[101,42424,42425,42427,42429,42431,42433,42435,42437,42439,42442,42444,42446,42448,42450,42452,42454],{"class":103,"line":9832},[101,42426,42218],{"class":111},[101,42428,38446],{"class":160},[101,42430,489],{"class":111},[101,42432,729],{"class":160},[101,42434,42227],{"class":111},[101,42436,32059],{"class":160},[101,42438,489],{"class":111},[101,42440,42441],{"class":160},"288",[101,42443,42236],{"class":111},[101,42445,309],{"class":160},[101,42447,489],{"class":111},[101,42449,315],{"class":160},[101,42451,42245],{"class":111},[101,42453,315],{"class":160},[101,42455,38036],{"class":111},[101,42457,42458,42460,42463,42465,42467,42469,42471,42473,42476,42478,42480,42482,42484,42486,42488],{"class":103,"line":9838},[101,42459,42218],{"class":111},[101,42461,42462],{"class":160},"528",[101,42464,489],{"class":111},[101,42466,34859],{"class":160},[101,42468,42227],{"class":111},[101,42470,21036],{"class":160},[101,42472,489],{"class":111},[101,42474,42475],{"class":160},"320",[101,42477,42236],{"class":111},[101,42479,309],{"class":160},[101,42481,489],{"class":111},[101,42483,32059],{"class":160},[101,42485,42245],{"class":111},[101,42487,32059],{"class":160},[101,42489,38036],{"class":111},[101,42491,42492,42494,42496,42498,42500,42502,42504,42506,42508,42510,42512,42514,42516],{"class":103,"line":9852},[101,42493,38086],{"class":111},[101,42495,30863],{"class":5204},[101,42497,157],{"class":107},[101,42499,183],{"class":160},[101,42501,489],{"class":111},[101,42503,30918],{"class":5204},[101,42505,157],{"class":107},[101,42507,189],{"class":160},[101,42509,489],{"class":111},[101,42511,30872],{"class":5204},[101,42513,157],{"class":107},[101,42515,329],{"class":160},[101,42517,118],{"class":111},[101,42519,42520],{"class":103,"line":9858},[101,42521,38115],{"class":111},[101,42523,42524,42526,42529,42531],{"class":103,"line":9885},[101,42525,30834],{"class":160},[101,42527,42528],{"class":111},".b5",[101,42530,157],{"class":107},[101,42532,37998],{"class":111},[101,42534,42535,42537,42540,42542,42544,42546,42548,42550,42552,42554,42556,42558,42560,42562,42564],{"class":103,"line":9894},[101,42536,42218],{"class":111},[101,42538,42539],{"class":160},"832",[101,42541,489],{"class":111},[101,42543,34859],{"class":160},[101,42545,42227],{"class":111},[101,42547,21036],{"class":160},[101,42549,489],{"class":111},[101,42551,42475],{"class":160},[101,42553,42236],{"class":111},[101,42555,309],{"class":160},[101,42557,489],{"class":111},[101,42559,32059],{"class":160},[101,42561,42245],{"class":111},[101,42563,32059],{"class":160},[101,42565,38036],{"class":111},[101,42567,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590,42592,42594,42596],{"class":103,"line":9900},[101,42569,42218],{"class":111},[101,42571,42539],{"class":160},[101,42573,489],{"class":111},[101,42575,34929],{"class":160},[101,42577,42227],{"class":111},[101,42579,42148],{"class":160},[101,42581,489],{"class":111},[101,42583,34929],{"class":160},[101,42585,42236],{"class":111},[101,42587,718],{"class":160},[101,42589,489],{"class":111},[101,42591,32059],{"class":160},[101,42593,42245],{"class":111},[101,42595,32059],{"class":160},[101,42597,38036],{"class":111},[101,42599,42600,42603,42605,42607,42609],{"class":103,"line":9908},[101,42601,42602],{"class":111},"            nn.AdaptiveAvgPool2d((",[101,42604,329],{"class":160},[101,42606,489],{"class":111},[101,42608,329],{"class":160},[101,42610,42611],{"class":111},")),\n",[101,42613,42614],{"class":103,"line":9913},[101,42615,38779],{"class":111},[101,42617,42618,42620,42623,42625,42627],{"class":103,"line":16592},[101,42619,38784],{"class":111},[101,42621,42622],{"class":160},"1024",[101,42624,489],{"class":111},[101,42626,557],{"class":160},[101,42628,118],{"class":111},[101,42630,42631],{"class":103,"line":16598},[101,42632,38115],{"class":111},[101,42634,42635],{"class":103,"line":16621},[101,42636,42637],{"class":170},"        # 对模型参数初始化\n",[101,42639,42640,42642,42644,42646,42648],{"class":103,"line":16627},[101,42641,3390],{"class":107},[101,42643,38857],{"class":111},[101,42645,26032],{"class":107},[101,42647,38862],{"class":160},[101,42649,38865],{"class":111},[101,42651,42652,42654,42656],{"class":103,"line":16650},[101,42653,4629],{"class":107},[101,42655,38877],{"class":160},[101,42657,38880],{"class":111},[101,42659,42660,42662,42665,42667,42670,42672,42674,42676,42678],{"class":103,"line":16664},[101,42661,38890],{"class":111},[101,42663,42664],{"class":5204},"mode",[101,42666,157],{"class":107},[101,42668,42669],{"class":216},"'fan_out'",[101,42671,489],{"class":111},[101,42673,38893],{"class":5204},[101,42675,157],{"class":107},[101,42677,38898],{"class":216},[101,42679,118],{"class":111},[101,42681,42682],{"class":103,"line":16684},[101,42683,42684],{"class":170},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[101,42686,42687],{"class":103,"line":16690},[101,42688,42689],{"class":170},"                # ② mode = 'fan_out'决定使用的fan值：\n",[101,42691,42692],{"class":103,"line":16701},[101,42693,42694],{"class":170},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[101,42696,42697],{"class":103,"line":16724},[101,42698,42699],{"class":170},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[101,42701,42702],{"class":103,"line":16746},[101,42703,42704],{"class":170},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[101,42706,42707],{"class":103,"line":16751},[101,42708,42709],{"class":170},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[101,42711,42712,42714,42716,42718,42720,42722],{"class":103,"line":16757},[101,42713,38910],{"class":107},[101,42715,38913],{"class":111},[101,42717,38916],{"class":107},[101,42719,38919],{"class":107},[101,42721,38922],{"class":160},[101,42723,3726],{"class":111},[101,42725,42726,42728,42730],{"class":103,"line":16771},[101,42727,38934],{"class":111},[101,42729,303],{"class":160},[101,42731,118],{"class":111},[101,42733,42734,42737,42739],{"class":103,"line":16784},[101,42735,42736],{"class":107},"                elif",[101,42738,38877],{"class":160},[101,42740,38953],{"class":111},[101,42742,42743,42746,42748,42750,42752],{"class":103,"line":16789},[101,42744,42745],{"class":111},"                    nn.init.normal_(m.weight,",[101,42747,303],{"class":160},[101,42749,489],{"class":111},[101,42751,38975],{"class":160},[101,42753,118],{"class":111},[101,42755,42756,42759,42761,42763,42765,42767],{"class":103,"line":16803},[101,42757,42758],{"class":107},"                    if",[101,42760,38913],{"class":111},[101,42762,38916],{"class":107},[101,42764,38919],{"class":107},[101,42766,38922],{"class":160},[101,42768,3726],{"class":111},[101,42770,42771,42774,42776],{"class":103,"line":16808},[101,42772,42773],{"class":111},"                        nn.init.constant_(m.bias,",[101,42775,303],{"class":160},[101,42777,118],{"class":111},[101,42779,42780],{"class":103,"line":16814},[101,42781,35154],{"class":170},[101,42783,42784,42786,42788],{"class":103,"line":16819},[101,42785,30790],{"class":107},[101,42787,31082],{"class":1950},[101,42789,31085],{"class":111},[101,42791,42792,42794,42796,42798],{"class":103,"line":16833},[101,42793,31090],{"class":111},[101,42795,157],{"class":107},[101,42797,30812],{"class":160},[101,42799,42800],{"class":111},".b1(x)\n",[101,42802,42803,42805,42807,42809],{"class":103,"line":16838},[101,42804,31090],{"class":111},[101,42806,157],{"class":107},[101,42808,30812],{"class":160},[101,42810,42811],{"class":111},".b2(x)\n",[101,42813,42814,42816,42818,42820],{"class":103,"line":16843},[101,42815,31090],{"class":111},[101,42817,157],{"class":107},[101,42819,30812],{"class":160},[101,42821,42822],{"class":111},".b3(x)\n",[101,42824,42825,42827,42829,42831],{"class":103,"line":16857},[101,42826,31090],{"class":111},[101,42828,157],{"class":107},[101,42830,30812],{"class":160},[101,42832,42833],{"class":111},".b4(x)\n",[101,42835,42836,42838,42840,42842],{"class":103,"line":16869},[101,42837,31090],{"class":111},[101,42839,157],{"class":107},[101,42841,30812],{"class":160},[101,42843,42844],{"class":111},".b5(x)\n",[101,42846,42847,42849],{"class":103,"line":16874},[101,42848,14740],{"class":107},[101,42850,31198],{"class":111},[101,42852,42853],{"class":103,"line":16887},[101,42854,2387],{"emptyLinePlaceholder":27},[101,42856,42857],{"class":103,"line":16892},[101,42858,42859],{"class":170},"# 模型展示\n",[101,42861,42862,42864,42866,42868,42870],{"class":103,"line":16897},[101,42863,1518],{"class":107},[101,42865,31209],{"class":160},[101,42867,2936],{"class":107},[101,42869,31214],{"class":216},[101,42871,3726],{"class":111},[101,42873,42874,42876,42878,42880,42882,42884,42886,42888,42890],{"class":103,"line":16902},[101,42875,31226],{"class":111},[101,42877,157],{"class":107},[101,42879,30440],{"class":111},[101,42881,31233],{"class":216},[101,42883,1691],{"class":107},[101,42885,31238],{"class":111},[101,42887,1688],{"class":107},[101,42889,30465],{"class":216},[101,42891,118],{"class":111},[101,42893,42894,42896,42898],{"class":103,"line":16915},[101,42895,31278],{"class":111},[101,42897,157],{"class":107},[101,42899,42900],{"class":111},"GoogLeNet(Inception).to(device)\n",[101,42902,42903,42905,42907,42909,42911,42913,42915,42917],{"class":103,"line":16920},[101,42904,31288],{"class":160},[101,42906,31291],{"class":111},[101,42908,329],{"class":160},[101,42910,489],{"class":111},[101,42912,31490],{"class":160},[101,42914,489],{"class":111},[101,42916,31490],{"class":160},[101,42918,31304],{"class":111},[55,42920,42921],{"start":21},[58,42922,39172],{},[92,42924,42926],{"className":30367,"code":42925,"language":30369,"meta":20,"style":20},"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",[98,42927,42928,42934,42940,42950,42956,42966,42976,42986,42996,43006,43010,43021,43031,43035,43039,43043,43051,43063,43073,43089,43099,43131,43145,43155,43165,43169,43179,43193,43203,43213,43223,43229,43233,43237,43241,43245,43249,43257,43277,43281,43285,43289,43293,43297,43313,43317,43321,43329,43333,43337,43345,43349,43353,43357,43365,43369,43373,43377,43381,43389,43393,43401,43405,43413,43417,43425,43429,43437,43441,43445,43453,43457,43461,43465,43477,43501,43515,43519,43523,43527,43535,43539,43547,43551,43559,43563,43571,43575,43583,43587,43595,43599,43611,43615,43623,43627,43635,43639,43643,43647,43651,43659,43663,43679,43683,43691,43695,43699,43703,43707,43711,43715,43719,43735,43739,43751,43755,43767,43771,43783,43787,43795,43799,43807,43811,43815,43819,43825,43829,43837,43841,43857,43861,43869,43873,43889,43901,43905,43917,43921,43925,43933,43937,43941,43949,43953,43961,43965,43973,43977,43981,44023,44065,44069,44073,44089,44093,44109,44113,44117,44125,44129,44133,44145,44183,44187,44191,44199,44203,44217,44227,44233,44239,44245,44251,44255,44259,44265,44269,44273,44281,44285,44303,44307,44311,44315,44331,44335,44339,44343,44347,44351,44371,44391,44395,44399,44403,44411,44419,44423,44439,44459,44479,44483,44487,44495,44503,44507,44511,44515,44527,44531,44541,44549,44566],{"__ignoreMap":20},[101,42929,42930,42932],{"class":103,"line":104},[101,42931,30381],{"class":107},[101,42933,31811],{"class":111},[101,42935,42936,42938],{"class":103,"line":21},[101,42937,30381],{"class":107},[101,42939,31818],{"class":111},[101,42941,42942,42944,42946,42948],{"class":103,"line":1166},[101,42943,30381],{"class":107},[101,42945,31829],{"class":111},[101,42947,31372],{"class":107},[101,42949,31834],{"class":111},[101,42951,42952,42954],{"class":103,"line":1181},[101,42953,30381],{"class":107},[101,42955,30384],{"class":111},[101,42957,42958,42960,42962,42964],{"class":103,"line":1187},[101,42959,30726],{"class":107},[101,42961,31404],{"class":111},[101,42963,30381],{"class":107},[101,42965,31851],{"class":111},[101,42967,42968,42970,42972,42974],{"class":103,"line":1201},[101,42969,30726],{"class":107},[101,42971,31357],{"class":111},[101,42973,30381],{"class":107},[101,42975,31362],{"class":111},[101,42977,42978,42980,42982,42984],{"class":103,"line":1207},[101,42979,30726],{"class":107},[101,42981,31387],{"class":111},[101,42983,30381],{"class":107},[101,42985,31392],{"class":111},[101,42987,42988,42990,42992,42994],{"class":103,"line":1298},[101,42989,30381],{"class":107},[101,42991,31404],{"class":111},[101,42993,31372],{"class":107},[101,42995,31409],{"class":111},[101,42997,42998,43000,43002,43004],{"class":103,"line":1304},[101,42999,30381],{"class":107},[101,43001,31421],{"class":111},[101,43003,31372],{"class":107},[101,43005,31426],{"class":111},[101,43007,43008],{"class":103,"line":1316},[101,43009,31896],{"class":170},[101,43011,43012,43014,43016,43018],{"class":103,"line":1599},[101,43013,30726],{"class":107},[101,43015,31903],{"class":111},[101,43017,30381],{"class":107},[101,43019,43020],{"class":111}," GoogLeNet, Inception\n",[101,43022,43023,43025,43027,43029],{"class":103,"line":1604},[101,43024,30726],{"class":107},[101,43026,30729],{"class":111},[101,43028,30381],{"class":107},[101,43030,30734],{"class":111},[101,43032,43033],{"class":103,"line":1610},[101,43034,2387],{"emptyLinePlaceholder":27},[101,43036,43037],{"class":103,"line":1615},[101,43038,2387],{"emptyLinePlaceholder":27},[101,43040,43041],{"class":103,"line":1629},[101,43042,31931],{"class":170},[101,43044,43045,43047,43049],{"class":103,"line":1634},[101,43046,31936],{"class":107},[101,43048,31939],{"class":1950},[101,43050,31942],{"class":111},[101,43052,43053,43055,43057,43059,43061],{"class":103,"line":1640},[101,43054,31947],{"class":111},[101,43056,157],{"class":107},[101,43058,31444],{"class":111},[101,43060,31452],{"class":216},[101,43062,31455],{"class":111},[101,43064,43065,43067,43069,43071],{"class":103,"line":1661},[101,43066,31960],{"class":5204},[101,43068,157],{"class":107},[101,43070,31465],{"class":160},[101,43072,31455],{"class":111},[101,43074,43075,43077,43079,43081,43083,43085,43087],{"class":103,"line":1666},[101,43076,31971],{"class":5204},[101,43078,157],{"class":107},[101,43080,31482],{"class":111},[101,43082,31485],{"class":5204},[101,43084,157],{"class":107},[101,43086,35438],{"class":160},[101,43088,31493],{"class":111},[101,43090,43091,43093,43095,43097],{"class":103,"line":1680},[101,43092,31988],{"class":5204},[101,43094,157],{"class":107},[101,43096,31465],{"class":160},[101,43098,118],{"class":111},[101,43100,43101,43103,43105,43107,43109,43111,43113,43115,43117,43119,43121,43123,43125,43127,43129],{"class":103,"line":1685},[101,43102,31999],{"class":111},[101,43104,157],{"class":107},[101,43106,32004],{"class":111},[101,43108,32007],{"class":160},[101,43110,112],{"class":111},[101,43112,32012],{"class":160},[101,43114,566],{"class":107},[101,43116,7346],{"class":160},[101,43118,32019],{"class":111},[101,43120,32007],{"class":160},[101,43122,112],{"class":111},[101,43124,32026],{"class":160},[101,43126,566],{"class":107},[101,43128,7346],{"class":160},[101,43130,32033],{"class":111},[101,43132,43133,43135,43137,43139,43141,43143],{"class":103,"line":1714},[101,43134,32038],{"class":111},[101,43136,157],{"class":107},[101,43138,32043],{"class":111},[101,43140,31526],{"class":5204},[101,43142,157],{"class":107},[101,43144,31531],{"class":111},[101,43146,43147,43149,43151,43153],{"class":103,"line":1719},[101,43148,32054],{"class":5204},[101,43150,157],{"class":107},[101,43152,309],{"class":160},[101,43154,31455],{"class":111},[101,43156,43157,43159,43161,43163],{"class":103,"line":1736},[101,43158,32066],{"class":5204},[101,43160,157],{"class":107},[101,43162,31465],{"class":160},[101,43164,31455],{"class":111},[101,43166,43167],{"class":103,"line":1741},[101,43168,32077],{"class":170},[101,43170,43171,43173,43175,43177],{"class":103,"line":1746},[101,43172,32082],{"class":5204},[101,43174,157],{"class":107},[101,43176,506],{"class":160},[101,43178,118],{"class":111},[101,43180,43181,43183,43185,43187,43189,43191],{"class":103,"line":1751},[101,43182,32093],{"class":111},[101,43184,157],{"class":107},[101,43186,31523],{"class":111},[101,43188,31526],{"class":5204},[101,43190,157],{"class":107},[101,43192,32104],{"class":111},[101,43194,43195,43197,43199,43201],{"class":103,"line":1765},[101,43196,32109],{"class":5204},[101,43198,157],{"class":107},[101,43200,309],{"class":160},[101,43202,31455],{"class":111},[101,43204,43205,43207,43209,43211],{"class":103,"line":1770},[101,43206,32120],{"class":5204},[101,43208,157],{"class":107},[101,43210,31465],{"class":160},[101,43212,31455],{"class":111},[101,43214,43215,43217,43219,43221],{"class":103,"line":2564},[101,43216,32131],{"class":5204},[101,43218,157],{"class":107},[101,43220,506],{"class":160},[101,43222,118],{"class":111},[101,43224,43225,43227],{"class":103,"line":2578},[101,43226,4077],{"class":107},[101,43228,32144],{"class":111},[101,43230,43231],{"class":103,"line":2586},[101,43232,2387],{"emptyLinePlaceholder":27},[101,43234,43235],{"class":103,"line":2591},[101,43236,32153],{"class":170},[101,43238,43239],{"class":103,"line":2597},[101,43240,32158],{"class":170},[101,43242,43243],{"class":103,"line":2603},[101,43244,2387],{"emptyLinePlaceholder":27},[101,43246,43247],{"class":103,"line":2608},[101,43248,32167],{"class":170},[101,43250,43251,43253,43255],{"class":103,"line":7936},[101,43252,31936],{"class":107},[101,43254,32174],{"class":1950},[101,43256,32177],{"class":111},[101,43258,43259,43261,43263,43265,43267,43269,43271,43273,43275],{"class":103,"line":7960},[101,43260,31226],{"class":111},[101,43262,157],{"class":107},[101,43264,30440],{"class":111},[101,43266,31233],{"class":216},[101,43268,1691],{"class":107},[101,43270,31238],{"class":111},[101,43272,1688],{"class":107},[101,43274,32196],{"class":216},[101,43276,118],{"class":111},[101,43278,43279],{"class":103,"line":7965},[101,43280,2387],{"emptyLinePlaceholder":27},[101,43282,43283],{"class":103,"line":7971},[101,43284,2387],{"emptyLinePlaceholder":27},[101,43286,43287],{"class":103,"line":7998},[101,43288,32211],{"class":170},[101,43290,43291],{"class":103,"line":8003},[101,43292,32216],{"class":170},[101,43294,43295],{"class":103,"line":8009},[101,43296,32221],{"class":170},[101,43298,43299,43301,43303,43305,43307,43309,43311],{"class":103,"line":8021},[101,43300,32226],{"class":111},[101,43302,157],{"class":107},[101,43304,32231],{"class":111},[101,43306,32234],{"class":5204},[101,43308,157],{"class":107},[101,43310,32239],{"class":160},[101,43312,118],{"class":111},[101,43314,43315],{"class":103,"line":8033},[101,43316,2387],{"emptyLinePlaceholder":27},[101,43318,43319],{"class":103,"line":8045},[101,43320,32250],{"class":170},[101,43322,43323,43325,43327],{"class":103,"line":9704},[101,43324,32255],{"class":111},[101,43326,157],{"class":107},[101,43328,32260],{"class":111},[101,43330,43331],{"class":103,"line":9729},[101,43332,2387],{"emptyLinePlaceholder":27},[101,43334,43335],{"class":103,"line":9752},[101,43336,32269],{"class":170},[101,43338,43339,43341,43343],{"class":103,"line":9776},[101,43340,31278],{"class":111},[101,43342,157],{"class":107},[101,43344,32278],{"class":111},[101,43346,43347],{"class":103,"line":9781},[101,43348,32283],{"class":170},[101,43350,43351],{"class":103,"line":9786},[101,43352,32288],{"class":170},[101,43354,43355],{"class":103,"line":9791},[101,43356,32293],{"class":170},[101,43358,43359,43361,43363],{"class":103,"line":9800},[101,43360,32298],{"class":111},[101,43362,157],{"class":107},[101,43364,32303],{"class":111},[101,43366,43367],{"class":103,"line":9805},[101,43368,2387],{"emptyLinePlaceholder":27},[101,43370,43371],{"class":103,"line":9811},[101,43372,2387],{"emptyLinePlaceholder":27},[101,43374,43375],{"class":103,"line":9832},[101,43376,32316],{"class":170},[101,43378,43379],{"class":103,"line":9838},[101,43380,32321],{"class":170},[101,43382,43383,43385,43387],{"class":103,"line":9852},[101,43384,32326],{"class":111},[101,43386,157],{"class":107},[101,43388,32331],{"class":160},[101,43390,43391],{"class":103,"line":9858},[101,43392,32336],{"class":170},[101,43394,43395,43397,43399],{"class":103,"line":9885},[101,43396,32341],{"class":111},[101,43398,157],{"class":107},[101,43400,32346],{"class":111},[101,43402,43403],{"class":103,"line":9894},[101,43404,32351],{"class":170},[101,43406,43407,43409,43411],{"class":103,"line":9900},[101,43408,32356],{"class":111},[101,43410,157],{"class":107},[101,43412,32346],{"class":111},[101,43414,43415],{"class":103,"line":9908},[101,43416,32365],{"class":170},[101,43418,43419,43421,43423],{"class":103,"line":9913},[101,43420,32370],{"class":111},[101,43422,157],{"class":107},[101,43424,32346],{"class":111},[101,43426,43427],{"class":103,"line":16592},[101,43428,32379],{"class":170},[101,43430,43431,43433,43435],{"class":103,"line":16598},[101,43432,32384],{"class":111},[101,43434,157],{"class":107},[101,43436,32346],{"class":111},[101,43438,43439],{"class":103,"line":16621},[101,43440,2387],{"emptyLinePlaceholder":27},[101,43442,43443],{"class":103,"line":16627},[101,43444,32397],{"class":170},[101,43446,43447,43449,43451],{"class":103,"line":16650},[101,43448,32402],{"class":111},[101,43450,157],{"class":107},[101,43452,32407],{"class":111},[101,43454,43455],{"class":103,"line":16664},[101,43456,2387],{"emptyLinePlaceholder":27},[101,43458,43459],{"class":103,"line":16684},[101,43460,2387],{"emptyLinePlaceholder":27},[101,43462,43463],{"class":103,"line":16690},[101,43464,32420],{"class":170},[101,43466,43467,43469,43471,43473,43475],{"class":103,"line":16701},[101,43468,3188],{"class":107},[101,43470,32427],{"class":111},[101,43472,26032],{"class":107},[101,43474,32432],{"class":160},[101,43476,32435],{"class":111},[101,43478,43479,43481,43483,43485,43487,43489,43491,43493,43495,43497,43499],{"class":103,"line":16724},[101,43480,32440],{"class":160},[101,43482,112],{"class":111},[101,43484,32445],{"class":216},[101,43486,32448],{"class":160},[101,43488,695],{"class":216},[101,43490,32448],{"class":160},[101,43492,362],{"class":216},[101,43494,32457],{"class":111},[101,43496,643],{"class":107},[101,43498,329],{"class":160},[101,43500,30486],{"class":111},[101,43502,43503,43505,43507,43509,43511,43513],{"class":103,"line":16746},[101,43504,32440],{"class":160},[101,43506,112],{"class":111},[101,43508,32472],{"class":216},[101,43510,566],{"class":107},[101,43512,557],{"class":160},[101,43514,118],{"class":111},[101,43516,43517],{"class":103,"line":16751},[101,43518,2387],{"emptyLinePlaceholder":27},[101,43520,43521],{"class":103,"line":16757},[101,43522,32487],{"class":170},[101,43524,43525],{"class":103,"line":16771},[101,43526,32492],{"class":170},[101,43528,43529,43531,43533],{"class":103,"line":16784},[101,43530,32497],{"class":111},[101,43532,157],{"class":107},[101,43534,32331],{"class":160},[101,43536,43537],{"class":103,"line":16789},[101,43538,32506],{"class":170},[101,43540,43541,43543,43545],{"class":103,"line":16803},[101,43542,32511],{"class":111},[101,43544,157],{"class":107},[101,43546,3072],{"class":160},[101,43548,43549],{"class":103,"line":16808},[101,43550,32520],{"class":170},[101,43552,43553,43555,43557],{"class":103,"line":16814},[101,43554,32525],{"class":111},[101,43556,157],{"class":107},[101,43558,32331],{"class":160},[101,43560,43561],{"class":103,"line":16819},[101,43562,32534],{"class":170},[101,43564,43565,43567,43569],{"class":103,"line":16833},[101,43566,32539],{"class":111},[101,43568,157],{"class":107},[101,43570,3072],{"class":160},[101,43572,43573],{"class":103,"line":16838},[101,43574,32548],{"class":170},[101,43576,43577,43579,43581],{"class":103,"line":16843},[101,43578,32553],{"class":111},[101,43580,157],{"class":107},[101,43582,3072],{"class":160},[101,43584,43585],{"class":103,"line":16857},[101,43586,32562],{"class":170},[101,43588,43589,43591,43593],{"class":103,"line":16869},[101,43590,32567],{"class":111},[101,43592,157],{"class":107},[101,43594,3072],{"class":160},[101,43596,43597],{"class":103,"line":16874},[101,43598,32576],{"class":170},[101,43600,43601,43603,43605,43607,43609],{"class":103,"line":16887},[101,43602,3390],{"class":107},[101,43604,31590],{"class":111},[101,43606,26032],{"class":107},[101,43608,31595],{"class":160},[101,43610,32589],{"class":111},[101,43612,43613],{"class":103,"line":16892},[101,43614,32594],{"class":170},[101,43616,43617,43619,43621],{"class":103,"line":16897},[101,43618,32599],{"class":111},[101,43620,157],{"class":107},[101,43622,32604],{"class":111},[101,43624,43625],{"class":103,"line":16902},[101,43626,32609],{"class":170},[101,43628,43629,43631,43633],{"class":103,"line":16915},[101,43630,32614],{"class":111},[101,43632,157],{"class":107},[101,43634,32619],{"class":111},[101,43636,43637],{"class":103,"line":16920},[101,43638,32625],{"class":170},[101,43640,43641],{"class":103,"line":32622},[101,43642,32631],{"class":111},[101,43644,43645],{"class":103,"line":32628},[101,43646,32637],{"class":170},[101,43648,43649],{"class":103,"line":32634},[101,43650,32643],{"class":170},[101,43652,43653,43655,43657],{"class":103,"line":32640},[101,43654,32649],{"class":111},[101,43656,157],{"class":107},[101,43658,32654],{"class":111},[101,43660,43661],{"class":103,"line":32646},[101,43662,32660],{"class":170},[101,43664,43665,43667,43669,43671,43673,43675,43677],{"class":103,"line":32657},[101,43666,32666],{"class":111},[101,43668,157],{"class":107},[101,43670,32671],{"class":111},[101,43672,32674],{"class":5204},[101,43674,157],{"class":107},[101,43676,329],{"class":160},[101,43678,118],{"class":111},[101,43680,43681],{"class":103,"line":32663},[101,43682,32686],{"class":170},[101,43684,43685,43687,43689],{"class":103,"line":32683},[101,43686,32692],{"class":111},[101,43688,157],{"class":107},[101,43690,32697],{"class":111},[101,43692,43693],{"class":103,"line":32689},[101,43694,32703],{"class":170},[101,43696,43697],{"class":103,"line":32700},[101,43698,32709],{"class":111},[101,43700,43701],{"class":103,"line":32706},[101,43702,32715],{"class":170},[101,43704,43705],{"class":103,"line":32712},[101,43706,32721],{"class":111},[101,43708,43709],{"class":103,"line":32718},[101,43710,32727],{"class":170},[101,43712,43713],{"class":103,"line":32724},[101,43714,32733],{"class":111},[101,43716,43717],{"class":103,"line":32730},[101,43718,32739],{"class":170},[101,43720,43721,43723,43725,43727,43729,43731,43733],{"class":103,"line":32736},[101,43722,32745],{"class":111},[101,43724,9465],{"class":107},[101,43726,32750],{"class":111},[101,43728,566],{"class":107},[101,43730,32755],{"class":111},[101,43732,303],{"class":160},[101,43734,118],{"class":111},[101,43736,43737],{"class":103,"line":32742},[101,43738,32765],{"class":170},[101,43740,43741,43743,43745,43747,43749],{"class":103,"line":32762},[101,43742,32771],{"class":111},[101,43744,9465],{"class":107},[101,43746,32776],{"class":111},[101,43748,2936],{"class":107},[101,43750,32781],{"class":111},[101,43752,43753],{"class":103,"line":32768},[101,43754,32787],{"class":170},[101,43756,43757,43759,43761,43763,43765],{"class":103,"line":32784},[101,43758,32793],{"class":111},[101,43760,9465],{"class":107},[101,43762,32755],{"class":111},[101,43764,303],{"class":160},[101,43766,118],{"class":111},[101,43768,43769],{"class":103,"line":32790},[101,43770,32807],{"class":170},[101,43772,43773,43775,43777,43779,43781],{"class":103,"line":32804},[101,43774,3390],{"class":107},[101,43776,32815],{"class":111},[101,43778,26032],{"class":107},[101,43780,31595],{"class":160},[101,43782,32822],{"class":111},[101,43784,43785],{"class":103,"line":32810},[101,43786,32828],{"class":170},[101,43788,43789,43791,43793],{"class":103,"line":32825},[101,43790,32599],{"class":111},[101,43792,157],{"class":107},[101,43794,32604],{"class":111},[101,43796,43797],{"class":103,"line":32831},[101,43798,32843],{"class":170},[101,43800,43801,43803,43805],{"class":103,"line":32840},[101,43802,32614],{"class":111},[101,43804,157],{"class":107},[101,43806,32619],{"class":111},[101,43808,43809],{"class":103,"line":32846},[101,43810,32858],{"class":170},[101,43812,43813],{"class":103,"line":32855},[101,43814,32864],{"class":111},[101,43816,43817],{"class":103,"line":32861},[101,43818,36345],{"class":170},[101,43820,43821,43823],{"class":103,"line":32867},[101,43822,32870],{"class":107},[101,43824,32873],{"class":111},[101,43826,43827],{"class":103,"line":32876},[101,43828,32879],{"class":170},[101,43830,43831,43833,43835],{"class":103,"line":32882},[101,43832,36360],{"class":111},[101,43834,157],{"class":107},[101,43836,32654],{"class":111},[101,43838,43839],{"class":103,"line":32893},[101,43840,32896],{"class":170},[101,43842,43843,43845,43847,43849,43851,43853,43855],{"class":103,"line":32899},[101,43844,36373],{"class":111},[101,43846,157],{"class":107},[101,43848,32671],{"class":111},[101,43850,32674],{"class":5204},[101,43852,157],{"class":107},[101,43854,329],{"class":160},[101,43856,118],{"class":111},[101,43858,43859],{"class":103,"line":32918},[101,43860,32921],{"class":170},[101,43862,43863,43865,43867],{"class":103,"line":32924},[101,43864,36394],{"class":111},[101,43866,157],{"class":107},[101,43868,32697],{"class":111},[101,43870,43871],{"class":103,"line":32935},[101,43872,32938],{"class":170},[101,43874,43875,43877,43879,43881,43883,43885,43887],{"class":103,"line":32941},[101,43876,36407],{"class":111},[101,43878,9465],{"class":107},[101,43880,36412],{"class":111},[101,43882,566],{"class":107},[101,43884,32755],{"class":111},[101,43886,303],{"class":160},[101,43888,118],{"class":111},[101,43890,43891,43893,43895,43897,43899],{"class":103,"line":32961},[101,43892,36425],{"class":111},[101,43894,9465],{"class":107},[101,43896,32776],{"class":111},[101,43898,2936],{"class":107},[101,43900,32781],{"class":111},[101,43902,43903],{"class":103,"line":32977},[101,43904,36438],{"class":170},[101,43906,43907,43909,43911,43913,43915],{"class":103,"line":32983},[101,43908,36443],{"class":111},[101,43910,9465],{"class":107},[101,43912,32755],{"class":111},[101,43914,303],{"class":160},[101,43916,118],{"class":111},[101,43918,43919],{"class":103,"line":32997},[101,43920,33000],{"class":170},[101,43922,43923],{"class":103,"line":33003},[101,43924,33006],{"class":170},[101,43926,43927,43929,43931],{"class":103,"line":33009},[101,43928,33012],{"class":111},[101,43930,695],{"class":107},[101,43932,33017],{"class":111},[101,43934,43935],{"class":103,"line":33020},[101,43936,33023],{"class":170},[101,43938,43939],{"class":103,"line":33026},[101,43940,33029],{"class":170},[101,43942,43943,43945,43947],{"class":103,"line":33032},[101,43944,33035],{"class":111},[101,43946,695],{"class":107},[101,43948,33017],{"class":111},[101,43950,43951],{"class":103,"line":33042},[101,43952,33045],{"class":170},[101,43954,43955,43957,43959],{"class":103,"line":33048},[101,43956,33051],{"class":111},[101,43958,695],{"class":107},[101,43960,33056],{"class":111},[101,43962,43963],{"class":103,"line":33059},[101,43964,33062],{"class":170},[101,43966,43967,43969,43971],{"class":103,"line":33065},[101,43968,33068],{"class":111},[101,43970,695],{"class":107},[101,43972,33056],{"class":111},[101,43974,43975],{"class":103,"line":33075},[101,43976,2387],{"emptyLinePlaceholder":27},[101,43978,43979],{"class":103,"line":33080},[101,43980,33083],{"class":170},[101,43982,43983,43985,43987,43989,43991,43993,43995,43997,43999,44001,44003,44005,44007,44009,44011,44013,44015,44017,44019,44021],{"class":103,"line":33086},[101,43984,32440],{"class":160},[101,43986,112],{"class":111},[101,43988,3579],{"class":216},[101,43990,32448],{"class":160},[101,43992,33097],{"class":216},[101,43994,1007],{"class":160},[101,43996,33102],{"class":107},[101,43998,1057],{"class":160},[101,44000,33107],{"class":216},[101,44002,1007],{"class":160},[101,44004,33102],{"class":107},[101,44006,1057],{"class":160},[101,44008,3579],{"class":216},[101,44010,33118],{"class":111},[101,44012,643],{"class":107},[101,44014,329],{"class":160},[101,44016,33125],{"class":111},[101,44018,643],{"class":107},[101,44020,329],{"class":160},[101,44022,33132],{"class":111},[101,44024,44025,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057,44059,44061,44063],{"class":103,"line":33135},[101,44026,32440],{"class":160},[101,44028,112],{"class":111},[101,44030,3579],{"class":216},[101,44032,32448],{"class":160},[101,44034,33146],{"class":216},[101,44036,1007],{"class":160},[101,44038,33102],{"class":107},[101,44040,1057],{"class":160},[101,44042,33155],{"class":216},[101,44044,1007],{"class":160},[101,44046,33102],{"class":107},[101,44048,1057],{"class":160},[101,44050,3579],{"class":216},[101,44052,33166],{"class":111},[101,44054,643],{"class":107},[101,44056,329],{"class":160},[101,44058,33173],{"class":111},[101,44060,643],{"class":107},[101,44062,329],{"class":160},[101,44064,33132],{"class":111},[101,44066,44067],{"class":103,"line":33182},[101,44068,2387],{"emptyLinePlaceholder":27},[101,44070,44071],{"class":103,"line":33187},[101,44072,33190],{"class":170},[101,44074,44075,44077,44079,44081,44083,44085,44087],{"class":103,"line":33193},[101,44076,2484],{"class":107},[101,44078,33198],{"class":111},[101,44080,643],{"class":107},[101,44082,329],{"class":160},[101,44084,1051],{"class":111},[101,44086,1071],{"class":107},[101,44088,33209],{"class":111},[101,44090,44091],{"class":103,"line":33212},[101,44092,33215],{"class":170},[101,44094,44095,44097,44099,44101,44103,44105,44107],{"class":103,"line":33218},[101,44096,33221],{"class":111},[101,44098,151],{"class":160},[101,44100,157],{"class":107},[101,44102,33228],{"class":111},[101,44104,643],{"class":107},[101,44106,329],{"class":160},[101,44108,33235],{"class":111},[101,44110,44111],{"class":103,"line":33238},[101,44112,33241],{"class":170},[101,44114,44115],{"class":103,"line":33244},[101,44116,33247],{"class":170},[101,44118,44119,44121,44123],{"class":103,"line":33250},[101,44120,33253],{"class":111},[101,44122,157],{"class":107},[101,44124,32303],{"class":111},[101,44126,44127],{"class":103,"line":33260},[101,44128,2387],{"emptyLinePlaceholder":27},[101,44130,44131],{"class":103,"line":33265},[101,44132,33268],{"class":170},[101,44134,44135,44137,44139,44141,44143],{"class":103,"line":33271},[101,44136,33274],{"class":111},[101,44138,157],{"class":107},[101,44140,33279],{"class":111},[101,44142,643],{"class":107},[101,44144,33284],{"class":111},[101,44146,44147,44149,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171,44173,44175,44177,44179,44181],{"class":103,"line":33287},[101,44148,32440],{"class":160},[101,44150,112],{"class":111},[101,44152,33294],{"class":216},[101,44154,1007],{"class":160},[101,44156,33299],{"class":107},[101,44158,1057],{"class":160},[101,44160,655],{"class":216},[101,44162,1007],{"class":160},[101,44164,33299],{"class":107},[101,44166,1057],{"class":160},[101,44168,33312],{"class":216},[101,44170,33315],{"class":111},[101,44172,33318],{"class":107},[101,44174,1018],{"class":160},[101,44176,33323],{"class":111},[101,44178,439],{"class":107},[101,44180,1018],{"class":160},[101,44182,30486],{"class":111},[101,44184,44185],{"class":103,"line":33332},[101,44186,36722],{"class":170},[101,44188,44189],{"class":103,"line":33338},[101,44190,36727],{"class":170},[101,44192,44193,44195,44197],{"class":103,"line":33344},[101,44194,36732],{"class":111},[101,44196,33356],{"class":216},[101,44198,118],{"class":111},[101,44200,44201],{"class":103,"line":33350},[101,44202,33376],{"class":170},[101,44204,44205,44207,44209,44211,44213,44215],{"class":103,"line":33361},[101,44206,33382],{"class":111},[101,44208,157],{"class":107},[101,44210,33387],{"class":111},[101,44212,33390],{"class":5204},[101,44214,157],{"class":107},[101,44216,1533],{"class":111},[101,44218,44219,44221,44223,44225],{"class":103,"line":33367},[101,44220,33400],{"class":216},[101,44222,970],{"class":111},[101,44224,33405],{"class":160},[101,44226,33408],{"class":111},[101,44228,44229,44231],{"class":103,"line":33373},[101,44230,33414],{"class":216},[101,44232,33417],{"class":111},[101,44234,44235,44237],{"class":103,"line":33379},[101,44236,33423],{"class":216},[101,44238,33426],{"class":111},[101,44240,44241,44243],{"class":103,"line":33397},[101,44242,33432],{"class":216},[101,44244,33435],{"class":111},[101,44246,44247,44249],{"class":103,"line":33411},[101,44248,33441],{"class":216},[101,44250,33444],{"class":111},[101,44252,44253],{"class":103,"line":33420},[101,44254,33450],{"class":111},[101,44256,44257],{"class":103,"line":33429},[101,44258,33456],{"class":170},[101,44260,44261,44263],{"class":103,"line":33438},[101,44262,4077],{"class":107},[101,44264,33464],{"class":111},[101,44266,44267],{"class":103,"line":33447},[101,44268,2387],{"emptyLinePlaceholder":27},[101,44270,44271],{"class":103,"line":33453},[101,44272,33475],{"class":170},[101,44274,44275,44277,44279],{"class":103,"line":33459},[101,44276,31936],{"class":107},[101,44278,33483],{"class":1950},[101,44280,33486],{"class":111},[101,44282,44283],{"class":103,"line":33467},[101,44284,33492],{"class":170},[101,44286,44287,44289,44291,44293,44295,44297,44299,44301],{"class":103,"line":33472},[101,44288,33498],{"class":111},[101,44290,31682],{"class":5204},[101,44292,157],{"class":107},[101,44294,112],{"class":111},[101,44296,609],{"class":160},[101,44298,489],{"class":111},[101,44300,404],{"class":160},[101,44302,30486],{"class":111},[101,44304,44305],{"class":103,"line":33478},[101,44306,33518],{"class":170},[101,44308,44309],{"class":103,"line":33489},[101,44310,33524],{"class":170},[101,44312,44313],{"class":103,"line":33495},[101,44314,33530],{"class":170},[101,44316,44317,44319,44321,44323,44325,44327,44329],{"class":103,"line":33515},[101,44318,31716],{"class":111},[101,44320,329],{"class":160},[101,44322,489],{"class":111},[101,44324,189],{"class":160},[101,44326,489],{"class":111},[101,44328,329],{"class":160},[101,44330,118],{"class":111},[101,44332,44333],{"class":103,"line":33521},[101,44334,33553],{"class":170},[101,44336,44337],{"class":103,"line":33527},[101,44338,33559],{"class":170},[101,44340,44341],{"class":103,"line":33533},[101,44342,33565],{"class":170},[101,44344,44345],{"class":103,"line":33550},[101,44346,33571],{"class":170},[101,44348,44349],{"class":103,"line":33556},[101,44350,33577],{"class":170},[101,44352,44353,44355,44357,44359,44361,44363,44365,44367,44369],{"class":103,"line":33562},[101,44354,33583],{"class":111},[101,44356,33586],{"class":216},[101,44358,33589],{"class":111},[101,44360,33592],{"class":216},[101,44362,489],{"class":111},[101,44364,33597],{"class":5204},[101,44366,157],{"class":107},[101,44368,33602],{"class":216},[101,44370,118],{"class":111},[101,44372,44373,44375,44377,44379,44381,44383,44385,44387,44389],{"class":103,"line":33568},[101,44374,33583],{"class":111},[101,44376,33586],{"class":216},[101,44378,33614],{"class":111},[101,44380,33617],{"class":216},[101,44382,489],{"class":111},[101,44384,33597],{"class":5204},[101,44386,157],{"class":107},[101,44388,33626],{"class":216},[101,44390,118],{"class":111},[101,44392,44393],{"class":103,"line":33574},[101,44394,33634],{"class":170},[101,44396,44397],{"class":103,"line":33580},[101,44398,33640],{"class":111},[101,44400,44401],{"class":103,"line":33607},[101,44402,33646],{"class":170},[101,44404,44405,44407,44409],{"class":103,"line":33631},[101,44406,33652],{"class":111},[101,44408,33655],{"class":216},[101,44410,118],{"class":111},[101,44412,44413,44415,44417],{"class":103,"line":33637},[101,44414,33663],{"class":111},[101,44416,33666],{"class":216},[101,44418,118],{"class":111},[101,44420,44421],{"class":103,"line":33643},[101,44422,33674],{"class":170},[101,44424,44425,44427,44429,44431,44433,44435,44437],{"class":103,"line":33649},[101,44426,31716],{"class":111},[101,44428,329],{"class":160},[101,44430,489],{"class":111},[101,44432,189],{"class":160},[101,44434,489],{"class":111},[101,44436,189],{"class":160},[101,44438,118],{"class":111},[101,44440,44441,44443,44445,44447,44449,44451,44453,44455,44457],{"class":103,"line":33660},[101,44442,33583],{"class":111},[101,44444,33586],{"class":216},[101,44446,33701],{"class":111},[101,44448,33592],{"class":216},[101,44450,489],{"class":111},[101,44452,33597],{"class":5204},[101,44454,157],{"class":107},[101,44456,33712],{"class":216},[101,44458,118],{"class":111},[101,44460,44461,44463,44465,44467,44469,44471,44473,44475,44477],{"class":103,"line":33671},[101,44462,33583],{"class":111},[101,44464,33586],{"class":216},[101,44466,33724],{"class":111},[101,44468,33617],{"class":216},[101,44470,489],{"class":111},[101,44472,33597],{"class":5204},[101,44474,157],{"class":107},[101,44476,33735],{"class":216},[101,44478,118],{"class":111},[101,44480,44481],{"class":103,"line":33677},[101,44482,33743],{"class":170},[101,44484,44485],{"class":103,"line":33694},[101,44486,33640],{"class":111},[101,44488,44489,44491,44493],{"class":103,"line":33717},[101,44490,33652],{"class":111},[101,44492,33586],{"class":216},[101,44494,118],{"class":111},[101,44496,44497,44499,44501],{"class":103,"line":33740},[101,44498,33663],{"class":111},[101,44500,33765],{"class":216},[101,44502,118],{"class":111},[101,44504,44505],{"class":103,"line":33746},[101,44506,33773],{"class":111},[101,44508,44509],{"class":103,"line":33751},[101,44510,2387],{"emptyLinePlaceholder":27},[101,44512,44513],{"class":103,"line":33760},[101,44514,33784],{"class":170},[101,44516,44517,44519,44521,44523,44525],{"class":103,"line":33770},[101,44518,1518],{"class":107},[101,44520,31209],{"class":160},[101,44522,2936],{"class":107},[101,44524,31214],{"class":216},[101,44526,3726],{"class":111},[101,44528,44529],{"class":103,"line":33776},[101,44530,33803],{"class":170},[101,44532,44533,44536,44538],{"class":103,"line":33781},[101,44534,44535],{"class":111},"    GoogLeNet",[101,44537,157],{"class":107},[101,44539,44540],{"class":111},"GoogLeNet(Inception)\n",[101,44542,44543,44545,44547],{"class":103,"line":33787},[101,44544,33820],{"class":111},[101,44546,157],{"class":107},[101,44548,33825],{"class":111},[101,44550,44551,44553,44555,44558,44560,44562,44564],{"class":103,"line":33800},[101,44552,33382],{"class":111},[101,44554,157],{"class":107},[101,44556,44557],{"class":111},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[101,44559,33838],{"class":5204},[101,44561,157],{"class":107},[101,44563,1062],{"class":160},[101,44565,118],{"class":111},[101,44567,44568],{"class":103,"line":33806},[101,44569,33850],{"class":111},[55,44571,44572],{"start":1166},[58,44573,40563],{},[92,44575,44577],{"className":30367,"code":44576,"language":30369,"meta":20,"style":20},"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",[98,44578,44579,44585,44595,44605,44609,44619,44630,44634,44638,44642,44650,44666,44676,44692,44702,44716,44720,44730,44740,44750,44756,44760,44764,44772,44776,44792,44800,44804,44808,44816,44824,44828,44832,44836,44840,44846,44850,44860,44868,44876,44880,44884,44888,44896,44900,44916,44920,44924,44928,44940,44944,44956,44960,44964,44976,44980,44990,44994,44998,45010,45014,45022,45026,45030,45038,45042,45050,45054,45058,45062,45066,45070,45086,45094,45098,45102,45150,45156,45160,45170,45178,45186,45190,45194,45198,45202,45210,45214,45230,45234,45242,45250],{"__ignoreMap":20},[101,44580,44581,44583],{"class":103,"line":104},[101,44582,30381],{"class":107},[101,44584,30384],{"class":111},[101,44586,44587,44589,44591,44593],{"class":103,"line":21},[101,44588,30381],{"class":107},[101,44590,31404],{"class":111},[101,44592,31372],{"class":107},[101,44594,31409],{"class":111},[101,44596,44597,44599,44601,44603],{"class":103,"line":1166},[101,44598,30726],{"class":107},[101,44600,31387],{"class":111},[101,44602,30381],{"class":107},[101,44604,31392],{"class":111},[101,44606,44607],{"class":103,"line":1181},[101,44608,33911],{"class":170},[101,44610,44611,44613,44615,44617],{"class":103,"line":1187},[101,44612,30726],{"class":107},[101,44614,31357],{"class":111},[101,44616,30381],{"class":107},[101,44618,31362],{"class":111},[101,44620,44621,44623,44625,44627],{"class":103,"line":1201},[101,44622,30726],{"class":107},[101,44624,31903],{"class":111},[101,44626,30381],{"class":107},[101,44628,44629],{"class":111}," GoogLeNet,Inception\n",[101,44631,44632],{"class":103,"line":1207},[101,44633,2387],{"emptyLinePlaceholder":27},[101,44635,44636],{"class":103,"line":1298},[101,44637,2387],{"emptyLinePlaceholder":27},[101,44639,44640],{"class":103,"line":1304},[101,44641,33940],{"class":170},[101,44643,44644,44646,44648],{"class":103,"line":1316},[101,44645,31936],{"class":107},[101,44647,33947],{"class":1950},[101,44649,31942],{"class":111},[101,44651,44652,44654,44656,44658,44660,44662,44664],{"class":103,"line":1599},[101,44653,33954],{"class":111},[101,44655,157],{"class":107},[101,44657,31444],{"class":111},[101,44659,31447],{"class":5204},[101,44661,157],{"class":107},[101,44663,31452],{"class":216},[101,44665,31455],{"class":111},[101,44667,44668,44670,44672,44674],{"class":103,"line":1604},[101,44669,33971],{"class":5204},[101,44671,157],{"class":107},[101,44673,33976],{"class":160},[101,44675,31455],{"class":111},[101,44677,44678,44680,44682,44684,44686,44688,44690],{"class":103,"line":1610},[101,44679,33983],{"class":5204},[101,44681,157],{"class":107},[101,44683,31482],{"class":111},[101,44685,31485],{"class":5204},[101,44687,157],{"class":107},[101,44689,35438],{"class":160},[101,44691,31493],{"class":111},[101,44693,44694,44696,44698,44700],{"class":103,"line":1615},[101,44695,34000],{"class":5204},[101,44697,157],{"class":107},[101,44699,31465],{"class":160},[101,44701,118],{"class":111},[101,44703,44704,44706,44708,44710,44712,44714],{"class":103,"line":1629},[101,44705,34011],{"class":111},[101,44707,157],{"class":107},[101,44709,31523],{"class":111},[101,44711,31526],{"class":5204},[101,44713,157],{"class":107},[101,44715,34022],{"class":111},[101,44717,44718],{"class":103,"line":1634},[101,44719,34027],{"class":170},[101,44721,44722,44724,44726,44728],{"class":103,"line":1640},[101,44723,34032],{"class":5204},[101,44725,157],{"class":107},[101,44727,329],{"class":160},[101,44729,31455],{"class":111},[101,44731,44732,44734,44736,44738],{"class":103,"line":1661},[101,44733,34043],{"class":5204},[101,44735,157],{"class":107},[101,44737,31465],{"class":160},[101,44739,31455],{"class":111},[101,44741,44742,44744,44746,44748],{"class":103,"line":1666},[101,44743,34054],{"class":5204},[101,44745,157],{"class":107},[101,44747,303],{"class":160},[101,44749,118],{"class":111},[101,44751,44752,44754],{"class":103,"line":1680},[101,44753,4077],{"class":107},[101,44755,34067],{"class":111},[101,44757,44758],{"class":103,"line":1685},[101,44759,2387],{"emptyLinePlaceholder":27},[101,44761,44762],{"class":103,"line":1714},[101,44763,34076],{"class":170},[101,44765,44766,44768,44770],{"class":103,"line":1719},[101,44767,31936],{"class":107},[101,44769,34083],{"class":1950},[101,44771,34086],{"class":111},[101,44773,44774],{"class":103,"line":1736},[101,44775,34091],{"class":170},[101,44777,44778,44780,44782,44784,44786,44788,44790],{"class":103,"line":1741},[101,44779,31226],{"class":111},[101,44781,157],{"class":107},[101,44783,31233],{"class":216},[101,44785,1691],{"class":107},[101,44787,31238],{"class":111},[101,44789,1688],{"class":107},[101,44791,34108],{"class":216},[101,44793,44794,44796,44798],{"class":103,"line":1746},[101,44795,31278],{"class":111},[101,44797,157],{"class":107},[101,44799,32278],{"class":111},[101,44801,44802],{"class":103,"line":1751},[101,44803,2387],{"emptyLinePlaceholder":27},[101,44805,44806],{"class":103,"line":1765},[101,44807,34125],{"class":170},[101,44809,44810,44812,44814],{"class":103,"line":1770},[101,44811,34130],{"class":111},[101,44813,157],{"class":107},[101,44815,32331],{"class":160},[101,44817,44818,44820,44822],{"class":103,"line":2564},[101,44819,34139],{"class":111},[101,44821,157],{"class":107},[101,44823,3072],{"class":160},[101,44825,44826],{"class":103,"line":2578},[101,44827,2387],{"emptyLinePlaceholder":27},[101,44829,44830],{"class":103,"line":2586},[101,44831,34152],{"class":170},[101,44833,44834],{"class":103,"line":2591},[101,44835,34157],{"class":170},[101,44837,44838],{"class":103,"line":2597},[101,44839,34162],{"class":170},[101,44841,44842,44844],{"class":103,"line":2603},[101,44843,34167],{"class":107},[101,44845,32873],{"class":111},[101,44847,44848],{"class":103,"line":2608},[101,44849,34174],{"class":170},[101,44851,44852,44854,44856,44858],{"class":103,"line":7936},[101,44853,3390],{"class":107},[101,44855,34181],{"class":111},[101,44857,26032],{"class":107},[101,44859,34186],{"class":111},[101,44861,44862,44864,44866],{"class":103,"line":7960},[101,44863,34191],{"class":111},[101,44865,157],{"class":107},[101,44867,34196],{"class":111},[101,44869,44870,44872,44874],{"class":103,"line":7965},[101,44871,34201],{"class":111},[101,44873,157],{"class":107},[101,44875,34206],{"class":111},[101,44877,44878],{"class":103,"line":7971},[101,44879,34211],{"class":170},[101,44881,44882],{"class":103,"line":7998},[101,44883,32864],{"class":111},[101,44885,44886],{"class":103,"line":8003},[101,44887,34220],{"class":170},[101,44889,44890,44892,44894],{"class":103,"line":8009},[101,44891,32649],{"class":111},[101,44893,157],{"class":107},[101,44895,34229],{"class":111},[101,44897,44898],{"class":103,"line":8021},[101,44899,34234],{"class":170},[101,44901,44902,44904,44906,44908,44910,44912,44914],{"class":103,"line":8033},[101,44903,32666],{"class":111},[101,44905,157],{"class":107},[101,44907,32671],{"class":111},[101,44909,32674],{"class":5204},[101,44911,157],{"class":107},[101,44913,329],{"class":160},[101,44915,118],{"class":111},[101,44917,44918],{"class":103,"line":8045},[101,44919,34255],{"class":170},[101,44921,44922],{"class":103,"line":9704},[101,44923,34260],{"class":170},[101,44925,44926],{"class":103,"line":9729},[101,44927,34265],{"class":170},[101,44929,44930,44932,44934,44936,44938],{"class":103,"line":9752},[101,44931,34270],{"class":111},[101,44933,9465],{"class":107},[101,44935,32776],{"class":111},[101,44937,2936],{"class":107},[101,44939,34279],{"class":111},[101,44941,44942],{"class":103,"line":9776},[101,44943,34284],{"class":170},[101,44945,44946,44948,44950,44952,44954],{"class":103,"line":9781},[101,44947,34289],{"class":111},[101,44949,9465],{"class":107},[101,44951,34294],{"class":111},[101,44953,303],{"class":160},[101,44955,118],{"class":111},[101,44957,44958],{"class":103,"line":9786},[101,44959,2387],{"emptyLinePlaceholder":27},[101,44961,44962],{"class":103,"line":9791},[101,44963,34307],{"class":170},[101,44965,44966,44968,44970,44972,44974],{"class":103,"line":9800},[101,44967,34312],{"class":111},[101,44969,157],{"class":107},[101,44971,34317],{"class":111},[101,44973,695],{"class":107},[101,44975,34322],{"class":111},[101,44977,44978],{"class":103,"line":9805},[101,44979,34327],{"class":170},[101,44981,44982,44984,44986,44988],{"class":103,"line":9811},[101,44983,32440],{"class":160},[101,44985,112],{"class":111},[101,44987,34336],{"class":216},[101,44989,34339],{"class":111},[101,44991,44992],{"class":103,"line":9832},[101,44993,2387],{"emptyLinePlaceholder":27},[101,44995,44996],{"class":103,"line":9838},[101,44997,34348],{"class":170},[101,44999,45000,45002,45004,45006,45008],{"class":103,"line":9852},[101,45001,1518],{"class":107},[101,45003,31209],{"class":160},[101,45005,2936],{"class":107},[101,45007,31214],{"class":216},[101,45009,3726],{"class":111},[101,45011,45012],{"class":103,"line":9858},[101,45013,34365],{"class":170},[101,45015,45016,45018,45020],{"class":103,"line":9885},[101,45017,31278],{"class":111},[101,45019,157],{"class":107},[101,45021,44540],{"class":111},[101,45023,45024],{"class":103,"line":9894},[101,45025,34378],{"class":170},[101,45027,45028],{"class":103,"line":9900},[101,45029,34383],{"class":170},[101,45031,45032,45034,45036],{"class":103,"line":9908},[101,45033,34388],{"class":111},[101,45035,34391],{"class":216},[101,45037,30486],{"class":111},[101,45039,45040],{"class":103,"line":9913},[101,45041,34398],{"class":170},[101,45043,45044,45046,45048],{"class":103,"line":16592},[101,45045,34011],{"class":111},[101,45047,157],{"class":107},[101,45049,34407],{"class":111},[101,45051,45052],{"class":103,"line":16598},[101,45053,34412],{"class":170},[101,45055,45056],{"class":103,"line":16621},[101,45057,34417],{"class":111},[101,45059,45060],{"class":103,"line":16627},[101,45061,2387],{"emptyLinePlaceholder":27},[101,45063,45064],{"class":103,"line":16650},[101,45065,34426],{"class":170},[101,45067,45068],{"class":103,"line":16664},[101,45069,34431],{"class":170},[101,45071,45072,45074,45076,45078,45080,45082,45084],{"class":103,"line":16684},[101,45073,31226],{"class":111},[101,45075,157],{"class":107},[101,45077,31233],{"class":216},[101,45079,1691],{"class":107},[101,45081,31238],{"class":111},[101,45083,1688],{"class":107},[101,45085,34108],{"class":216},[101,45087,45088,45090,45092],{"class":103,"line":16690},[101,45089,31278],{"class":111},[101,45091,157],{"class":107},[101,45093,32278],{"class":111},[101,45095,45096],{"class":103,"line":16701},[101,45097,34460],{"class":170},[101,45099,45100],{"class":103,"line":16724},[101,45101,34465],{"class":170},[101,45103,45104,45106,45108,45110,45112,45114,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140,45142,45144,45146,45148],{"class":103,"line":16746},[101,45105,34470],{"class":111},[101,45107,157],{"class":107},[101,45109,1001],{"class":111},[101,45111,34477],{"class":216},[101,45113,489],{"class":111},[101,45115,34482],{"class":216},[101,45117,489],{"class":111},[101,45119,34487],{"class":216},[101,45121,489],{"class":111},[101,45123,34492],{"class":216},[101,45125,489],{"class":111},[101,45127,34497],{"class":216},[101,45129,489],{"class":111},[101,45131,34502],{"class":216},[101,45133,489],{"class":111},[101,45135,34507],{"class":216},[101,45137,489],{"class":111},[101,45139,34512],{"class":216},[101,45141,489],{"class":111},[101,45143,34517],{"class":216},[101,45145,489],{"class":111},[101,45147,34522],{"class":216},[101,45149,33235],{"class":111},[101,45151,45152,45154],{"class":103,"line":16751},[101,45153,34167],{"class":107},[101,45155,32873],{"class":111},[101,45157,45158],{"class":103,"line":16757},[101,45159,34535],{"class":170},[101,45161,45162,45164,45166,45168],{"class":103,"line":16771},[101,45163,3390],{"class":107},[101,45165,34542],{"class":111},[101,45167,26032],{"class":107},[101,45169,34186],{"class":111},[101,45171,45172,45174,45176],{"class":103,"line":16784},[101,45173,32599],{"class":111},[101,45175,157],{"class":107},[101,45177,32604],{"class":111},[101,45179,45180,45182,45184],{"class":103,"line":16789},[101,45181,32614],{"class":111},[101,45183,157],{"class":107},[101,45185,32619],{"class":111},[101,45187,45188],{"class":103,"line":16803},[101,45189,2387],{"emptyLinePlaceholder":27},[101,45191,45192],{"class":103,"line":16808},[101,45193,34571],{"class":170},[101,45195,45196],{"class":103,"line":16814},[101,45197,32864],{"class":111},[101,45199,45200],{"class":103,"line":16819},[101,45201,34580],{"class":170},[101,45203,45204,45206,45208],{"class":103,"line":16833},[101,45205,32649],{"class":111},[101,45207,157],{"class":107},[101,45209,32654],{"class":111},[101,45211,45212],{"class":103,"line":16838},[101,45213,34593],{"class":170},[101,45215,45216,45218,45220,45222,45224,45226,45228],{"class":103,"line":16843},[101,45217,32666],{"class":111},[101,45219,157],{"class":107},[101,45221,32671],{"class":111},[101,45223,32674],{"class":5204},[101,45225,157],{"class":107},[101,45227,329],{"class":160},[101,45229,118],{"class":111},[101,45231,45232],{"class":103,"line":16857},[101,45233,34614],{"class":170},[101,45235,45236,45238,45240],{"class":103,"line":16869},[101,45237,34619],{"class":111},[101,45239,157],{"class":107},[101,45241,34624],{"class":111},[101,45243,45244,45246,45248],{"class":103,"line":16874},[101,45245,34629],{"class":111},[101,45247,157],{"class":107},[101,45249,34634],{"class":111},[101,45251,45252,45254,45256,45258,45260,45262,45264,45266],{"class":103,"line":16887},[101,45253,34639],{"class":160},[101,45255,112],{"class":111},[101,45257,34644],{"class":216},[101,45259,34647],{"class":111},[101,45261,34650],{"class":216},[101,45263,489],{"class":111},[101,45265,34655],{"class":216},[101,45267,34658],{"class":111},[72,45269,45271],{"id":45270},"_24训练自己的数据集","2.4.训练自己的数据集",[10,45273,45274],{},"猫狗分类任务",[10,45276,45277],{},"划分数据集和验证集",[92,45279,45281],{"className":30367,"code":45280,"language":30369,"meta":20,"style":20},"# 创建脚本，用于划分数据集和验证集\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",[98,45282,45283,45288,45295,45300,45311,45318,45322,45332,45346,45355,45359,45364,45374,45394,45398,45403,45413,45424,45437,45441,45446,45455,45465,45476,45480,45485,45495,45499,45504,45509,45514,45519,45524,45528,45538,45565,45578,45590,45617,45622,45627,45641,45646,45658,45673,45688,45696,45700,45705,45711,45723,45736,45741,45746,45751,45801,45807,45811],{"__ignoreMap":20},[101,45284,45285],{"class":103,"line":104},[101,45286,45287],{"class":170},"# 创建脚本，用于划分数据集和验证集\n",[101,45289,45290,45292],{"class":103,"line":21},[101,45291,30381],{"class":107},[101,45293,45294],{"class":111}," os\n",[101,45296,45297],{"class":103,"line":1166},[101,45298,45299],{"class":170},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[101,45301,45302,45304,45307,45309],{"class":103,"line":1181},[101,45303,30726],{"class":107},[101,45305,45306],{"class":111}," shutil ",[101,45308,30381],{"class":107},[101,45310,31811],{"class":111},[101,45312,45313,45315],{"class":103,"line":1187},[101,45314,30381],{"class":107},[101,45316,45317],{"class":111}," random\n",[101,45319,45320],{"class":103,"line":1201},[101,45321,2387],{"emptyLinePlaceholder":27},[101,45323,45324,45326,45329],{"class":103,"line":1207},[101,45325,31936],{"class":107},[101,45327,45328],{"class":1950}," mkfile",[101,45330,45331],{"class":111},"(file):\n",[101,45333,45334,45336,45338,45341,45344],{"class":103,"line":1298},[101,45335,3088],{"class":107},[101,45337,38919],{"class":107},[101,45339,45340],{"class":111}," os.path.exists(",[101,45342,45343],{"class":5204},"file",[101,45345,30775],{"class":111},[101,45347,45348,45351,45353],{"class":103,"line":1304},[101,45349,45350],{"class":111},"        os.makedirs(",[101,45352,45343],{"class":5204},[101,45354,118],{"class":111},[101,45356,45357],{"class":103,"line":1316},[101,45358,2387],{"emptyLinePlaceholder":27},[101,45360,45361],{"class":103,"line":1599},[101,45362,45363],{"class":170},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[101,45365,45366,45369,45371],{"class":103,"line":1604},[101,45367,45368],{"class":111},"file_path",[101,45370,157],{"class":107},[101,45372,45373],{"class":216},"'data_cat_dog'\n",[101,45375,45376,45379,45381,45384,45386,45389,45391],{"class":103,"line":1610},[101,45377,45378],{"class":111},"flower_class",[101,45380,157],{"class":107},[101,45382,45383],{"class":111},"[cla ",[101,45385,3012],{"class":107},[101,45387,45388],{"class":111}," cla ",[101,45390,26032],{"class":107},[101,45392,45393],{"class":111}," os.listdir(file_path)]\n",[101,45395,45396],{"class":103,"line":1615},[101,45397,2387],{"emptyLinePlaceholder":27},[101,45399,45400],{"class":103,"line":1629},[101,45401,45402],{"class":170},"# 创建训练集train文件夹\n",[101,45404,45405,45408,45411],{"class":103,"line":1634},[101,45406,45407],{"class":111},"mkfile(",[101,45409,45410],{"class":216},"'data\u002Ftrain'",[101,45412,118],{"class":111},[101,45414,45415,45417,45419,45421],{"class":103,"line":1640},[101,45416,3012],{"class":107},[101,45418,45388],{"class":111},[101,45420,26032],{"class":107},[101,45422,45423],{"class":111}," flower_class:\n",[101,45425,45426,45429,45432,45434],{"class":103,"line":1661},[101,45427,45428],{"class":111},"    mkfile(",[101,45430,45431],{"class":216},"'data\u002Ftrain\u002F'",[101,45433,592],{"class":107},[101,45435,45436],{"class":111},"cla)\n",[101,45438,45439],{"class":103,"line":1666},[101,45440,2387],{"emptyLinePlaceholder":27},[101,45442,45443],{"class":103,"line":1680},[101,45444,45445],{"class":170},"# 创建验证集val文件夹\n",[101,45447,45448,45450,45453],{"class":103,"line":1685},[101,45449,45407],{"class":111},[101,45451,45452],{"class":216},"'data\u002Ftest'",[101,45454,118],{"class":111},[101,45456,45457,45459,45461,45463],{"class":103,"line":1714},[101,45458,3012],{"class":107},[101,45460,45388],{"class":111},[101,45462,26032],{"class":107},[101,45464,45423],{"class":111},[101,45466,45467,45469,45472,45474],{"class":103,"line":1719},[101,45468,45428],{"class":111},[101,45470,45471],{"class":216},"'data\u002Ftest\u002F'",[101,45473,592],{"class":107},[101,45475,45436],{"class":111},[101,45477,45478],{"class":103,"line":1736},[101,45479,2387],{"emptyLinePlaceholder":27},[101,45481,45482],{"class":103,"line":1741},[101,45483,45484],{"class":170},"# 划分比例，训练集：测试集=9：1\n",[101,45486,45487,45490,45492],{"class":103,"line":1746},[101,45488,45489],{"class":111},"split_rate",[101,45491,157],{"class":107},[101,45493,45494],{"class":160},"0.1\n",[101,45496,45497],{"class":103,"line":1751},[101,45498,2387],{"emptyLinePlaceholder":27},[101,45500,45501],{"class":103,"line":1765},[101,45502,45503],{"class":170},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[101,45505,45506],{"class":103,"line":1770},[101,45507,45508],{"class":170},"# cla_path：当前类别的原始图片路径\n",[101,45510,45511],{"class":103,"line":2564},[101,45512,45513],{"class":170},"# images：当前类别下所有图片的文件名列表\n",[101,45515,45516],{"class":103,"line":2578},[101,45517,45518],{"class":170},"# num：该类别图片总数\n",[101,45520,45521],{"class":103,"line":2586},[101,45522,45523],{"class":170},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[101,45525,45526],{"class":103,"line":2591},[101,45527,2387],{"emptyLinePlaceholder":27},[101,45529,45530,45532,45534,45536],{"class":103,"line":2597},[101,45531,3012],{"class":107},[101,45533,45388],{"class":111},[101,45535,26032],{"class":107},[101,45537,45423],{"class":111},[101,45539,45540,45543,45545,45548,45550,45553,45556,45558,45560,45562],{"class":103,"line":2603},[101,45541,45542],{"class":111},"    cla_path ",[101,45544,157],{"class":107},[101,45546,45547],{"class":111}," file_path ",[101,45549,592],{"class":107},[101,45551,45552],{"class":216}," '\u002F'",[101,45554,45555],{"class":107}," +",[101,45557,45388],{"class":111},[101,45559,592],{"class":107},[101,45561,45552],{"class":216},[101,45563,45564],{"class":170},"  # 某一类别的子目录\n",[101,45566,45567,45570,45572,45575],{"class":103,"line":2608},[101,45568,45569],{"class":111},"    images ",[101,45571,157],{"class":107},[101,45573,45574],{"class":111}," os.listdir(cla_path)  ",[101,45576,45577],{"class":170},"# iamges 列表存储了该目录下所有图像的名称\n",[101,45579,45580,45583,45585,45587],{"class":103,"line":7936},[101,45581,45582],{"class":111},"    num ",[101,45584,157],{"class":107},[101,45586,7319],{"class":160},[101,45588,45589],{"class":111},"(images)\n",[101,45591,45592,45595,45597,45600,45602,45604,45606,45609,45611,45614],{"class":103,"line":7960},[101,45593,45594],{"class":111},"    eval_index ",[101,45596,157],{"class":107},[101,45598,45599],{"class":111}," random.sample(images, ",[101,45601,604],{"class":5204},[101,45603,157],{"class":107},[101,45605,115],{"class":160},[101,45607,45608],{"class":111},"(num ",[101,45610,566],{"class":107},[101,45612,45613],{"class":111}," split_rate))  ",[101,45615,45616],{"class":170},"# 从images列表中随机抽取 k 个图像名称\n",[101,45618,45619],{"class":103,"line":7965},[101,45620,45621],{"class":170},"    # 遍历该类别下的所有图片\n",[101,45623,45624],{"class":103,"line":7971},[101,45625,45626],{"class":170},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[101,45628,45629,45631,45634,45636,45638],{"class":103,"line":7998},[101,45630,3188],{"class":107},[101,45632,45633],{"class":111}," index, image ",[101,45635,26032],{"class":107},[101,45637,31595],{"class":160},[101,45639,45640],{"class":111},"(images):\n",[101,45642,45643],{"class":103,"line":8003},[101,45644,45645],{"class":170},"        # eval_index 中保存验证集val的图像名称\n",[101,45647,45648,45650,45653,45655],{"class":103,"line":8009},[101,45649,2484],{"class":107},[101,45651,45652],{"class":111}," image ",[101,45654,26032],{"class":107},[101,45656,45657],{"class":111}," eval_index:\n",[101,45659,45660,45663,45665,45668,45670],{"class":103,"line":8021},[101,45661,45662],{"class":111},"            image_path ",[101,45664,157],{"class":107},[101,45666,45667],{"class":111}," cla_path ",[101,45669,592],{"class":107},[101,45671,45672],{"class":111}," image\n",[101,45674,45675,45678,45680,45683,45685],{"class":103,"line":8033},[101,45676,45677],{"class":111},"            new_path ",[101,45679,157],{"class":107},[101,45681,45682],{"class":216}," 'data\u002Ftest\u002F'",[101,45684,45555],{"class":107},[101,45686,45687],{"class":111}," cla\n",[101,45689,45690,45693],{"class":103,"line":8045},[101,45691,45692],{"class":111},"            copy(image_path, new_path)  ",[101,45694,45695],{"class":170},"# 将选中的图像复制到新路径\n",[101,45697,45698],{"class":103,"line":9704},[101,45699,2387],{"emptyLinePlaceholder":27},[101,45701,45702],{"class":103,"line":9729},[101,45703,45704],{"class":170},"        # 其余的图像保存在训练集train中\n",[101,45706,45707,45709],{"class":103,"line":9752},[101,45708,2521],{"class":107},[101,45710,3726],{"class":111},[101,45712,45713,45715,45717,45719,45721],{"class":103,"line":9776},[101,45714,45662],{"class":111},[101,45716,157],{"class":107},[101,45718,45667],{"class":111},[101,45720,592],{"class":107},[101,45722,45672],{"class":111},[101,45724,45725,45727,45729,45732,45734],{"class":103,"line":9781},[101,45726,45677],{"class":111},[101,45728,157],{"class":107},[101,45730,45731],{"class":216}," 'data\u002Ftrain\u002F'",[101,45733,45555],{"class":107},[101,45735,45687],{"class":111},[101,45737,45738],{"class":103,"line":9786},[101,45739,45740],{"class":111},"            copy(image_path, new_path)\n",[101,45742,45743],{"class":103,"line":9791},[101,45744,45745],{"class":170},"            # 打印进度条信息\n",[101,45747,45748],{"class":103,"line":9800},[101,45749,45750],{"class":170},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[101,45752,45753,45755,45757,45759,45762,45764,45766,45769,45771,45773,45775,45778,45781,45783,45785,45788,45791,45793,45795,45798],{"class":103,"line":9805},[101,45754,32440],{"class":160},[101,45756,112],{"class":111},[101,45758,362],{"class":216},[101,45760,45761],{"class":160},"\\r",[101,45763,1001],{"class":216},[101,45765,32448],{"class":160},[101,45767,45768],{"class":216},"] processing [",[101,45770,32448],{"class":160},[101,45772,695],{"class":216},[101,45774,32448],{"class":160},[101,45776,45777],{"class":216},"]\"",[101,45779,45780],{"class":111},".format(cla, index ",[101,45782,592],{"class":107},[101,45784,25107],{"class":160},[101,45786,45787],{"class":111},", num), ",[101,45789,45790],{"class":5204},"end",[101,45792,157],{"class":107},[101,45794,7640],{"class":216},[101,45796,45797],{"class":111},")  ",[101,45799,45800],{"class":170},"# processing bar\n",[101,45802,45803,45805],{"class":103,"line":9811},[101,45804,31288],{"class":160},[101,45806,1963],{"class":111},[101,45808,45809],{"class":103,"line":9832},[101,45810,2387],{"emptyLinePlaceholder":27},[101,45812,45813,45815,45817,45820],{"class":103,"line":9838},[101,45814,30404],{"class":160},[101,45816,112],{"class":111},[101,45818,45819],{"class":216},"\"processing done!\"",[101,45821,118],{"class":111},[10,45823,45824],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21986,45826,45828],{"id":45827},"_242模型代码","2.4.2.模型代码",[10,45830,45831],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[92,45833,45835],{"className":30367,"code":45834,"language":30369,"meta":20,"style":20},"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",[98,45836,45837,45843,45853,45863,45867,45883,45891,45905,45915,45919,45949,45953,45987,46033,46037,46071,46117,46121,46125,46159,46189,46193,46201,46215,46237,46259,46277,46281,46295,46299,46303,46319,46323,46331,46345,46355,46399,46403,46431,46435,46445,46473,46477,46513,46517,46545,46549,46559,46591,46623,46651,46655,46665,46697,46729,46761,46793,46825,46853,46857,46867,46899,46931,46943,46947,46959,46963,46967,46979,46987,47007,47011,47015,47019,47023,47027,47031,47045,47053,47061,47073,47087,47095,47099,47107,47117,47127,47137,47147,47157,47163,47167,47171,47183,47203,47211],{"__ignoreMap":20},[101,45838,45839,45841],{"class":103,"line":104},[101,45840,30381],{"class":107},[101,45842,30384],{"class":111},[101,45844,45845,45847,45849,45851],{"class":103,"line":21},[101,45846,30726],{"class":107},[101,45848,30729],{"class":111},[101,45850,30381],{"class":107},[101,45852,30734],{"class":111},[101,45854,45855,45857,45859,45861],{"class":103,"line":1166},[101,45856,30726],{"class":107},[101,45858,30746],{"class":111},[101,45860,30381],{"class":107},[101,45862,30751],{"class":111},[101,45864,45865],{"class":103,"line":1181},[101,45866,2387],{"emptyLinePlaceholder":27},[101,45868,45869,45871,45873,45875,45877,45879,45881],{"class":103,"line":1187},[101,45870,14682],{"class":107},[101,45872,41482],{"class":1950},[101,45874,112],{"class":111},[101,45876,30767],{"class":1950},[101,45878,669],{"class":111},[101,45880,30772],{"class":1950},[101,45882,30775],{"class":111},[101,45884,45885,45887,45889],{"class":103,"line":1201},[101,45886,30790],{"class":107},[101,45888,30793],{"class":160},[101,45890,41501],{"class":111},[101,45892,45893,45895,45897,45899,45901,45903],{"class":103,"line":1207},[101,45894,30806],{"class":160},[101,45896,41508],{"class":111},[101,45898,30812],{"class":160},[101,45900,30815],{"class":111},[101,45902,30818],{"class":160},[101,45904,1963],{"class":111},[101,45906,45907,45909,45911,45913],{"class":103,"line":1298},[101,45908,30834],{"class":160},[101,45910,34760],{"class":111},[101,45912,157],{"class":107},[101,45914,34765],{"class":111},[101,45916,45917],{"class":103,"line":1304},[101,45918,41531],{"class":170},[101,45920,45921,45923,45925,45927,45929,45931,45933,45935,45937,45939,45941,45943,45945,45947],{"class":103,"line":1316},[101,45922,30834],{"class":160},[101,45924,41538],{"class":111},[101,45926,157],{"class":107},[101,45928,30842],{"class":111},[101,45930,30845],{"class":5204},[101,45932,157],{"class":107},[101,45934,41549],{"class":111},[101,45936,30854],{"class":5204},[101,45938,157],{"class":107},[101,45940,41556],{"class":111},[101,45942,30863],{"class":5204},[101,45944,157],{"class":107},[101,45946,329],{"class":160},[101,45948,118],{"class":111},[101,45950,45951],{"class":103,"line":1599},[101,45952,41569],{"class":170},[101,45954,45955,45957,45959,45961,45963,45965,45967,45969,45971,45973,45975,45977,45979,45981,45983,45985],{"class":103,"line":1604},[101,45956,30834],{"class":160},[101,45958,41576],{"class":111},[101,45960,157],{"class":107},[101,45962,30842],{"class":111},[101,45964,30845],{"class":5204},[101,45966,157],{"class":107},[101,45968,41549],{"class":111},[101,45970,30854],{"class":5204},[101,45972,157],{"class":107},[101,45974,41593],{"class":111},[101,45976,303],{"class":160},[101,45978,41598],{"class":111},[101,45980,30863],{"class":5204},[101,45982,157],{"class":107},[101,45984,329],{"class":160},[101,45986,118],{"class":111},[101,45988,45989,45991,45993,45995,45997,45999,46001,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021,46023,46025,46027,46029,46031],{"class":103,"line":1610},[101,45990,30834],{"class":160},[101,45992,41613],{"class":111},[101,45994,157],{"class":107},[101,45996,30842],{"class":111},[101,45998,30845],{"class":5204},[101,46000,157],{"class":107},[101,46002,41593],{"class":111},[101,46004,303],{"class":160},[101,46006,41598],{"class":111},[101,46008,30854],{"class":5204},[101,46010,157],{"class":107},[101,46012,41593],{"class":111},[101,46014,329],{"class":160},[101,46016,41598],{"class":111},[101,46018,30863],{"class":5204},[101,46020,157],{"class":107},[101,46022,183],{"class":160},[101,46024,489],{"class":111},[101,46026,30872],{"class":5204},[101,46028,157],{"class":107},[101,46030,329],{"class":160},[101,46032,118],{"class":111},[101,46034,46035],{"class":103,"line":1615},[101,46036,41658],{"class":170},[101,46038,46039,46041,46043,46045,46047,46049,46051,46053,46055,46057,46059,46061,46063,46065,46067,46069],{"class":103,"line":1629},[101,46040,30834],{"class":160},[101,46042,41665],{"class":111},[101,46044,157],{"class":107},[101,46046,30842],{"class":111},[101,46048,30845],{"class":5204},[101,46050,157],{"class":107},[101,46052,41549],{"class":111},[101,46054,30854],{"class":5204},[101,46056,157],{"class":107},[101,46058,41682],{"class":111},[101,46060,303],{"class":160},[101,46062,41598],{"class":111},[101,46064,30863],{"class":5204},[101,46066,157],{"class":107},[101,46068,329],{"class":160},[101,46070,118],{"class":111},[101,46072,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109,46111,46113,46115],{"class":103,"line":1634},[101,46074,30834],{"class":160},[101,46076,41701],{"class":111},[101,46078,157],{"class":107},[101,46080,30842],{"class":111},[101,46082,30845],{"class":5204},[101,46084,157],{"class":107},[101,46086,41682],{"class":111},[101,46088,303],{"class":160},[101,46090,41598],{"class":111},[101,46092,30854],{"class":5204},[101,46094,157],{"class":107},[101,46096,41682],{"class":111},[101,46098,329],{"class":160},[101,46100,41598],{"class":111},[101,46102,30863],{"class":5204},[101,46104,157],{"class":107},[101,46106,430],{"class":160},[101,46108,489],{"class":111},[101,46110,30872],{"class":5204},[101,46112,157],{"class":107},[101,46114,189],{"class":160},[101,46116,118],{"class":111},[101,46118,46119],{"class":103,"line":1640},[101,46120,41746],{"class":170},[101,46122,46123],{"class":103,"line":1661},[101,46124,41751],{"class":170},[101,46126,46127,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157],{"class":103,"line":1666},[101,46128,30834],{"class":160},[101,46130,41758],{"class":111},[101,46132,157],{"class":107},[101,46134,34818],{"class":111},[101,46136,30863],{"class":5204},[101,46138,157],{"class":107},[101,46140,183],{"class":160},[101,46142,489],{"class":111},[101,46144,30918],{"class":5204},[101,46146,157],{"class":107},[101,46148,329],{"class":160},[101,46150,489],{"class":111},[101,46152,30872],{"class":5204},[101,46154,157],{"class":107},[101,46156,329],{"class":160},[101,46158,118],{"class":111},[101,46160,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183,46185,46187],{"class":103,"line":1680},[101,46162,30834],{"class":160},[101,46164,41793],{"class":111},[101,46166,157],{"class":107},[101,46168,30842],{"class":111},[101,46170,30845],{"class":5204},[101,46172,157],{"class":107},[101,46174,41549],{"class":111},[101,46176,30854],{"class":5204},[101,46178,157],{"class":107},[101,46180,41810],{"class":111},[101,46182,30863],{"class":5204},[101,46184,157],{"class":107},[101,46186,329],{"class":160},[101,46188,118],{"class":111},[101,46190,46191],{"class":103,"line":1685},[101,46192,2387],{"emptyLinePlaceholder":27},[101,46194,46195,46197,46199],{"class":103,"line":1714},[101,46196,30790],{"class":107},[101,46198,31082],{"class":1950},[101,46200,31085],{"class":111},[101,46202,46203,46205,46207,46209,46211,46213],{"class":103,"line":1719},[101,46204,41835],{"class":111},[101,46206,157],{"class":107},[101,46208,30812],{"class":160},[101,46210,35173],{"class":111},[101,46212,30812],{"class":160},[101,46214,41846],{"class":111},[101,46216,46217,46219,46221,46223,46225,46227,46229,46231,46233,46235],{"class":103,"line":1736},[101,46218,7073],{"class":111},[101,46220,157],{"class":107},[101,46222,30812],{"class":160},[101,46224,35173],{"class":111},[101,46226,30812],{"class":160},[101,46228,41861],{"class":111},[101,46230,30812],{"class":160},[101,46232,35173],{"class":111},[101,46234,30812],{"class":160},[101,46236,41870],{"class":111},[101,46238,46239,46241,46243,46245,46247,46249,46251,46253,46255,46257],{"class":103,"line":1741},[101,46240,41875],{"class":111},[101,46242,157],{"class":107},[101,46244,30812],{"class":160},[101,46246,35173],{"class":111},[101,46248,30812],{"class":160},[101,46250,41886],{"class":111},[101,46252,30812],{"class":160},[101,46254,35173],{"class":111},[101,46256,30812],{"class":160},[101,46258,41895],{"class":111},[101,46260,46261,46263,46265,46267,46269,46271,46273,46275],{"class":103,"line":1746},[101,46262,41900],{"class":111},[101,46264,157],{"class":107},[101,46266,30812],{"class":160},[101,46268,35173],{"class":111},[101,46270,30812],{"class":160},[101,46272,41911],{"class":111},[101,46274,30812],{"class":160},[101,46276,41916],{"class":111},[101,46278,46279],{"class":103,"line":1751},[101,46280,41921],{"class":170},[101,46282,46283,46285,46287,46289,46291,46293],{"class":103,"line":1765},[101,46284,14740],{"class":107},[101,46286,41928],{"class":111},[101,46288,32674],{"class":5204},[101,46290,157],{"class":107},[101,46292,329],{"class":160},[101,46294,118],{"class":111},[101,46296,46297],{"class":103,"line":1770},[101,46298,2387],{"emptyLinePlaceholder":27},[101,46300,46301],{"class":103,"line":2564},[101,46302,41949],{"class":170},[101,46304,46305,46307,46309,46311,46313,46315,46317],{"class":103,"line":2578},[101,46306,14682],{"class":107},[101,46308,41956],{"class":1950},[101,46310,112],{"class":111},[101,46312,30767],{"class":1950},[101,46314,669],{"class":111},[101,46316,30772],{"class":1950},[101,46318,30775],{"class":111},[101,46320,46321],{"class":103,"line":2586},[101,46322,41971],{"class":170},[101,46324,46325,46327,46329],{"class":103,"line":2591},[101,46326,30790],{"class":107},[101,46328,30793],{"class":160},[101,46330,41980],{"class":111},[101,46332,46333,46335,46337,46339,46341,46343],{"class":103,"line":2597},[101,46334,30806],{"class":160},[101,46336,41987],{"class":111},[101,46338,30812],{"class":160},[101,46340,30815],{"class":111},[101,46342,30818],{"class":160},[101,46344,1963],{"class":111},[101,46346,46347,46349,46351,46353],{"class":103,"line":2603},[101,46348,30834],{"class":160},[101,46350,42002],{"class":111},[101,46352,157],{"class":107},[101,46354,37998],{"class":111},[101,46356,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391,46393,46395,46397],{"class":103,"line":2608},[101,46358,38003],{"class":111},[101,46360,30845],{"class":5204},[101,46362,157],{"class":107},[101,46364,183],{"class":160},[101,46366,489],{"class":111},[101,46368,30854],{"class":5204},[101,46370,157],{"class":107},[101,46372,315],{"class":160},[101,46374,489],{"class":111},[101,46376,30863],{"class":5204},[101,46378,157],{"class":107},[101,46380,480],{"class":160},[101,46382,489],{"class":111},[101,46384,30918],{"class":5204},[101,46386,157],{"class":107},[101,46388,189],{"class":160},[101,46390,489],{"class":111},[101,46392,30872],{"class":5204},[101,46394,157],{"class":107},[101,46396,183],{"class":160},[101,46398,38036],{"class":111},[101,46400,46401],{"class":103,"line":7936},[101,46402,38041],{"class":111},[101,46404,46405,46407,46409,46411,46413,46415,46417,46419,46421,46423,46425,46427,46429],{"class":103,"line":7960},[101,46406,38086],{"class":111},[101,46408,30863],{"class":5204},[101,46410,157],{"class":107},[101,46412,183],{"class":160},[101,46414,489],{"class":111},[101,46416,30918],{"class":5204},[101,46418,157],{"class":107},[101,46420,189],{"class":160},[101,46422,489],{"class":111},[101,46424,30872],{"class":5204},[101,46426,157],{"class":107},[101,46428,329],{"class":160},[101,46430,118],{"class":111},[101,46432,46433],{"class":103,"line":7965},[101,46434,38115],{"class":111},[101,46436,46437,46439,46441,46443],{"class":103,"line":7971},[101,46438,30834],{"class":160},[101,46440,42093],{"class":111},[101,46442,157],{"class":107},[101,46444,37998],{"class":111},[101,46446,46447,46449,46451,46453,46455,46457,46459,46461,46463,46465,46467,46469,46471],{"class":103,"line":7998},[101,46448,38003],{"class":111},[101,46450,30845],{"class":5204},[101,46452,157],{"class":107},[101,46454,315],{"class":160},[101,46456,489],{"class":111},[101,46458,30854],{"class":5204},[101,46460,157],{"class":107},[101,46462,315],{"class":160},[101,46464,489],{"class":111},[101,46466,30863],{"class":5204},[101,46468,157],{"class":107},[101,46470,329],{"class":160},[101,46472,38036],{"class":111},[101,46474,46475],{"class":103,"line":8003},[101,46476,38041],{"class":111},[101,46478,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505,46507,46509,46511],{"class":103,"line":8009},[101,46480,38003],{"class":111},[101,46482,30845],{"class":5204},[101,46484,157],{"class":107},[101,46486,315],{"class":160},[101,46488,489],{"class":111},[101,46490,30854],{"class":5204},[101,46492,157],{"class":107},[101,46494,42148],{"class":160},[101,46496,489],{"class":111},[101,46498,30863],{"class":5204},[101,46500,157],{"class":107},[101,46502,183],{"class":160},[101,46504,489],{"class":111},[101,46506,30872],{"class":5204},[101,46508,157],{"class":107},[101,46510,329],{"class":160},[101,46512,38036],{"class":111},[101,46514,46515],{"class":103,"line":8021},[101,46516,38041],{"class":111},[101,46518,46519,46521,46523,46525,46527,46529,46531,46533,46535,46537,46539,46541,46543],{"class":103,"line":8033},[101,46520,38086],{"class":111},[101,46522,30863],{"class":5204},[101,46524,157],{"class":107},[101,46526,183],{"class":160},[101,46528,489],{"class":111},[101,46530,30918],{"class":5204},[101,46532,157],{"class":107},[101,46534,189],{"class":160},[101,46536,489],{"class":111},[101,46538,30872],{"class":5204},[101,46540,157],{"class":107},[101,46542,329],{"class":160},[101,46544,118],{"class":111},[101,46546,46547],{"class":103,"line":8045},[101,46548,38115],{"class":111},[101,46550,46551,46553,46555,46557],{"class":103,"line":9704},[101,46552,30834],{"class":160},[101,46554,42209],{"class":111},[101,46556,157],{"class":107},[101,46558,37998],{"class":111},[101,46560,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589],{"class":103,"line":9729},[101,46562,42218],{"class":111},[101,46564,42148],{"class":160},[101,46566,489],{"class":111},[101,46568,315],{"class":160},[101,46570,42227],{"class":111},[101,46572,321],{"class":160},[101,46574,489],{"class":111},[101,46576,32059],{"class":160},[101,46578,42236],{"class":111},[101,46580,712],{"class":160},[101,46582,489],{"class":111},[101,46584,309],{"class":160},[101,46586,42245],{"class":111},[101,46588,309],{"class":160},[101,46590,38036],{"class":111},[101,46592,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611,46613,46615,46617,46619,46621],{"class":103,"line":9752},[101,46594,42218],{"class":111},[101,46596,34859],{"class":160},[101,46598,489],{"class":111},[101,46600,32059],{"class":160},[101,46602,42227],{"class":111},[101,46604,32059],{"class":160},[101,46606,489],{"class":111},[101,46608,42148],{"class":160},[101,46610,42236],{"class":111},[101,46612,309],{"class":160},[101,46614,489],{"class":111},[101,46616,321],{"class":160},[101,46618,42245],{"class":111},[101,46620,315],{"class":160},[101,46622,38036],{"class":111},[101,46624,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643,46645,46647,46649],{"class":103,"line":9776},[101,46626,38086],{"class":111},[101,46628,30863],{"class":5204},[101,46630,157],{"class":107},[101,46632,183],{"class":160},[101,46634,489],{"class":111},[101,46636,30918],{"class":5204},[101,46638,157],{"class":107},[101,46640,189],{"class":160},[101,46642,489],{"class":111},[101,46644,30872],{"class":5204},[101,46646,157],{"class":107},[101,46648,329],{"class":160},[101,46650,118],{"class":111},[101,46652,46653],{"class":103,"line":9781},[101,46654,38115],{"class":111},[101,46656,46657,46659,46661,46663],{"class":103,"line":9786},[101,46658,30834],{"class":160},[101,46660,42320],{"class":111},[101,46662,157],{"class":107},[101,46664,37998],{"class":111},[101,46666,46667,46669,46671,46673,46675,46677,46679,46681,46683,46685,46687,46689,46691,46693,46695],{"class":103,"line":9791},[101,46668,42218],{"class":111},[101,46670,42331],{"class":160},[101,46672,489],{"class":111},[101,46674,42148],{"class":160},[101,46676,42227],{"class":111},[101,46678,321],{"class":160},[101,46680,489],{"class":111},[101,46682,42344],{"class":160},[101,46684,42236],{"class":111},[101,46686,712],{"class":160},[101,46688,489],{"class":111},[101,46690,718],{"class":160},[101,46692,42245],{"class":111},[101,46694,315],{"class":160},[101,46696,38036],{"class":111},[101,46698,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723,46725,46727],{"class":103,"line":9800},[101,46700,42218],{"class":111},[101,46702,38446],{"class":160},[101,46704,489],{"class":111},[101,46706,21036],{"class":160},[101,46708,42227],{"class":111},[101,46710,729],{"class":160},[101,46712,489],{"class":111},[101,46714,31490],{"class":160},[101,46716,42236],{"class":111},[101,46718,911],{"class":160},[101,46720,489],{"class":111},[101,46722,315],{"class":160},[101,46724,42245],{"class":111},[101,46726,315],{"class":160},[101,46728,38036],{"class":111},[101,46730,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751,46753,46755,46757,46759],{"class":103,"line":9805},[101,46732,42218],{"class":111},[101,46734,38446],{"class":160},[101,46736,489],{"class":111},[101,46738,32059],{"class":160},[101,46740,42227],{"class":111},[101,46742,32059],{"class":160},[101,46744,489],{"class":111},[101,46746,34859],{"class":160},[101,46748,42236],{"class":111},[101,46750,911],{"class":160},[101,46752,489],{"class":111},[101,46754,315],{"class":160},[101,46756,42245],{"class":111},[101,46758,315],{"class":160},[101,46760,38036],{"class":111},[101,46762,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787,46789,46791],{"class":103,"line":9811},[101,46764,42218],{"class":111},[101,46766,38446],{"class":160},[101,46768,489],{"class":111},[101,46770,729],{"class":160},[101,46772,42227],{"class":111},[101,46774,32059],{"class":160},[101,46776,489],{"class":111},[101,46778,42441],{"class":160},[101,46780,42236],{"class":111},[101,46782,309],{"class":160},[101,46784,489],{"class":111},[101,46786,315],{"class":160},[101,46788,42245],{"class":111},[101,46790,315],{"class":160},[101,46792,38036],{"class":111},[101,46794,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819,46821,46823],{"class":103,"line":9832},[101,46796,42218],{"class":111},[101,46798,42462],{"class":160},[101,46800,489],{"class":111},[101,46802,34859],{"class":160},[101,46804,42227],{"class":111},[101,46806,21036],{"class":160},[101,46808,489],{"class":111},[101,46810,42475],{"class":160},[101,46812,42236],{"class":111},[101,46814,309],{"class":160},[101,46816,489],{"class":111},[101,46818,32059],{"class":160},[101,46820,42245],{"class":111},[101,46822,32059],{"class":160},[101,46824,38036],{"class":111},[101,46826,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851],{"class":103,"line":9838},[101,46828,38086],{"class":111},[101,46830,30863],{"class":5204},[101,46832,157],{"class":107},[101,46834,183],{"class":160},[101,46836,489],{"class":111},[101,46838,30918],{"class":5204},[101,46840,157],{"class":107},[101,46842,189],{"class":160},[101,46844,489],{"class":111},[101,46846,30872],{"class":5204},[101,46848,157],{"class":107},[101,46850,329],{"class":160},[101,46852,118],{"class":111},[101,46854,46855],{"class":103,"line":9852},[101,46856,38115],{"class":111},[101,46858,46859,46861,46863,46865],{"class":103,"line":9858},[101,46860,30834],{"class":160},[101,46862,42528],{"class":111},[101,46864,157],{"class":107},[101,46866,37998],{"class":111},[101,46868,46869,46871,46873,46875,46877,46879,46881,46883,46885,46887,46889,46891,46893,46895,46897],{"class":103,"line":9885},[101,46870,42218],{"class":111},[101,46872,42539],{"class":160},[101,46874,489],{"class":111},[101,46876,34859],{"class":160},[101,46878,42227],{"class":111},[101,46880,21036],{"class":160},[101,46882,489],{"class":111},[101,46884,42475],{"class":160},[101,46886,42236],{"class":111},[101,46888,309],{"class":160},[101,46890,489],{"class":111},[101,46892,32059],{"class":160},[101,46894,42245],{"class":111},[101,46896,32059],{"class":160},[101,46898,38036],{"class":111},[101,46900,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929],{"class":103,"line":9894},[101,46902,42218],{"class":111},[101,46904,42539],{"class":160},[101,46906,489],{"class":111},[101,46908,34929],{"class":160},[101,46910,42227],{"class":111},[101,46912,42148],{"class":160},[101,46914,489],{"class":111},[101,46916,34929],{"class":160},[101,46918,42236],{"class":111},[101,46920,718],{"class":160},[101,46922,489],{"class":111},[101,46924,32059],{"class":160},[101,46926,42245],{"class":111},[101,46928,32059],{"class":160},[101,46930,38036],{"class":111},[101,46932,46933,46935,46937,46939,46941],{"class":103,"line":9900},[101,46934,42602],{"class":111},[101,46936,329],{"class":160},[101,46938,489],{"class":111},[101,46940,329],{"class":160},[101,46942,42611],{"class":111},[101,46944,46945],{"class":103,"line":9908},[101,46946,38779],{"class":111},[101,46948,46949,46951,46953,46955,46957],{"class":103,"line":9913},[101,46950,38784],{"class":111},[101,46952,42622],{"class":160},[101,46954,489],{"class":111},[101,46956,189],{"class":160},[101,46958,118],{"class":111},[101,46960,46961],{"class":103,"line":16592},[101,46962,38115],{"class":111},[101,46964,46965],{"class":103,"line":16598},[101,46966,42637],{"class":170},[101,46968,46969,46971,46973,46975,46977],{"class":103,"line":16621},[101,46970,3390],{"class":107},[101,46972,38857],{"class":111},[101,46974,26032],{"class":107},[101,46976,38862],{"class":160},[101,46978,38865],{"class":111},[101,46980,46981,46983,46985],{"class":103,"line":16627},[101,46982,4629],{"class":107},[101,46984,38877],{"class":160},[101,46986,38880],{"class":111},[101,46988,46989,46991,46993,46995,46997,46999,47001,47003,47005],{"class":103,"line":16650},[101,46990,38890],{"class":111},[101,46992,42664],{"class":5204},[101,46994,157],{"class":107},[101,46996,42669],{"class":216},[101,46998,489],{"class":111},[101,47000,38893],{"class":5204},[101,47002,157],{"class":107},[101,47004,38898],{"class":216},[101,47006,118],{"class":111},[101,47008,47009],{"class":103,"line":16664},[101,47010,42684],{"class":170},[101,47012,47013],{"class":103,"line":16684},[101,47014,42689],{"class":170},[101,47016,47017],{"class":103,"line":16690},[101,47018,42694],{"class":170},[101,47020,47021],{"class":103,"line":16701},[101,47022,42699],{"class":170},[101,47024,47025],{"class":103,"line":16724},[101,47026,42704],{"class":170},[101,47028,47029],{"class":103,"line":16746},[101,47030,42709],{"class":170},[101,47032,47033,47035,47037,47039,47041,47043],{"class":103,"line":16751},[101,47034,38910],{"class":107},[101,47036,38913],{"class":111},[101,47038,38916],{"class":107},[101,47040,38919],{"class":107},[101,47042,38922],{"class":160},[101,47044,3726],{"class":111},[101,47046,47047,47049,47051],{"class":103,"line":16757},[101,47048,38934],{"class":111},[101,47050,303],{"class":160},[101,47052,118],{"class":111},[101,47054,47055,47057,47059],{"class":103,"line":16771},[101,47056,42736],{"class":107},[101,47058,38877],{"class":160},[101,47060,38953],{"class":111},[101,47062,47063,47065,47067,47069,47071],{"class":103,"line":16784},[101,47064,42745],{"class":111},[101,47066,303],{"class":160},[101,47068,489],{"class":111},[101,47070,38975],{"class":160},[101,47072,118],{"class":111},[101,47074,47075,47077,47079,47081,47083,47085],{"class":103,"line":16789},[101,47076,42758],{"class":107},[101,47078,38913],{"class":111},[101,47080,38916],{"class":107},[101,47082,38919],{"class":107},[101,47084,38922],{"class":160},[101,47086,3726],{"class":111},[101,47088,47089,47091,47093],{"class":103,"line":16803},[101,47090,42773],{"class":111},[101,47092,303],{"class":160},[101,47094,118],{"class":111},[101,47096,47097],{"class":103,"line":16808},[101,47098,35154],{"class":170},[101,47100,47101,47103,47105],{"class":103,"line":16814},[101,47102,30790],{"class":107},[101,47104,31082],{"class":1950},[101,47106,31085],{"class":111},[101,47108,47109,47111,47113,47115],{"class":103,"line":16819},[101,47110,31090],{"class":111},[101,47112,157],{"class":107},[101,47114,30812],{"class":160},[101,47116,42800],{"class":111},[101,47118,47119,47121,47123,47125],{"class":103,"line":16833},[101,47120,31090],{"class":111},[101,47122,157],{"class":107},[101,47124,30812],{"class":160},[101,47126,42811],{"class":111},[101,47128,47129,47131,47133,47135],{"class":103,"line":16838},[101,47130,31090],{"class":111},[101,47132,157],{"class":107},[101,47134,30812],{"class":160},[101,47136,42822],{"class":111},[101,47138,47139,47141,47143,47145],{"class":103,"line":16843},[101,47140,31090],{"class":111},[101,47142,157],{"class":107},[101,47144,30812],{"class":160},[101,47146,42833],{"class":111},[101,47148,47149,47151,47153,47155],{"class":103,"line":16857},[101,47150,31090],{"class":111},[101,47152,157],{"class":107},[101,47154,30812],{"class":160},[101,47156,42844],{"class":111},[101,47158,47159,47161],{"class":103,"line":16869},[101,47160,14740],{"class":107},[101,47162,31198],{"class":111},[101,47164,47165],{"class":103,"line":16874},[101,47166,2387],{"emptyLinePlaceholder":27},[101,47168,47169],{"class":103,"line":16887},[101,47170,42859],{"class":170},[101,47172,47173,47175,47177,47179,47181],{"class":103,"line":16892},[101,47174,1518],{"class":107},[101,47176,31209],{"class":160},[101,47178,2936],{"class":107},[101,47180,31214],{"class":216},[101,47182,3726],{"class":111},[101,47184,47185,47187,47189,47191,47193,47195,47197,47199,47201],{"class":103,"line":16897},[101,47186,31226],{"class":111},[101,47188,157],{"class":107},[101,47190,30440],{"class":111},[101,47192,31233],{"class":216},[101,47194,1691],{"class":107},[101,47196,31238],{"class":111},[101,47198,1688],{"class":107},[101,47200,30465],{"class":216},[101,47202,118],{"class":111},[101,47204,47205,47207,47209],{"class":103,"line":16902},[101,47206,31278],{"class":111},[101,47208,157],{"class":107},[101,47210,42900],{"class":111},[101,47212,47213,47215,47217,47219,47221,47223,47225,47227],{"class":103,"line":16915},[101,47214,31288],{"class":160},[101,47216,31291],{"class":111},[101,47218,329],{"class":160},[101,47220,489],{"class":111},[101,47222,31490],{"class":160},[101,47224,489],{"class":111},[101,47226,31490],{"class":160},[101,47228,31304],{"class":111},[21986,47230,47232],{"id":47231},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[10,47234,47235],{},"计算图片的均值与方差，用于训练中归一化处理操作",[92,47237,47239],{"className":30367,"code":47238,"language":30369,"meta":20,"style":20},"# 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",[98,47240,47241,47246,47259,47264,47270,47275,47285,47289,47294,47304,47308,47313,47323,47340,47344,47349,47361,47373,47404,47413,47423,47433,47437,47442,47457,47461,47466,47471,47476,47486,47491,47516,47520,47525,47540,47544,47557,47561,47566,47571,47576,47581,47586,47596,47606,47629,47637,47645,47653,47657,47669,47673,47678,47682,47686,47693,47713,47737,47744,47758,47763,47768,47772,47786,47790,47802],{"__ignoreMap":20},[101,47242,47243],{"class":103,"line":104},[101,47244,47245],{"class":170},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[101,47247,47248,47250,47253,47256],{"class":103,"line":21},[101,47249,30726],{"class":107},[101,47251,47252],{"class":160}," PIL",[101,47254,47255],{"class":107}," import",[101,47257,47258],{"class":111}," Image\n",[101,47260,47261],{"class":103,"line":1166},[101,47262,47263],{"class":170},"# os 用来处理文件夹和文件路径\n",[101,47265,47266,47268],{"class":103,"line":1181},[101,47267,30381],{"class":107},[101,47269,45294],{"class":111},[101,47271,47272],{"class":103,"line":1187},[101,47273,47274],{"class":170},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[101,47276,47277,47279,47281,47283],{"class":103,"line":1201},[101,47278,30381],{"class":107},[101,47280,31369],{"class":111},[101,47282,31372],{"class":107},[101,47284,31375],{"class":111},[101,47286,47287],{"class":103,"line":1207},[101,47288,2387],{"emptyLinePlaceholder":27},[101,47290,47291],{"class":103,"line":1298},[101,47292,47293],{"class":170},"# 文件夹路径，包含所有图片文件\n",[101,47295,47296,47299,47301],{"class":103,"line":1304},[101,47297,47298],{"class":111},"folder_path ",[101,47300,157],{"class":107},[101,47302,47303],{"class":216}," 'data_cat_dog'\n",[101,47305,47306],{"class":103,"line":1316},[101,47307,2387],{"emptyLinePlaceholder":27},[101,47309,47310],{"class":103,"line":1599},[101,47311,47312],{"class":170},"# 初始化累积变量\n",[101,47314,47315,47318,47320],{"class":103,"line":1604},[101,47316,47317],{"class":111},"total_pixels ",[101,47319,157],{"class":107},[101,47321,47322],{"class":160}," 0\n",[101,47324,47325,47328,47330,47333,47335,47337],{"class":103,"line":1610},[101,47326,47327],{"class":111},"sum_normalized_pixel_values ",[101,47329,157],{"class":107},[101,47331,47332],{"class":111}," np.zeros(",[101,47334,183],{"class":160},[101,47336,45797],{"class":111},[101,47338,47339],{"class":170},"# 如果是RGB图像，需要三个通道的均值和方差\n",[101,47341,47342],{"class":103,"line":1615},[101,47343,2387],{"emptyLinePlaceholder":27},[101,47345,47346],{"class":103,"line":1629},[101,47347,47348],{"class":170},"# 遍历文件夹中的图片文件\n",[101,47350,47351,47353,47356,47358],{"class":103,"line":1634},[101,47352,3012],{"class":107},[101,47354,47355],{"class":111}," root, dirs, files ",[101,47357,26032],{"class":107},[101,47359,47360],{"class":111}," os.walk(folder_path):\n",[101,47362,47363,47365,47368,47370],{"class":103,"line":1640},[101,47364,3188],{"class":107},[101,47366,47367],{"class":111}," filename ",[101,47369,26032],{"class":107},[101,47371,47372],{"class":111}," files:\n",[101,47374,47375,47377,47380,47383,47385,47388,47390,47393,47395,47398,47401],{"class":103,"line":1661},[101,47376,2484],{"class":107},[101,47378,47379],{"class":111}," filename.endswith((",[101,47381,47382],{"class":216},"'.jpg'",[101,47384,12423],{"class":111},[101,47386,47387],{"class":216},"'.jpeg'",[101,47389,12423],{"class":111},[101,47391,47392],{"class":216},"'.png'",[101,47394,12423],{"class":111},[101,47396,47397],{"class":216},"'.bmp'",[101,47399,47400],{"class":111},")):  ",[101,47402,47403],{"class":170},"# 可根据实际情况添加其他格式\n",[101,47405,47406,47408,47410],{"class":103,"line":1666},[101,47407,45662],{"class":111},[101,47409,157],{"class":107},[101,47411,47412],{"class":111}," os.path.join(root, filename)\n",[101,47414,47415,47418,47420],{"class":103,"line":1680},[101,47416,47417],{"class":111},"            image ",[101,47419,157],{"class":107},[101,47421,47422],{"class":111}," Image.open(image_path)\n",[101,47424,47425,47428,47430],{"class":103,"line":1685},[101,47426,47427],{"class":111},"            image_array ",[101,47429,157],{"class":107},[101,47431,47432],{"class":111}," np.array(image)\n",[101,47434,47435],{"class":103,"line":1714},[101,47436,2387],{"emptyLinePlaceholder":27},[101,47438,47439],{"class":103,"line":1719},[101,47440,47441],{"class":170},"            # 归一化像素值到0-1之间\n",[101,47443,47444,47447,47449,47452,47454],{"class":103,"line":1736},[101,47445,47446],{"class":111},"            normalized_image_array ",[101,47448,157],{"class":107},[101,47450,47451],{"class":111}," image_array ",[101,47453,695],{"class":107},[101,47455,47456],{"class":160}," 255.0\n",[101,47458,47459],{"class":103,"line":1741},[101,47460,2387],{"emptyLinePlaceholder":27},[101,47462,47463],{"class":103,"line":1746},[101,47464,47465],{"class":170},"            # print(image_path)\n",[101,47467,47468],{"class":103,"line":1751},[101,47469,47470],{"class":170},"            # print(normalized_image_array.shape)\n",[101,47472,47473],{"class":103,"line":1765},[101,47474,47475],{"class":170},"            # 累积归一化后的像素值和像素数量\n",[101,47477,47478,47481,47483],{"class":103,"line":1770},[101,47479,47480],{"class":111},"            total_pixels ",[101,47482,9465],{"class":107},[101,47484,47485],{"class":111}," normalized_image_array.size\n",[101,47487,47488],{"class":103,"line":2564},[101,47489,47490],{"class":170},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[101,47492,47493,47496,47498,47501,47504,47506,47508,47510,47512,47514],{"class":103,"line":2578},[101,47494,47495],{"class":111},"            sum_normalized_pixel_values ",[101,47497,9465],{"class":107},[101,47499,47500],{"class":111}," np.sum(normalized_image_array, ",[101,47502,47503],{"class":5204},"axis",[101,47505,157],{"class":107},[101,47507,112],{"class":111},[101,47509,303],{"class":160},[101,47511,12423],{"class":111},[101,47513,329],{"class":160},[101,47515,30486],{"class":111},[101,47517,47518],{"class":103,"line":2586},[101,47519,2387],{"emptyLinePlaceholder":27},[101,47521,47522],{"class":103,"line":2591},[101,47523,47524],{"class":170},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[101,47526,47527,47530,47532,47535,47537],{"class":103,"line":2597},[101,47528,47529],{"class":111},"mean ",[101,47531,157],{"class":107},[101,47533,47534],{"class":111}," sum_normalized_pixel_values ",[101,47536,695],{"class":107},[101,47538,47539],{"class":111}," total_pixels\n",[101,47541,47542],{"class":103,"line":2603},[101,47543,2387],{"emptyLinePlaceholder":27},[101,47545,47546,47549,47551,47553,47555],{"class":103,"line":2608},[101,47547,47548],{"class":111},"sum_squared_diff ",[101,47550,157],{"class":107},[101,47552,47332],{"class":111},[101,47554,183],{"class":160},[101,47556,118],{"class":111},[101,47558,47559],{"class":103,"line":7936},[101,47560,2387],{"emptyLinePlaceholder":27},[101,47562,47563],{"class":103,"line":7960},[101,47564,47565],{"class":170},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[101,47567,47568],{"class":103,"line":7965},[101,47569,47570],{"class":170},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[101,47572,47573],{"class":103,"line":7971},[101,47574,47575],{"class":170},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[101,47577,47578],{"class":103,"line":7998},[101,47579,47580],{"class":170},"# Image.open(image_path)：打开图片\n",[101,47582,47583],{"class":103,"line":8003},[101,47584,47585],{"class":170},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[101,47587,47588,47590,47592,47594],{"class":103,"line":8009},[101,47589,3012],{"class":107},[101,47591,47355],{"class":111},[101,47593,26032],{"class":107},[101,47595,47360],{"class":111},[101,47597,47598,47600,47602,47604],{"class":103,"line":8021},[101,47599,3188],{"class":107},[101,47601,47367],{"class":111},[101,47603,26032],{"class":107},[101,47605,47372],{"class":111},[101,47607,47608,47610,47612,47614,47616,47618,47620,47622,47624,47626],{"class":103,"line":8033},[101,47609,2484],{"class":107},[101,47611,47379],{"class":111},[101,47613,47382],{"class":216},[101,47615,12423],{"class":111},[101,47617,47387],{"class":216},[101,47619,12423],{"class":111},[101,47621,47392],{"class":216},[101,47623,12423],{"class":111},[101,47625,47397],{"class":216},[101,47627,47628],{"class":111},")):\n",[101,47630,47631,47633,47635],{"class":103,"line":8045},[101,47632,45662],{"class":111},[101,47634,157],{"class":107},[101,47636,47412],{"class":111},[101,47638,47639,47641,47643],{"class":103,"line":9704},[101,47640,47417],{"class":111},[101,47642,157],{"class":107},[101,47644,47422],{"class":111},[101,47646,47647,47649,47651],{"class":103,"line":9729},[101,47648,47427],{"class":111},[101,47650,157],{"class":107},[101,47652,47432],{"class":111},[101,47654,47655],{"class":103,"line":9752},[101,47656,47441],{"class":170},[101,47658,47659,47661,47663,47665,47667],{"class":103,"line":9776},[101,47660,47446],{"class":111},[101,47662,157],{"class":107},[101,47664,47451],{"class":111},[101,47666,695],{"class":107},[101,47668,47456],{"class":160},[101,47670,47671],{"class":103,"line":9781},[101,47672,47470],{"class":170},[101,47674,47675],{"class":103,"line":9786},[101,47676,47677],{"class":170},"            # print(mean.shape)\n",[101,47679,47680],{"class":103,"line":9791},[101,47681,47465],{"class":170},[101,47683,47684],{"class":103,"line":9800},[101,47685,2387],{"emptyLinePlaceholder":27},[101,47687,47688,47691],{"class":103,"line":9805},[101,47689,47690],{"class":107},"            try",[101,47692,3726],{"class":111},[101,47694,47695,47698,47700,47703,47705,47708,47710],{"class":103,"line":9811},[101,47696,47697],{"class":111},"                diff ",[101,47699,157],{"class":107},[101,47701,47702],{"class":111}," (normalized_image_array ",[101,47704,643],{"class":107},[101,47706,47707],{"class":111}," mean) ",[101,47709,10649],{"class":107},[101,47711,47712],{"class":160}," 2\n",[101,47714,47715,47718,47720,47723,47725,47727,47729,47731,47733,47735],{"class":103,"line":9832},[101,47716,47717],{"class":111},"                sum_squared_diff ",[101,47719,9465],{"class":107},[101,47721,47722],{"class":111}," np.sum(diff, ",[101,47724,47503],{"class":5204},[101,47726,157],{"class":107},[101,47728,112],{"class":111},[101,47730,303],{"class":160},[101,47732,12423],{"class":111},[101,47734,329],{"class":160},[101,47736,30486],{"class":111},[101,47738,47739,47742],{"class":103,"line":9838},[101,47740,47741],{"class":107},"            except",[101,47743,3726],{"class":111},[101,47745,47746,47749,47751,47753,47756],{"class":103,"line":9852},[101,47747,47748],{"class":160},"                print",[101,47750,112],{"class":111},[101,47752,164],{"class":107},[101,47754,47755],{"class":216},"\"捕获到自定义异常\"",[101,47757,118],{"class":111},[101,47759,47760],{"class":103,"line":9858},[101,47761,47762],{"class":170},"            # diff = (normalized_image_array - mean) ** 2\n",[101,47764,47765],{"class":103,"line":9885},[101,47766,47767],{"class":170},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[101,47769,47770],{"class":103,"line":9894},[101,47771,2387],{"emptyLinePlaceholder":27},[101,47773,47774,47777,47779,47782,47784],{"class":103,"line":9900},[101,47775,47776],{"class":111},"variance ",[101,47778,157],{"class":107},[101,47780,47781],{"class":111}," sum_squared_diff ",[101,47783,695],{"class":107},[101,47785,47539],{"class":111},[101,47787,47788],{"class":103,"line":9908},[101,47789,2387],{"emptyLinePlaceholder":27},[101,47791,47792,47794,47796,47799],{"class":103,"line":9913},[101,47793,30404],{"class":160},[101,47795,112],{"class":111},[101,47797,47798],{"class":216},"\"Mean:\"",[101,47800,47801],{"class":111},", mean)\n",[101,47803,47804,47806,47808,47811],{"class":103,"line":16592},[101,47805,30404],{"class":160},[101,47807,112],{"class":111},[101,47809,47810],{"class":216},"\"Variance:\"",[101,47812,47813],{"class":111},", variance)\n",[92,47815,47817],{"className":30367,"code":47816,"language":30369,"meta":20,"style":20},"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",[98,47818,47819,47825,47831,47841,47847,47857,47871,47881,47891,47901,47905,47915,47925,47929,47933,47941,47946,47951,47970,47974,47979,47984,47989,47994,48035,48040,48050,48055,48068,48073,48078,48083,48088,48093,48097,48102,48107,48129,48133,48165,48179,48189,48199,48203,48213,48227,48237,48247,48257,48263,48267,48271,48275,48279,48283,48291,48311,48315,48319,48323,48327,48343,48347,48351,48359,48363,48367,48375,48379,48383,48387,48395,48399,48403,48407,48415,48419,48427,48431,48439,48443,48451,48455,48463,48467,48471,48479,48483,48487,48499,48523,48537,48541,48545,48549,48557,48561,48569,48573,48581,48585,48593,48597,48605,48609,48617,48621,48633,48637,48645,48649,48657,48661,48665,48669,48673,48681,48685,48701,48705,48713,48717,48721,48725,48729,48733,48737,48741,48757,48761,48773,48777,48789,48793,48805,48809,48817,48821,48829,48833,48837,48841,48847,48851,48859,48863,48879,48883,48891,48895,48911,48923,48927,48939,48943,48947,48955,48959,48963,48971,48975,48983,48987,48995,48999,49003,49045,49087,49091,49095,49111,49115,49131,49135,49139,49147,49151,49155,49167,49205,49209,49213,49221,49225,49239,49249,49255,49261,49267,49273,49277,49281,49287,49291,49295,49303,49307,49325,49329,49333,49337,49353,49357,49361,49365,49369,49373,49393,49413,49417,49421,49425,49433,49441,49445,49461,49481,49501,49505,49510,49519,49528,49533,49538,49543,49556,49561,49570,49579,49596],{"__ignoreMap":20},[101,47820,47821,47823],{"class":103,"line":104},[101,47822,30381],{"class":107},[101,47824,31811],{"class":111},[101,47826,47827,47829],{"class":103,"line":21},[101,47828,30381],{"class":107},[101,47830,31818],{"class":111},[101,47832,47833,47835,47837,47839],{"class":103,"line":1166},[101,47834,30381],{"class":107},[101,47836,31829],{"class":111},[101,47838,31372],{"class":107},[101,47840,31834],{"class":111},[101,47842,47843,47845],{"class":103,"line":1181},[101,47844,30381],{"class":107},[101,47846,30384],{"class":111},[101,47848,47849,47851,47853,47855],{"class":103,"line":1187},[101,47850,30726],{"class":107},[101,47852,31404],{"class":111},[101,47854,30381],{"class":107},[101,47856,31851],{"class":111},[101,47858,47859,47861,47863,47865,47868],{"class":103,"line":1201},[101,47860,30726],{"class":107},[101,47862,31357],{"class":111},[101,47864,30381],{"class":107},[101,47866,47867],{"class":111}," ImageFolder ",[101,47869,47870],{"class":170},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[101,47872,47873,47875,47877,47879],{"class":103,"line":1207},[101,47874,30726],{"class":107},[101,47876,31387],{"class":111},[101,47878,30381],{"class":107},[101,47880,31392],{"class":111},[101,47882,47883,47885,47887,47889],{"class":103,"line":1298},[101,47884,30381],{"class":107},[101,47886,31404],{"class":111},[101,47888,31372],{"class":107},[101,47890,31409],{"class":111},[101,47892,47893,47895,47897,47899],{"class":103,"line":1304},[101,47894,30381],{"class":107},[101,47896,31421],{"class":111},[101,47898,31372],{"class":107},[101,47900,31426],{"class":111},[101,47902,47903],{"class":103,"line":1316},[101,47904,31896],{"class":170},[101,47906,47907,47909,47911,47913],{"class":103,"line":1599},[101,47908,30726],{"class":107},[101,47910,31903],{"class":111},[101,47912,30381],{"class":107},[101,47914,43020],{"class":111},[101,47916,47917,47919,47921,47923],{"class":103,"line":1604},[101,47918,30726],{"class":107},[101,47920,30729],{"class":111},[101,47922,30381],{"class":107},[101,47924,30734],{"class":111},[101,47926,47927],{"class":103,"line":1610},[101,47928,2387],{"emptyLinePlaceholder":27},[101,47930,47931],{"class":103,"line":1615},[101,47932,31931],{"class":170},[101,47934,47935,47937,47939],{"class":103,"line":1629},[101,47936,31936],{"class":107},[101,47938,31939],{"class":1950},[101,47940,31942],{"class":111},[101,47942,47943],{"class":103,"line":1634},[101,47944,47945],{"class":170},"    # 导入自己的数据集，并进行数据处理\n",[101,47947,47948],{"class":103,"line":1640},[101,47949,47950],{"class":170},"    # 定义数据集的路径\n",[101,47952,47953,47956,47958,47960,47962,47964,47968],{"class":103,"line":1661},[101,47954,47955],{"class":160},"    ROOT_PATH",[101,47957,157],{"class":107},[101,47959,781],{"class":107},[101,47961,362],{"class":216},[101,47963,669],{"class":160},[101,47965,47967],{"class":47966},"sA_wV","\u002Fdata\u002Ftrain",[101,47969,25122],{"class":216},[101,47971,47972],{"class":103,"line":1666},[101,47973,2387],{"emptyLinePlaceholder":27},[101,47975,47976],{"class":103,"line":1680},[101,47977,47978],{"class":170},"    # 定义归一化方法\n",[101,47980,47981],{"class":103,"line":1685},[101,47982,47983],{"class":170},"    # 这里需要先计算一下数据集的均值和方差\n",[101,47985,47986],{"class":103,"line":1714},[101,47987,47988],{"class":170},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[101,47990,47991],{"class":103,"line":1719},[101,47992,47993],{"class":170},"    # 第一个参数是均值，第二个参数是方差\n",[101,47995,47996,47999,48001,48004,48007,48009,48012,48014,48017,48020,48023,48025,48028,48030,48033],{"class":103,"line":1736},[101,47997,47998],{"class":111},"    normalize",[101,48000,157],{"class":107},[101,48002,48003],{"class":111},"transforms.Normalize([",[101,48005,48006],{"class":160},"0.162",[101,48008,489],{"class":111},[101,48010,48011],{"class":160},"0.151",[101,48013,489],{"class":111},[101,48015,48016],{"class":160},"0.138",[101,48018,48019],{"class":111},"],[",[101,48021,48022],{"class":160},"0.058",[101,48024,489],{"class":111},[101,48026,48027],{"class":160},"0.052",[101,48029,489],{"class":111},[101,48031,48032],{"class":160},"0.048",[101,48034,4644],{"class":111},[101,48036,48037],{"class":103,"line":1741},[101,48038,48039],{"class":170},"    # 定义数据集处理方法变量\n",[101,48041,48042,48045,48047],{"class":103,"line":1746},[101,48043,48044],{"class":111},"    train_transform",[101,48046,157],{"class":107},[101,48048,48049],{"class":111},"transforms.Compose([\n",[101,48051,48052],{"class":103,"line":1751},[101,48053,48054],{"class":170},"        # 调整图像大小为224*224\n",[101,48056,48057,48060,48062,48064,48066],{"class":103,"line":1765},[101,48058,48059],{"class":111},"        transforms.Resize((",[101,48061,31490],{"class":160},[101,48063,489],{"class":111},[101,48065,31490],{"class":160},[101,48067,42611],{"class":111},[101,48069,48070],{"class":103,"line":1770},[101,48071,48072],{"class":170},"        # 将图像转换为张量\n",[101,48074,48075],{"class":103,"line":2564},[101,48076,48077],{"class":111},"        transforms.ToTensor(),\n",[101,48079,48080],{"class":103,"line":2578},[101,48081,48082],{"class":111},"        normalize])\n",[101,48084,48085],{"class":103,"line":2586},[101,48086,48087],{"class":170},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[101,48089,48090],{"class":103,"line":2591},[101,48091,48092],{"class":170},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[101,48094,48095],{"class":103,"line":2597},[101,48096,2387],{"emptyLinePlaceholder":27},[101,48098,48099],{"class":103,"line":2603},[101,48100,48101],{"class":170},"    # 加载数据集\n",[101,48103,48104],{"class":103,"line":2608},[101,48105,48106],{"class":170},"    # 传入数据集路径与处理方法\n",[101,48108,48109,48111,48113,48116,48119,48121,48124,48126],{"class":103,"line":7936},[101,48110,31947],{"class":111},[101,48112,157],{"class":107},[101,48114,48115],{"class":111},"ImageFolder(",[101,48117,48118],{"class":160},"ROOT_PATH",[101,48120,489],{"class":111},[101,48122,48123],{"class":5204},"transform",[101,48125,157],{"class":107},[101,48127,48128],{"class":111},"train_transform)\n",[101,48130,48131],{"class":103,"line":7960},[101,48132,2387],{"emptyLinePlaceholder":27},[101,48134,48135,48137,48139,48141,48143,48145,48147,48149,48151,48153,48155,48157,48159,48161,48163],{"class":103,"line":7965},[101,48136,31999],{"class":111},[101,48138,157],{"class":107},[101,48140,32004],{"class":111},[101,48142,32007],{"class":160},[101,48144,112],{"class":111},[101,48146,32012],{"class":160},[101,48148,566],{"class":107},[101,48150,7346],{"class":160},[101,48152,32019],{"class":111},[101,48154,32007],{"class":160},[101,48156,112],{"class":111},[101,48158,32026],{"class":160},[101,48160,566],{"class":107},[101,48162,7346],{"class":160},[101,48164,32033],{"class":111},[101,48166,48167,48169,48171,48173,48175,48177],{"class":103,"line":7971},[101,48168,32038],{"class":111},[101,48170,157],{"class":107},[101,48172,32043],{"class":111},[101,48174,31526],{"class":5204},[101,48176,157],{"class":107},[101,48178,31531],{"class":111},[101,48180,48181,48183,48185,48187],{"class":103,"line":7998},[101,48182,32054],{"class":5204},[101,48184,157],{"class":107},[101,48186,309],{"class":160},[101,48188,31455],{"class":111},[101,48190,48191,48193,48195,48197],{"class":103,"line":8003},[101,48192,32066],{"class":5204},[101,48194,157],{"class":107},[101,48196,31465],{"class":160},[101,48198,31455],{"class":111},[101,48200,48201],{"class":103,"line":8009},[101,48202,32077],{"class":170},[101,48204,48205,48207,48209,48211],{"class":103,"line":8021},[101,48206,32082],{"class":5204},[101,48208,157],{"class":107},[101,48210,506],{"class":160},[101,48212,118],{"class":111},[101,48214,48215,48217,48219,48221,48223,48225],{"class":103,"line":8033},[101,48216,32093],{"class":111},[101,48218,157],{"class":107},[101,48220,31523],{"class":111},[101,48222,31526],{"class":5204},[101,48224,157],{"class":107},[101,48226,32104],{"class":111},[101,48228,48229,48231,48233,48235],{"class":103,"line":8045},[101,48230,32109],{"class":5204},[101,48232,157],{"class":107},[101,48234,309],{"class":160},[101,48236,31455],{"class":111},[101,48238,48239,48241,48243,48245],{"class":103,"line":9704},[101,48240,32120],{"class":5204},[101,48242,157],{"class":107},[101,48244,31465],{"class":160},[101,48246,31455],{"class":111},[101,48248,48249,48251,48253,48255],{"class":103,"line":9729},[101,48250,32131],{"class":5204},[101,48252,157],{"class":107},[101,48254,506],{"class":160},[101,48256,118],{"class":111},[101,48258,48259,48261],{"class":103,"line":9752},[101,48260,4077],{"class":107},[101,48262,32144],{"class":111},[101,48264,48265],{"class":103,"line":9776},[101,48266,2387],{"emptyLinePlaceholder":27},[101,48268,48269],{"class":103,"line":9781},[101,48270,32153],{"class":170},[101,48272,48273],{"class":103,"line":9786},[101,48274,32158],{"class":170},[101,48276,48277],{"class":103,"line":9791},[101,48278,2387],{"emptyLinePlaceholder":27},[101,48280,48281],{"class":103,"line":9800},[101,48282,32167],{"class":170},[101,48284,48285,48287,48289],{"class":103,"line":9805},[101,48286,31936],{"class":107},[101,48288,32174],{"class":1950},[101,48290,32177],{"class":111},[101,48292,48293,48295,48297,48299,48301,48303,48305,48307,48309],{"class":103,"line":9811},[101,48294,31226],{"class":111},[101,48296,157],{"class":107},[101,48298,30440],{"class":111},[101,48300,31233],{"class":216},[101,48302,1691],{"class":107},[101,48304,31238],{"class":111},[101,48306,1688],{"class":107},[101,48308,32196],{"class":216},[101,48310,118],{"class":111},[101,48312,48313],{"class":103,"line":9832},[101,48314,2387],{"emptyLinePlaceholder":27},[101,48316,48317],{"class":103,"line":9838},[101,48318,32211],{"class":170},[101,48320,48321],{"class":103,"line":9852},[101,48322,32216],{"class":170},[101,48324,48325],{"class":103,"line":9858},[101,48326,32221],{"class":170},[101,48328,48329,48331,48333,48335,48337,48339,48341],{"class":103,"line":9885},[101,48330,32226],{"class":111},[101,48332,157],{"class":107},[101,48334,32231],{"class":111},[101,48336,32234],{"class":5204},[101,48338,157],{"class":107},[101,48340,32239],{"class":160},[101,48342,118],{"class":111},[101,48344,48345],{"class":103,"line":9894},[101,48346,2387],{"emptyLinePlaceholder":27},[101,48348,48349],{"class":103,"line":9900},[101,48350,32250],{"class":170},[101,48352,48353,48355,48357],{"class":103,"line":9908},[101,48354,32255],{"class":111},[101,48356,157],{"class":107},[101,48358,32260],{"class":111},[101,48360,48361],{"class":103,"line":9913},[101,48362,2387],{"emptyLinePlaceholder":27},[101,48364,48365],{"class":103,"line":16592},[101,48366,32269],{"class":170},[101,48368,48369,48371,48373],{"class":103,"line":16598},[101,48370,31278],{"class":111},[101,48372,157],{"class":107},[101,48374,32278],{"class":111},[101,48376,48377],{"class":103,"line":16621},[101,48378,32283],{"class":170},[101,48380,48381],{"class":103,"line":16627},[101,48382,32288],{"class":170},[101,48384,48385],{"class":103,"line":16650},[101,48386,32293],{"class":170},[101,48388,48389,48391,48393],{"class":103,"line":16664},[101,48390,32298],{"class":111},[101,48392,157],{"class":107},[101,48394,32303],{"class":111},[101,48396,48397],{"class":103,"line":16684},[101,48398,2387],{"emptyLinePlaceholder":27},[101,48400,48401],{"class":103,"line":16690},[101,48402,32316],{"class":170},[101,48404,48405],{"class":103,"line":16701},[101,48406,32321],{"class":170},[101,48408,48409,48411,48413],{"class":103,"line":16724},[101,48410,32326],{"class":111},[101,48412,157],{"class":107},[101,48414,32331],{"class":160},[101,48416,48417],{"class":103,"line":16746},[101,48418,32336],{"class":170},[101,48420,48421,48423,48425],{"class":103,"line":16751},[101,48422,32341],{"class":111},[101,48424,157],{"class":107},[101,48426,32346],{"class":111},[101,48428,48429],{"class":103,"line":16757},[101,48430,32351],{"class":170},[101,48432,48433,48435,48437],{"class":103,"line":16771},[101,48434,32356],{"class":111},[101,48436,157],{"class":107},[101,48438,32346],{"class":111},[101,48440,48441],{"class":103,"line":16784},[101,48442,32365],{"class":170},[101,48444,48445,48447,48449],{"class":103,"line":16789},[101,48446,32370],{"class":111},[101,48448,157],{"class":107},[101,48450,32346],{"class":111},[101,48452,48453],{"class":103,"line":16803},[101,48454,32379],{"class":170},[101,48456,48457,48459,48461],{"class":103,"line":16808},[101,48458,32384],{"class":111},[101,48460,157],{"class":107},[101,48462,32346],{"class":111},[101,48464,48465],{"class":103,"line":16814},[101,48466,2387],{"emptyLinePlaceholder":27},[101,48468,48469],{"class":103,"line":16819},[101,48470,32397],{"class":170},[101,48472,48473,48475,48477],{"class":103,"line":16833},[101,48474,32402],{"class":111},[101,48476,157],{"class":107},[101,48478,32407],{"class":111},[101,48480,48481],{"class":103,"line":16838},[101,48482,2387],{"emptyLinePlaceholder":27},[101,48484,48485],{"class":103,"line":16843},[101,48486,32420],{"class":170},[101,48488,48489,48491,48493,48495,48497],{"class":103,"line":16857},[101,48490,3188],{"class":107},[101,48492,32427],{"class":111},[101,48494,26032],{"class":107},[101,48496,32432],{"class":160},[101,48498,32435],{"class":111},[101,48500,48501,48503,48505,48507,48509,48511,48513,48515,48517,48519,48521],{"class":103,"line":16869},[101,48502,32440],{"class":160},[101,48504,112],{"class":111},[101,48506,32445],{"class":216},[101,48508,32448],{"class":160},[101,48510,695],{"class":216},[101,48512,32448],{"class":160},[101,48514,362],{"class":216},[101,48516,32457],{"class":111},[101,48518,643],{"class":107},[101,48520,329],{"class":160},[101,48522,30486],{"class":111},[101,48524,48525,48527,48529,48531,48533,48535],{"class":103,"line":16874},[101,48526,32440],{"class":160},[101,48528,112],{"class":111},[101,48530,32472],{"class":216},[101,48532,566],{"class":107},[101,48534,557],{"class":160},[101,48536,118],{"class":111},[101,48538,48539],{"class":103,"line":16887},[101,48540,2387],{"emptyLinePlaceholder":27},[101,48542,48543],{"class":103,"line":16892},[101,48544,32487],{"class":170},[101,48546,48547],{"class":103,"line":16897},[101,48548,32492],{"class":170},[101,48550,48551,48553,48555],{"class":103,"line":16902},[101,48552,32497],{"class":111},[101,48554,157],{"class":107},[101,48556,32331],{"class":160},[101,48558,48559],{"class":103,"line":16915},[101,48560,32506],{"class":170},[101,48562,48563,48565,48567],{"class":103,"line":16920},[101,48564,32511],{"class":111},[101,48566,157],{"class":107},[101,48568,3072],{"class":160},[101,48570,48571],{"class":103,"line":32622},[101,48572,32520],{"class":170},[101,48574,48575,48577,48579],{"class":103,"line":32628},[101,48576,32525],{"class":111},[101,48578,157],{"class":107},[101,48580,32331],{"class":160},[101,48582,48583],{"class":103,"line":32634},[101,48584,32534],{"class":170},[101,48586,48587,48589,48591],{"class":103,"line":32640},[101,48588,32539],{"class":111},[101,48590,157],{"class":107},[101,48592,3072],{"class":160},[101,48594,48595],{"class":103,"line":32646},[101,48596,32548],{"class":170},[101,48598,48599,48601,48603],{"class":103,"line":32657},[101,48600,32553],{"class":111},[101,48602,157],{"class":107},[101,48604,3072],{"class":160},[101,48606,48607],{"class":103,"line":32663},[101,48608,32562],{"class":170},[101,48610,48611,48613,48615],{"class":103,"line":32683},[101,48612,32567],{"class":111},[101,48614,157],{"class":107},[101,48616,3072],{"class":160},[101,48618,48619],{"class":103,"line":32689},[101,48620,32576],{"class":170},[101,48622,48623,48625,48627,48629,48631],{"class":103,"line":32700},[101,48624,3390],{"class":107},[101,48626,31590],{"class":111},[101,48628,26032],{"class":107},[101,48630,31595],{"class":160},[101,48632,32589],{"class":111},[101,48634,48635],{"class":103,"line":32706},[101,48636,32594],{"class":170},[101,48638,48639,48641,48643],{"class":103,"line":32712},[101,48640,32599],{"class":111},[101,48642,157],{"class":107},[101,48644,32604],{"class":111},[101,48646,48647],{"class":103,"line":32718},[101,48648,32609],{"class":170},[101,48650,48651,48653,48655],{"class":103,"line":32724},[101,48652,32614],{"class":111},[101,48654,157],{"class":107},[101,48656,32619],{"class":111},[101,48658,48659],{"class":103,"line":32730},[101,48660,32625],{"class":170},[101,48662,48663],{"class":103,"line":32736},[101,48664,32631],{"class":111},[101,48666,48667],{"class":103,"line":32742},[101,48668,32637],{"class":170},[101,48670,48671],{"class":103,"line":32762},[101,48672,32643],{"class":170},[101,48674,48675,48677,48679],{"class":103,"line":32768},[101,48676,32649],{"class":111},[101,48678,157],{"class":107},[101,48680,32654],{"class":111},[101,48682,48683],{"class":103,"line":32784},[101,48684,32660],{"class":170},[101,48686,48687,48689,48691,48693,48695,48697,48699],{"class":103,"line":32790},[101,48688,32666],{"class":111},[101,48690,157],{"class":107},[101,48692,32671],{"class":111},[101,48694,32674],{"class":5204},[101,48696,157],{"class":107},[101,48698,329],{"class":160},[101,48700,118],{"class":111},[101,48702,48703],{"class":103,"line":32804},[101,48704,32686],{"class":170},[101,48706,48707,48709,48711],{"class":103,"line":32810},[101,48708,32692],{"class":111},[101,48710,157],{"class":107},[101,48712,32697],{"class":111},[101,48714,48715],{"class":103,"line":32825},[101,48716,32703],{"class":170},[101,48718,48719],{"class":103,"line":32831},[101,48720,32709],{"class":111},[101,48722,48723],{"class":103,"line":32840},[101,48724,32715],{"class":170},[101,48726,48727],{"class":103,"line":32846},[101,48728,32721],{"class":111},[101,48730,48731],{"class":103,"line":32855},[101,48732,32727],{"class":170},[101,48734,48735],{"class":103,"line":32861},[101,48736,32733],{"class":111},[101,48738,48739],{"class":103,"line":32867},[101,48740,32739],{"class":170},[101,48742,48743,48745,48747,48749,48751,48753,48755],{"class":103,"line":32876},[101,48744,32745],{"class":111},[101,48746,9465],{"class":107},[101,48748,32750],{"class":111},[101,48750,566],{"class":107},[101,48752,32755],{"class":111},[101,48754,303],{"class":160},[101,48756,118],{"class":111},[101,48758,48759],{"class":103,"line":32882},[101,48760,32765],{"class":170},[101,48762,48763,48765,48767,48769,48771],{"class":103,"line":32893},[101,48764,32771],{"class":111},[101,48766,9465],{"class":107},[101,48768,32776],{"class":111},[101,48770,2936],{"class":107},[101,48772,32781],{"class":111},[101,48774,48775],{"class":103,"line":32899},[101,48776,32787],{"class":170},[101,48778,48779,48781,48783,48785,48787],{"class":103,"line":32918},[101,48780,32793],{"class":111},[101,48782,9465],{"class":107},[101,48784,32755],{"class":111},[101,48786,303],{"class":160},[101,48788,118],{"class":111},[101,48790,48791],{"class":103,"line":32924},[101,48792,32807],{"class":170},[101,48794,48795,48797,48799,48801,48803],{"class":103,"line":32935},[101,48796,3390],{"class":107},[101,48798,32815],{"class":111},[101,48800,26032],{"class":107},[101,48802,31595],{"class":160},[101,48804,32822],{"class":111},[101,48806,48807],{"class":103,"line":32941},[101,48808,32828],{"class":170},[101,48810,48811,48813,48815],{"class":103,"line":32961},[101,48812,32599],{"class":111},[101,48814,157],{"class":107},[101,48816,32604],{"class":111},[101,48818,48819],{"class":103,"line":32977},[101,48820,32843],{"class":170},[101,48822,48823,48825,48827],{"class":103,"line":32983},[101,48824,32614],{"class":111},[101,48826,157],{"class":107},[101,48828,32619],{"class":111},[101,48830,48831],{"class":103,"line":32997},[101,48832,32858],{"class":170},[101,48834,48835],{"class":103,"line":33003},[101,48836,32864],{"class":111},[101,48838,48839],{"class":103,"line":33009},[101,48840,36345],{"class":170},[101,48842,48843,48845],{"class":103,"line":33020},[101,48844,32870],{"class":107},[101,48846,32873],{"class":111},[101,48848,48849],{"class":103,"line":33026},[101,48850,32879],{"class":170},[101,48852,48853,48855,48857],{"class":103,"line":33032},[101,48854,36360],{"class":111},[101,48856,157],{"class":107},[101,48858,32654],{"class":111},[101,48860,48861],{"class":103,"line":33042},[101,48862,32896],{"class":170},[101,48864,48865,48867,48869,48871,48873,48875,48877],{"class":103,"line":33048},[101,48866,36373],{"class":111},[101,48868,157],{"class":107},[101,48870,32671],{"class":111},[101,48872,32674],{"class":5204},[101,48874,157],{"class":107},[101,48876,329],{"class":160},[101,48878,118],{"class":111},[101,48880,48881],{"class":103,"line":33059},[101,48882,32921],{"class":170},[101,48884,48885,48887,48889],{"class":103,"line":33065},[101,48886,36394],{"class":111},[101,48888,157],{"class":107},[101,48890,32697],{"class":111},[101,48892,48893],{"class":103,"line":33075},[101,48894,32938],{"class":170},[101,48896,48897,48899,48901,48903,48905,48907,48909],{"class":103,"line":33080},[101,48898,36407],{"class":111},[101,48900,9465],{"class":107},[101,48902,36412],{"class":111},[101,48904,566],{"class":107},[101,48906,32755],{"class":111},[101,48908,303],{"class":160},[101,48910,118],{"class":111},[101,48912,48913,48915,48917,48919,48921],{"class":103,"line":33086},[101,48914,36425],{"class":111},[101,48916,9465],{"class":107},[101,48918,32776],{"class":111},[101,48920,2936],{"class":107},[101,48922,32781],{"class":111},[101,48924,48925],{"class":103,"line":33135},[101,48926,36438],{"class":170},[101,48928,48929,48931,48933,48935,48937],{"class":103,"line":33182},[101,48930,36443],{"class":111},[101,48932,9465],{"class":107},[101,48934,32755],{"class":111},[101,48936,303],{"class":160},[101,48938,118],{"class":111},[101,48940,48941],{"class":103,"line":33187},[101,48942,33000],{"class":170},[101,48944,48945],{"class":103,"line":33193},[101,48946,33006],{"class":170},[101,48948,48949,48951,48953],{"class":103,"line":33212},[101,48950,33012],{"class":111},[101,48952,695],{"class":107},[101,48954,33017],{"class":111},[101,48956,48957],{"class":103,"line":33218},[101,48958,33023],{"class":170},[101,48960,48961],{"class":103,"line":33238},[101,48962,33029],{"class":170},[101,48964,48965,48967,48969],{"class":103,"line":33244},[101,48966,33035],{"class":111},[101,48968,695],{"class":107},[101,48970,33017],{"class":111},[101,48972,48973],{"class":103,"line":33250},[101,48974,33045],{"class":170},[101,48976,48977,48979,48981],{"class":103,"line":33260},[101,48978,33051],{"class":111},[101,48980,695],{"class":107},[101,48982,33056],{"class":111},[101,48984,48985],{"class":103,"line":33265},[101,48986,33062],{"class":170},[101,48988,48989,48991,48993],{"class":103,"line":33271},[101,48990,33068],{"class":111},[101,48992,695],{"class":107},[101,48994,33056],{"class":111},[101,48996,48997],{"class":103,"line":33287},[101,48998,2387],{"emptyLinePlaceholder":27},[101,49000,49001],{"class":103,"line":33332},[101,49002,33083],{"class":170},[101,49004,49005,49007,49009,49011,49013,49015,49017,49019,49021,49023,49025,49027,49029,49031,49033,49035,49037,49039,49041,49043],{"class":103,"line":33338},[101,49006,32440],{"class":160},[101,49008,112],{"class":111},[101,49010,3579],{"class":216},[101,49012,32448],{"class":160},[101,49014,33097],{"class":216},[101,49016,1007],{"class":160},[101,49018,33102],{"class":107},[101,49020,1057],{"class":160},[101,49022,33107],{"class":216},[101,49024,1007],{"class":160},[101,49026,33102],{"class":107},[101,49028,1057],{"class":160},[101,49030,3579],{"class":216},[101,49032,33118],{"class":111},[101,49034,643],{"class":107},[101,49036,329],{"class":160},[101,49038,33125],{"class":111},[101,49040,643],{"class":107},[101,49042,329],{"class":160},[101,49044,33132],{"class":111},[101,49046,49047,49049,49051,49053,49055,49057,49059,49061,49063,49065,49067,49069,49071,49073,49075,49077,49079,49081,49083,49085],{"class":103,"line":33344},[101,49048,32440],{"class":160},[101,49050,112],{"class":111},[101,49052,3579],{"class":216},[101,49054,32448],{"class":160},[101,49056,33146],{"class":216},[101,49058,1007],{"class":160},[101,49060,33102],{"class":107},[101,49062,1057],{"class":160},[101,49064,33155],{"class":216},[101,49066,1007],{"class":160},[101,49068,33102],{"class":107},[101,49070,1057],{"class":160},[101,49072,3579],{"class":216},[101,49074,33166],{"class":111},[101,49076,643],{"class":107},[101,49078,329],{"class":160},[101,49080,33173],{"class":111},[101,49082,643],{"class":107},[101,49084,329],{"class":160},[101,49086,33132],{"class":111},[101,49088,49089],{"class":103,"line":33350},[101,49090,2387],{"emptyLinePlaceholder":27},[101,49092,49093],{"class":103,"line":33361},[101,49094,33190],{"class":170},[101,49096,49097,49099,49101,49103,49105,49107,49109],{"class":103,"line":33367},[101,49098,2484],{"class":107},[101,49100,33198],{"class":111},[101,49102,643],{"class":107},[101,49104,329],{"class":160},[101,49106,1051],{"class":111},[101,49108,1071],{"class":107},[101,49110,33209],{"class":111},[101,49112,49113],{"class":103,"line":33373},[101,49114,33215],{"class":170},[101,49116,49117,49119,49121,49123,49125,49127,49129],{"class":103,"line":33379},[101,49118,33221],{"class":111},[101,49120,151],{"class":160},[101,49122,157],{"class":107},[101,49124,33228],{"class":111},[101,49126,643],{"class":107},[101,49128,329],{"class":160},[101,49130,33235],{"class":111},[101,49132,49133],{"class":103,"line":33397},[101,49134,33241],{"class":170},[101,49136,49137],{"class":103,"line":33411},[101,49138,33247],{"class":170},[101,49140,49141,49143,49145],{"class":103,"line":33420},[101,49142,33253],{"class":111},[101,49144,157],{"class":107},[101,49146,32303],{"class":111},[101,49148,49149],{"class":103,"line":33429},[101,49150,2387],{"emptyLinePlaceholder":27},[101,49152,49153],{"class":103,"line":33438},[101,49154,33268],{"class":170},[101,49156,49157,49159,49161,49163,49165],{"class":103,"line":33447},[101,49158,33274],{"class":111},[101,49160,157],{"class":107},[101,49162,33279],{"class":111},[101,49164,643],{"class":107},[101,49166,33284],{"class":111},[101,49168,49169,49171,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193,49195,49197,49199,49201,49203],{"class":103,"line":33453},[101,49170,32440],{"class":160},[101,49172,112],{"class":111},[101,49174,33294],{"class":216},[101,49176,1007],{"class":160},[101,49178,33299],{"class":107},[101,49180,1057],{"class":160},[101,49182,655],{"class":216},[101,49184,1007],{"class":160},[101,49186,33299],{"class":107},[101,49188,1057],{"class":160},[101,49190,33312],{"class":216},[101,49192,33315],{"class":111},[101,49194,33318],{"class":107},[101,49196,1018],{"class":160},[101,49198,33323],{"class":111},[101,49200,439],{"class":107},[101,49202,1018],{"class":160},[101,49204,30486],{"class":111},[101,49206,49207],{"class":103,"line":33459},[101,49208,36722],{"class":170},[101,49210,49211],{"class":103,"line":33467},[101,49212,36727],{"class":170},[101,49214,49215,49217,49219],{"class":103,"line":33472},[101,49216,36732],{"class":111},[101,49218,33356],{"class":216},[101,49220,118],{"class":111},[101,49222,49223],{"class":103,"line":33478},[101,49224,33376],{"class":170},[101,49226,49227,49229,49231,49233,49235,49237],{"class":103,"line":33489},[101,49228,33382],{"class":111},[101,49230,157],{"class":107},[101,49232,33387],{"class":111},[101,49234,33390],{"class":5204},[101,49236,157],{"class":107},[101,49238,1533],{"class":111},[101,49240,49241,49243,49245,49247],{"class":103,"line":33495},[101,49242,33400],{"class":216},[101,49244,970],{"class":111},[101,49246,33405],{"class":160},[101,49248,33408],{"class":111},[101,49250,49251,49253],{"class":103,"line":33515},[101,49252,33414],{"class":216},[101,49254,33417],{"class":111},[101,49256,49257,49259],{"class":103,"line":33521},[101,49258,33423],{"class":216},[101,49260,33426],{"class":111},[101,49262,49263,49265],{"class":103,"line":33527},[101,49264,33432],{"class":216},[101,49266,33435],{"class":111},[101,49268,49269,49271],{"class":103,"line":33533},[101,49270,33441],{"class":216},[101,49272,33444],{"class":111},[101,49274,49275],{"class":103,"line":33550},[101,49276,33450],{"class":111},[101,49278,49279],{"class":103,"line":33556},[101,49280,33456],{"class":170},[101,49282,49283,49285],{"class":103,"line":33562},[101,49284,4077],{"class":107},[101,49286,33464],{"class":111},[101,49288,49289],{"class":103,"line":33568},[101,49290,2387],{"emptyLinePlaceholder":27},[101,49292,49293],{"class":103,"line":33574},[101,49294,33475],{"class":170},[101,49296,49297,49299,49301],{"class":103,"line":33580},[101,49298,31936],{"class":107},[101,49300,33483],{"class":1950},[101,49302,33486],{"class":111},[101,49304,49305],{"class":103,"line":33607},[101,49306,33492],{"class":170},[101,49308,49309,49311,49313,49315,49317,49319,49321,49323],{"class":103,"line":33631},[101,49310,33498],{"class":111},[101,49312,31682],{"class":5204},[101,49314,157],{"class":107},[101,49316,112],{"class":111},[101,49318,609],{"class":160},[101,49320,489],{"class":111},[101,49322,404],{"class":160},[101,49324,30486],{"class":111},[101,49326,49327],{"class":103,"line":33637},[101,49328,33518],{"class":170},[101,49330,49331],{"class":103,"line":33643},[101,49332,33524],{"class":170},[101,49334,49335],{"class":103,"line":33649},[101,49336,33530],{"class":170},[101,49338,49339,49341,49343,49345,49347,49349,49351],{"class":103,"line":33660},[101,49340,31716],{"class":111},[101,49342,329],{"class":160},[101,49344,489],{"class":111},[101,49346,189],{"class":160},[101,49348,489],{"class":111},[101,49350,329],{"class":160},[101,49352,118],{"class":111},[101,49354,49355],{"class":103,"line":33671},[101,49356,33553],{"class":170},[101,49358,49359],{"class":103,"line":33677},[101,49360,33559],{"class":170},[101,49362,49363],{"class":103,"line":33694},[101,49364,33565],{"class":170},[101,49366,49367],{"class":103,"line":33717},[101,49368,33571],{"class":170},[101,49370,49371],{"class":103,"line":33740},[101,49372,33577],{"class":170},[101,49374,49375,49377,49379,49381,49383,49385,49387,49389,49391],{"class":103,"line":33746},[101,49376,33583],{"class":111},[101,49378,33586],{"class":216},[101,49380,33589],{"class":111},[101,49382,33592],{"class":216},[101,49384,489],{"class":111},[101,49386,33597],{"class":5204},[101,49388,157],{"class":107},[101,49390,33602],{"class":216},[101,49392,118],{"class":111},[101,49394,49395,49397,49399,49401,49403,49405,49407,49409,49411],{"class":103,"line":33751},[101,49396,33583],{"class":111},[101,49398,33586],{"class":216},[101,49400,33614],{"class":111},[101,49402,33617],{"class":216},[101,49404,489],{"class":111},[101,49406,33597],{"class":5204},[101,49408,157],{"class":107},[101,49410,33626],{"class":216},[101,49412,118],{"class":111},[101,49414,49415],{"class":103,"line":33760},[101,49416,33634],{"class":170},[101,49418,49419],{"class":103,"line":33770},[101,49420,33640],{"class":111},[101,49422,49423],{"class":103,"line":33776},[101,49424,33646],{"class":170},[101,49426,49427,49429,49431],{"class":103,"line":33781},[101,49428,33652],{"class":111},[101,49430,33655],{"class":216},[101,49432,118],{"class":111},[101,49434,49435,49437,49439],{"class":103,"line":33787},[101,49436,33663],{"class":111},[101,49438,33666],{"class":216},[101,49440,118],{"class":111},[101,49442,49443],{"class":103,"line":33800},[101,49444,33674],{"class":170},[101,49446,49447,49449,49451,49453,49455,49457,49459],{"class":103,"line":33806},[101,49448,31716],{"class":111},[101,49450,329],{"class":160},[101,49452,489],{"class":111},[101,49454,189],{"class":160},[101,49456,489],{"class":111},[101,49458,189],{"class":160},[101,49460,118],{"class":111},[101,49462,49463,49465,49467,49469,49471,49473,49475,49477,49479],{"class":103,"line":33817},[101,49464,33583],{"class":111},[101,49466,33586],{"class":216},[101,49468,33701],{"class":111},[101,49470,33592],{"class":216},[101,49472,489],{"class":111},[101,49474,33597],{"class":5204},[101,49476,157],{"class":107},[101,49478,33712],{"class":216},[101,49480,118],{"class":111},[101,49482,49483,49485,49487,49489,49491,49493,49495,49497,49499],{"class":103,"line":33828},[101,49484,33583],{"class":111},[101,49486,33586],{"class":216},[101,49488,33724],{"class":111},[101,49490,33617],{"class":216},[101,49492,489],{"class":111},[101,49494,33597],{"class":5204},[101,49496,157],{"class":107},[101,49498,33735],{"class":216},[101,49500,118],{"class":111},[101,49502,49503],{"class":103,"line":33847},[101,49504,33743],{"class":170},[101,49506,49508],{"class":103,"line":49507},219,[101,49509,33640],{"class":111},[101,49511,49513,49515,49517],{"class":103,"line":49512},220,[101,49514,33652],{"class":111},[101,49516,33586],{"class":216},[101,49518,118],{"class":111},[101,49520,49522,49524,49526],{"class":103,"line":49521},221,[101,49523,33663],{"class":111},[101,49525,33765],{"class":216},[101,49527,118],{"class":111},[101,49529,49531],{"class":103,"line":49530},222,[101,49532,33773],{"class":111},[101,49534,49536],{"class":103,"line":49535},223,[101,49537,2387],{"emptyLinePlaceholder":27},[101,49539,49541],{"class":103,"line":49540},224,[101,49542,33784],{"class":170},[101,49544,49546,49548,49550,49552,49554],{"class":103,"line":49545},225,[101,49547,1518],{"class":107},[101,49549,31209],{"class":160},[101,49551,2936],{"class":107},[101,49553,31214],{"class":216},[101,49555,3726],{"class":111},[101,49557,49559],{"class":103,"line":49558},226,[101,49560,33803],{"class":170},[101,49562,49564,49566,49568],{"class":103,"line":49563},227,[101,49565,44535],{"class":111},[101,49567,157],{"class":107},[101,49569,44540],{"class":111},[101,49571,49573,49575,49577],{"class":103,"line":49572},228,[101,49574,33820],{"class":111},[101,49576,157],{"class":107},[101,49578,33825],{"class":111},[101,49580,49582,49584,49586,49588,49590,49592,49594],{"class":103,"line":49581},229,[101,49583,33382],{"class":111},[101,49585,157],{"class":107},[101,49587,44557],{"class":111},[101,49589,33838],{"class":5204},[101,49591,157],{"class":107},[101,49593,1018],{"class":160},[101,49595,118],{"class":111},[101,49597,49599],{"class":103,"line":49598},230,[101,49600,33850],{"class":111},[21986,49602,49604],{"id":49603},"_242测试代码","2.4.2.测试代码",[10,49606,49607],{},"使用测试集进行测试与推理",[92,49609,49611],{"className":30367,"code":49610,"language":30369,"meta":20,"style":20},"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",[98,49612,49613,49619,49629,49639,49650,49660,49664,49668,49676,49681,49685,49702,49706,49710,49714,49718,49722,49754,49758,49766,49770,49782,49786,49790,49794,49798,49802,49806,49810,49814,49832,49846,49850,49860,49870,49880,49886,49890,49894,49902,49906,49922,49930,49934,49938,49946,49954,49958,49962,49966,49970,49976,49980,49990,49998,50006,50010,50014,50018,50026,50030,50046,50050,50054,50058,50070,50074,50086,50090,50094,50106,50110,50120,50124,50128,50140,50144,50152,50156,50160,50168,50172,50180,50184,50188,50192,50196,50200,50216,50224,50228,50232,50250,50256,50260,50270,50278,50286,50290,50294,50298,50302,50310,50314,50330,50334,50342,50350],{"__ignoreMap":20},[101,49614,49615,49617],{"class":103,"line":104},[101,49616,30381],{"class":107},[101,49618,30384],{"class":111},[101,49620,49621,49623,49625,49627],{"class":103,"line":21},[101,49622,30381],{"class":107},[101,49624,31404],{"class":111},[101,49626,31372],{"class":107},[101,49628,31409],{"class":111},[101,49630,49631,49633,49635,49637],{"class":103,"line":1166},[101,49632,30726],{"class":107},[101,49634,31387],{"class":111},[101,49636,30381],{"class":107},[101,49638,31392],{"class":111},[101,49640,49641,49643,49645,49647],{"class":103,"line":1181},[101,49642,30726],{"class":107},[101,49644,31357],{"class":111},[101,49646,30381],{"class":107},[101,49648,49649],{"class":111}," ImageFolder\n",[101,49651,49652,49654,49656,49658],{"class":103,"line":1187},[101,49653,30726],{"class":107},[101,49655,31903],{"class":111},[101,49657,30381],{"class":107},[101,49659,44629],{"class":111},[101,49661,49662],{"class":103,"line":1201},[101,49663,2387],{"emptyLinePlaceholder":27},[101,49665,49666],{"class":103,"line":1207},[101,49667,33940],{"class":170},[101,49669,49670,49672,49674],{"class":103,"line":1298},[101,49671,31936],{"class":107},[101,49673,33947],{"class":1950},[101,49675,31942],{"class":111},[101,49677,49678],{"class":103,"line":1304},[101,49679,49680],{"class":170},"   # 导入自己的数据集，并进行数据处理\n",[101,49682,49683],{"class":103,"line":1316},[101,49684,47950],{"class":170},[101,49686,49687,49689,49691,49693,49695,49697,49700],{"class":103,"line":1599},[101,49688,47955],{"class":160},[101,49690,157],{"class":107},[101,49692,781],{"class":107},[101,49694,362],{"class":216},[101,49696,669],{"class":160},[101,49698,49699],{"class":47966},"\u002Fdata\u002Ftest",[101,49701,25122],{"class":216},[101,49703,49704],{"class":103,"line":1604},[101,49705,2387],{"emptyLinePlaceholder":27},[101,49707,49708],{"class":103,"line":1610},[101,49709,47978],{"class":170},[101,49711,49712],{"class":103,"line":1615},[101,49713,47983],{"class":170},[101,49715,49716],{"class":103,"line":1629},[101,49717,47988],{"class":170},[101,49719,49720],{"class":103,"line":1634},[101,49721,47993],{"class":170},[101,49723,49724,49726,49728,49730,49732,49734,49736,49738,49740,49742,49744,49746,49748,49750,49752],{"class":103,"line":1640},[101,49725,47998],{"class":111},[101,49727,157],{"class":107},[101,49729,48003],{"class":111},[101,49731,48006],{"class":160},[101,49733,489],{"class":111},[101,49735,48011],{"class":160},[101,49737,489],{"class":111},[101,49739,48016],{"class":160},[101,49741,48019],{"class":111},[101,49743,48022],{"class":160},[101,49745,489],{"class":111},[101,49747,48027],{"class":160},[101,49749,489],{"class":111},[101,49751,48032],{"class":160},[101,49753,4644],{"class":111},[101,49755,49756],{"class":103,"line":1661},[101,49757,48039],{"class":170},[101,49759,49760,49762,49764],{"class":103,"line":1666},[101,49761,48044],{"class":111},[101,49763,157],{"class":107},[101,49765,48049],{"class":111},[101,49767,49768],{"class":103,"line":1680},[101,49769,48054],{"class":170},[101,49771,49772,49774,49776,49778,49780],{"class":103,"line":1685},[101,49773,48059],{"class":111},[101,49775,31490],{"class":160},[101,49777,489],{"class":111},[101,49779,31490],{"class":160},[101,49781,42611],{"class":111},[101,49783,49784],{"class":103,"line":1714},[101,49785,48072],{"class":170},[101,49787,49788],{"class":103,"line":1719},[101,49789,48077],{"class":111},[101,49791,49792],{"class":103,"line":1736},[101,49793,48082],{"class":111},[101,49795,49796],{"class":103,"line":1741},[101,49797,48087],{"class":170},[101,49799,49800],{"class":103,"line":1746},[101,49801,48092],{"class":170},[101,49803,49804],{"class":103,"line":1751},[101,49805,2387],{"emptyLinePlaceholder":27},[101,49807,49808],{"class":103,"line":1765},[101,49809,48101],{"class":170},[101,49811,49812],{"class":103,"line":1770},[101,49813,48106],{"class":170},[101,49815,49816,49818,49820,49822,49824,49826,49828,49830],{"class":103,"line":2564},[101,49817,33954],{"class":111},[101,49819,157],{"class":107},[101,49821,48115],{"class":111},[101,49823,48118],{"class":160},[101,49825,489],{"class":111},[101,49827,48123],{"class":5204},[101,49829,157],{"class":107},[101,49831,48128],{"class":111},[101,49833,49834,49836,49838,49840,49842,49844],{"class":103,"line":2578},[101,49835,34011],{"class":111},[101,49837,157],{"class":107},[101,49839,31523],{"class":111},[101,49841,31526],{"class":5204},[101,49843,157],{"class":107},[101,49845,34022],{"class":111},[101,49847,49848],{"class":103,"line":2586},[101,49849,34027],{"class":170},[101,49851,49852,49854,49856,49858],{"class":103,"line":2591},[101,49853,34032],{"class":5204},[101,49855,157],{"class":107},[101,49857,329],{"class":160},[101,49859,31455],{"class":111},[101,49861,49862,49864,49866,49868],{"class":103,"line":2597},[101,49863,34043],{"class":5204},[101,49865,157],{"class":107},[101,49867,31465],{"class":160},[101,49869,31455],{"class":111},[101,49871,49872,49874,49876,49878],{"class":103,"line":2603},[101,49873,34054],{"class":5204},[101,49875,157],{"class":107},[101,49877,303],{"class":160},[101,49879,118],{"class":111},[101,49881,49882,49884],{"class":103,"line":2608},[101,49883,4077],{"class":107},[101,49885,34067],{"class":111},[101,49887,49888],{"class":103,"line":7936},[101,49889,2387],{"emptyLinePlaceholder":27},[101,49891,49892],{"class":103,"line":7960},[101,49893,34076],{"class":170},[101,49895,49896,49898,49900],{"class":103,"line":7965},[101,49897,31936],{"class":107},[101,49899,34083],{"class":1950},[101,49901,34086],{"class":111},[101,49903,49904],{"class":103,"line":7971},[101,49905,34091],{"class":170},[101,49907,49908,49910,49912,49914,49916,49918,49920],{"class":103,"line":7998},[101,49909,31226],{"class":111},[101,49911,157],{"class":107},[101,49913,31233],{"class":216},[101,49915,1691],{"class":107},[101,49917,31238],{"class":111},[101,49919,1688],{"class":107},[101,49921,34108],{"class":216},[101,49923,49924,49926,49928],{"class":103,"line":8003},[101,49925,31278],{"class":111},[101,49927,157],{"class":107},[101,49929,32278],{"class":111},[101,49931,49932],{"class":103,"line":8009},[101,49933,2387],{"emptyLinePlaceholder":27},[101,49935,49936],{"class":103,"line":8021},[101,49937,34125],{"class":170},[101,49939,49940,49942,49944],{"class":103,"line":8033},[101,49941,34130],{"class":111},[101,49943,157],{"class":107},[101,49945,32331],{"class":160},[101,49947,49948,49950,49952],{"class":103,"line":8045},[101,49949,34139],{"class":111},[101,49951,157],{"class":107},[101,49953,3072],{"class":160},[101,49955,49956],{"class":103,"line":9704},[101,49957,2387],{"emptyLinePlaceholder":27},[101,49959,49960],{"class":103,"line":9729},[101,49961,34152],{"class":170},[101,49963,49964],{"class":103,"line":9752},[101,49965,34157],{"class":170},[101,49967,49968],{"class":103,"line":9776},[101,49969,34162],{"class":170},[101,49971,49972,49974],{"class":103,"line":9781},[101,49973,34167],{"class":107},[101,49975,32873],{"class":111},[101,49977,49978],{"class":103,"line":9786},[101,49979,34174],{"class":170},[101,49981,49982,49984,49986,49988],{"class":103,"line":9791},[101,49983,3390],{"class":107},[101,49985,34181],{"class":111},[101,49987,26032],{"class":107},[101,49989,34186],{"class":111},[101,49991,49992,49994,49996],{"class":103,"line":9800},[101,49993,34191],{"class":111},[101,49995,157],{"class":107},[101,49997,34196],{"class":111},[101,49999,50000,50002,50004],{"class":103,"line":9805},[101,50001,34201],{"class":111},[101,50003,157],{"class":107},[101,50005,34206],{"class":111},[101,50007,50008],{"class":103,"line":9811},[101,50009,34211],{"class":170},[101,50011,50012],{"class":103,"line":9832},[101,50013,32864],{"class":111},[101,50015,50016],{"class":103,"line":9838},[101,50017,34220],{"class":170},[101,50019,50020,50022,50024],{"class":103,"line":9852},[101,50021,32649],{"class":111},[101,50023,157],{"class":107},[101,50025,34229],{"class":111},[101,50027,50028],{"class":103,"line":9858},[101,50029,34234],{"class":170},[101,50031,50032,50034,50036,50038,50040,50042,50044],{"class":103,"line":9885},[101,50033,32666],{"class":111},[101,50035,157],{"class":107},[101,50037,32671],{"class":111},[101,50039,32674],{"class":5204},[101,50041,157],{"class":107},[101,50043,329],{"class":160},[101,50045,118],{"class":111},[101,50047,50048],{"class":103,"line":9894},[101,50049,34255],{"class":170},[101,50051,50052],{"class":103,"line":9900},[101,50053,34260],{"class":170},[101,50055,50056],{"class":103,"line":9908},[101,50057,34265],{"class":170},[101,50059,50060,50062,50064,50066,50068],{"class":103,"line":9913},[101,50061,34270],{"class":111},[101,50063,9465],{"class":107},[101,50065,32776],{"class":111},[101,50067,2936],{"class":107},[101,50069,34279],{"class":111},[101,50071,50072],{"class":103,"line":16592},[101,50073,34284],{"class":170},[101,50075,50076,50078,50080,50082,50084],{"class":103,"line":16598},[101,50077,34289],{"class":111},[101,50079,9465],{"class":107},[101,50081,34294],{"class":111},[101,50083,303],{"class":160},[101,50085,118],{"class":111},[101,50087,50088],{"class":103,"line":16621},[101,50089,2387],{"emptyLinePlaceholder":27},[101,50091,50092],{"class":103,"line":16627},[101,50093,34307],{"class":170},[101,50095,50096,50098,50100,50102,50104],{"class":103,"line":16650},[101,50097,34312],{"class":111},[101,50099,157],{"class":107},[101,50101,34317],{"class":111},[101,50103,695],{"class":107},[101,50105,34322],{"class":111},[101,50107,50108],{"class":103,"line":16664},[101,50109,34327],{"class":170},[101,50111,50112,50114,50116,50118],{"class":103,"line":16684},[101,50113,32440],{"class":160},[101,50115,112],{"class":111},[101,50117,34336],{"class":216},[101,50119,34339],{"class":111},[101,50121,50122],{"class":103,"line":16690},[101,50123,2387],{"emptyLinePlaceholder":27},[101,50125,50126],{"class":103,"line":16701},[101,50127,34348],{"class":170},[101,50129,50130,50132,50134,50136,50138],{"class":103,"line":16724},[101,50131,1518],{"class":107},[101,50133,31209],{"class":160},[101,50135,2936],{"class":107},[101,50137,31214],{"class":216},[101,50139,3726],{"class":111},[101,50141,50142],{"class":103,"line":16746},[101,50143,34365],{"class":170},[101,50145,50146,50148,50150],{"class":103,"line":16751},[101,50147,31278],{"class":111},[101,50149,157],{"class":107},[101,50151,44540],{"class":111},[101,50153,50154],{"class":103,"line":16757},[101,50155,34378],{"class":170},[101,50157,50158],{"class":103,"line":16771},[101,50159,34383],{"class":170},[101,50161,50162,50164,50166],{"class":103,"line":16784},[101,50163,34388],{"class":111},[101,50165,34391],{"class":216},[101,50167,30486],{"class":111},[101,50169,50170],{"class":103,"line":16789},[101,50171,34398],{"class":170},[101,50173,50174,50176,50178],{"class":103,"line":16803},[101,50175,34011],{"class":111},[101,50177,157],{"class":107},[101,50179,34407],{"class":111},[101,50181,50182],{"class":103,"line":16808},[101,50183,34412],{"class":170},[101,50185,50186],{"class":103,"line":16814},[101,50187,34417],{"class":111},[101,50189,50190],{"class":103,"line":16819},[101,50191,2387],{"emptyLinePlaceholder":27},[101,50193,50194],{"class":103,"line":16833},[101,50195,34426],{"class":170},[101,50197,50198],{"class":103,"line":16838},[101,50199,34431],{"class":170},[101,50201,50202,50204,50206,50208,50210,50212,50214],{"class":103,"line":16843},[101,50203,31226],{"class":111},[101,50205,157],{"class":107},[101,50207,31233],{"class":216},[101,50209,1691],{"class":107},[101,50211,31238],{"class":111},[101,50213,1688],{"class":107},[101,50215,34108],{"class":216},[101,50217,50218,50220,50222],{"class":103,"line":16857},[101,50219,31278],{"class":111},[101,50221,157],{"class":107},[101,50223,32278],{"class":111},[101,50225,50226],{"class":103,"line":16869},[101,50227,34460],{"class":170},[101,50229,50230],{"class":103,"line":16874},[101,50231,34465],{"class":170},[101,50233,50234,50236,50238,50240,50243,50245,50248],{"class":103,"line":16887},[101,50235,34470],{"class":111},[101,50237,157],{"class":107},[101,50239,1001],{"class":111},[101,50241,50242],{"class":216},"'猫'",[101,50244,489],{"class":111},[101,50246,50247],{"class":216},"'狗'",[101,50249,33235],{"class":111},[101,50251,50252,50254],{"class":103,"line":16892},[101,50253,34167],{"class":107},[101,50255,32873],{"class":111},[101,50257,50258],{"class":103,"line":16897},[101,50259,34535],{"class":170},[101,50261,50262,50264,50266,50268],{"class":103,"line":16902},[101,50263,3390],{"class":107},[101,50265,34542],{"class":111},[101,50267,26032],{"class":107},[101,50269,34186],{"class":111},[101,50271,50272,50274,50276],{"class":103,"line":16915},[101,50273,32599],{"class":111},[101,50275,157],{"class":107},[101,50277,32604],{"class":111},[101,50279,50280,50282,50284],{"class":103,"line":16920},[101,50281,32614],{"class":111},[101,50283,157],{"class":107},[101,50285,32619],{"class":111},[101,50287,50288],{"class":103,"line":32622},[101,50289,2387],{"emptyLinePlaceholder":27},[101,50291,50292],{"class":103,"line":32628},[101,50293,34571],{"class":170},[101,50295,50296],{"class":103,"line":32634},[101,50297,32864],{"class":111},[101,50299,50300],{"class":103,"line":32640},[101,50301,34580],{"class":170},[101,50303,50304,50306,50308],{"class":103,"line":32646},[101,50305,32649],{"class":111},[101,50307,157],{"class":107},[101,50309,32654],{"class":111},[101,50311,50312],{"class":103,"line":32657},[101,50313,34593],{"class":170},[101,50315,50316,50318,50320,50322,50324,50326,50328],{"class":103,"line":32663},[101,50317,32666],{"class":111},[101,50319,157],{"class":107},[101,50321,32671],{"class":111},[101,50323,32674],{"class":5204},[101,50325,157],{"class":107},[101,50327,329],{"class":160},[101,50329,118],{"class":111},[101,50331,50332],{"class":103,"line":32683},[101,50333,34614],{"class":170},[101,50335,50336,50338,50340],{"class":103,"line":32689},[101,50337,34619],{"class":111},[101,50339,157],{"class":107},[101,50341,34624],{"class":111},[101,50343,50344,50346,50348],{"class":103,"line":32700},[101,50345,34629],{"class":111},[101,50347,157],{"class":107},[101,50349,34634],{"class":111},[101,50351,50352,50354,50356,50358,50360,50362,50364,50366],{"class":103,"line":32706},[101,50353,34639],{"class":160},[101,50355,112],{"class":111},[101,50357,34644],{"class":216},[101,50359,34647],{"class":111},[101,50361,34650],{"class":216},[101,50363,489],{"class":111},[101,50365,34655],{"class":216},[101,50367,34658],{"class":111},[5114,50369,50370],{},"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":20,"searchDepth":21,"depth":21,"links":50372},[50373,50374,50375,50376],{"id":30580,"depth":1166,"text":30581},{"id":37828,"depth":1166,"text":37829},{"id":41261,"depth":1166,"text":41262},{"id":45270,"depth":1166,"text":45271},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30572,"description":23365},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50383,"title":50384,"body":50385,"description":23365,"extension":24,"meta":50392,"navigation":27,"path":50393,"seo":50394,"stem":50395,"__hash__":50396},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50386,"toc":50390},[50387],[39,50388,50384],{"id":50389},"_3yolo模型学习",{"title":20,"searchDepth":21,"depth":21,"links":50391},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50384,"description":23365},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50398,"title":50399,"body":50400,"description":50407,"extension":24,"meta":50408,"navigation":27,"path":50410,"seo":50411,"stem":50412,"__hash__":50413},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50401,"toc":50405},[50402],[10,50403,50404],{},"yolo模型还未补充",{"title":20,"searchDepth":21,"depth":21,"links":50406},[],"深度学习学习",{"category":50409},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50399,"description":50407},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50415,"title":50416,"body":50417,"description":23365,"extension":24,"meta":50442,"navigation":27,"path":50443,"seo":50444,"stem":50445,"__hash__":50446},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50418,"toc":50440},[50419,50422,50425,50430,50437],[39,50420,50416],{"id":50421},"_1工具",[10,50423,50424],{},"提示错误插件：有问题会提前报错",[10,50426,50427],{},[1449,50428],{"alt":20,"src":50429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[10,50431,50432],{},[14,50433,50436],{"href":50434,"rel":50435},"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",[18],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[10,50438,50439],{},"alt键加上下箭头可以实现语句的移动",{"title":20,"searchDepth":21,"depth":21,"links":50441},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50416,"description":23365},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50448,"title":50449,"body":50450,"description":23365,"extension":24,"meta":53314,"navigation":27,"path":53315,"seo":53316,"stem":53317,"__hash__":53318},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50451,"toc":53265},[50452,50455,50459,50463,50468,50471,50476,50480,50487,50492,50499,50504,50511,50516,50520,50525,50528,50532,50537,50541,50546,50549,50552,50555,50558,50561,50564,50567,50570,50575,50580,50585,50589,50592,50595,50599,50604,50607,50615,50620,50637,50645,50650,50655,50660,50665,50670,50673,50678,50683,50687,50696,50701,50706,50710,50715,50718,50722,50727,50735,50740,50745,50748,50753,50758,50763,50766,50769,50772,50777,50782,50785,50790,50793,50798,50801,50804,50807,50812,50815,50818,50833,50838,50843,50848,50851,50854,50857,50871,50874,50879,50884,50887,50890,50893,50896,50899,50902,50905,50909,50913,50918,50922,50925,50930,50935,50938,50943,50946,50950,50955,50958,50961,50964,50967,50970,50973,50976,50979,50982,50986,50991,50996,51001,51004,51007,51011,51016,51019,51023,51026,51029,51034,51037,51040,51044,51048,51051,51056,51061,51064,51093,51098,51103,51108,51113,51117,51122,51126,51131,51134,51138,51142,51147,51151,51156,51161,51165,51170,51173,51175,51178,51183,51187,51192,51196,51200,51205,51210,51215,51220,51224,51229,51234,51239,51242,51245,51250,51253,51258,51263,51268,51273,51277,52084,52088,52431,52436,52439,52442,52445,52448,52451,52454,52457,52460,52462,52465,52467,52470,52474,52479,52482,52485,52488,52492,52497,52502,52522,52525,52529,52534,52539,52556,52560,52589,52593,52615,52617,52656,52664,52670,52674,52677,52680,52685,52690,52693,52696,52699,52704,52709,52712,52715,52718,52721,52724,52727,52730,52733,52736,52739,52742,52744,52747,52750,52753,52756,52759,52762,52765,52768,52772,52777,52780,52785,52788,52791,52794,52797,52800,52803,52806,52808,52811,52814,52817,52820,52823,52826,52830,52833,52842,52845,52850,52853,52858,52861,52864,52867,52870,52873,52876,52879,52883,52887,52890,52893,52898,52903,52908,52912,52917,52922,52925,52928,52931,52934,52937,52942,52945,52950,52952,52957,52960,52964,52969,52972,52975,52980,52984,52987,52992,52995,52998,53027,53032,53035,53038,53041,53044,53047,53051,53054,53140,53144,53147,53152,53157,53164,53167,53170,53173,53176,53179,53184,53189,53192,53195,53198,53201,53204,53207,53210,53213,53216,53218,53221,53225,53230,53235,53240,53243,53248,53253,53256,53259,53262],[39,50453,50449],{"id":50454},"_2基础语法",[43,50456,50458],{"id":50457},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[72,50460,50462],{"id":50461},"_211-js组成","2.1.1 js组成",[55,50464,50465],{},[58,50466,50467],{},"js是编程语言，html和css不是编程语言，是标记语言",[10,50469,50470],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[55,50472,50473],{"start":21},[58,50474,50475],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[72,50477,50479],{"id":50478},"_212-js书写位置","2.1.2 js书写位置",[55,50481,50482],{},[58,50483,50484],{},[261,50485,50486],{},"内部 JavaScript",[10,50488,50489],{},[1449,50490],{"alt":20,"src":50491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[55,50493,50494],{"start":21},[58,50495,50496],{},[261,50497,50498],{},"外部 JavaScript",[10,50500,50501],{},[1449,50502],{"alt":20,"src":50503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[55,50505,50506],{"start":1166},[58,50507,50508],{},[261,50509,50510],{},"内联 JavaScript",[10,50512,50513],{},[1449,50514],{"alt":20,"src":50515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[72,50517,50519],{"id":50518},"_213-javascript注释","2.1.3 JavaScript注释",[10,50521,50522],{},[1449,50523],{"alt":20,"src":50524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[10,50526,50527],{},"alt+shift+a一定要记住！",[72,50529,50531],{"id":50530},"_214-javascript结束符","2.1.4 JavaScript结束符",[10,50533,50534],{},[1449,50535],{"alt":20,"src":50536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[72,50538,50540],{"id":50539},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[55,50542,50543],{},[58,50544,50545],{},"输出语法：",[10,50547,50548],{},"①document.write('要出的内容')",[10,50550,50551],{},"向body内输出内容；",[10,50553,50554],{},"如果输出的内容写的是标签，也会被解析cheng",[10,50556,50557],{},"②alert('要出的内容')",[10,50559,50560],{},"页面弹出警告对话框",[10,50562,50563],{},"③console.log('控制台打印')",[10,50565,50566],{},"控制台输出语法，程序员调试使用",[10,50568,50569],{},"输入log就行，自动生成：",[10,50571,50572],{},[1449,50573],{"alt":20,"src":50574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[55,50576,50577],{"start":21},[58,50578,50579],{},"输入语法：",[10,50581,50582],{},[1449,50583],{"alt":20,"src":50584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[72,50586,50588],{"id":50587},"_2116-字面量","21.1.6 字面量",[10,50590,50591],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[10,50593,50594],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[43,50596,50598],{"id":50597},"_22-变量","2.2 变量",[55,50600,50601],{},[58,50602,50603],{},"变量声明",[10,50605,50606],{},"let 变量名",[1118,50608,50609,50612],{},[58,50610,50611],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[58,50613,50614],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[55,50616,50617],{"start":21},[58,50618,50619],{},"变量赋值",[92,50621,50625],{"className":50622,"code":50623,"language":50624,"meta":20,"style":20},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[98,50626,50627,50632],{"__ignoreMap":20},[101,50628,50629],{"class":103,"line":104},[101,50630,50631],{"class":111},"let age\n",[101,50633,50634],{"class":103,"line":21},[101,50635,50636],{"class":111},"age=18\n",[55,50638,50639,50642],{"start":1166},[58,50640,50641],{},"连这些（变量的初始化）：let age=18",[58,50643,50644],{},"更新变量",[10,50646,50647],{},[1449,50648],{"alt":20,"src":50649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[55,50651,50652],{"start":1187},[58,50653,50654],{},"声明多个变量",[10,50656,50657],{},[1449,50658],{"alt":20,"src":50659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[55,50661,50662],{"start":1201},[58,50663,50664],{},"变量命名规则与规范",[10,50666,50667],{},[1449,50668],{"alt":20,"src":50669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[10,50671,50672],{},"遵守小驼峰！",[55,50674,50675],{"start":1207},[58,50676,50677],{},"变量拓展-let和var的区别",[10,50679,50680],{},[1449,50681],{"alt":20,"src":50682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[43,50684,50686],{"id":50685},"_23-数组","2.3 数组",[92,50688,50690],{"className":50622,"code":50689,"language":50624,"meta":20,"style":20},"let arr = []\n",[98,50691,50692],{"__ignoreMap":20},[101,50693,50694],{"class":103,"line":104},[101,50695,50689],{"class":111},[10,50697,50698],{},[1449,50699],{"alt":20,"src":50700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[10,50702,50703],{},[1449,50704],{"alt":20,"src":50705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[43,50707,50709],{"id":50708},"_24-常量","2.4 常量",[10,50711,50712],{},[1449,50713],{"alt":20,"src":50714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[10,50716,50717],{},"const — 类似于 let ，但是变量的值无法被修改",[43,50719,50721],{"id":50720},"_25-数据类型","2.5 数据类型",[10,50723,50724],{},[1449,50725],{"alt":20,"src":50726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[55,50728,50729,50732],{},[58,50730,50731],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[58,50733,50734],{},"算数运算符：",[10,50736,50737],{},[1449,50738],{"alt":20,"src":50739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[55,50741,50742],{"start":1166},[58,50743,50744],{},"数字类型（Number）",[10,50746,50747],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[10,50749,50750],{},[1449,50751],{"alt":20,"src":50752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[55,50754,50755],{"start":1181},[58,50756,50757],{},"字符串类型（string）",[10,50759,50760],{},[1449,50761],{"alt":20,"src":50762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[10,50764,50765],{},"反引号也是可以使用的",[10,50767,50768],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[10,50770,50771],{},"例如：document.write(\"我今年\"+age+\"岁\")",[55,50773,50774],{"start":1187},[58,50775,50776],{},"模板字符串",[10,50778,50779],{},[1449,50780],{"alt":20,"src":50781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[10,50783,50784],{},"类似于python的字符串格式化",[55,50786,50787],{"start":1201},[58,50788,50789],{},"布尔类型",[10,50791,50792],{},"true 和 false",[55,50794,50795],{"start":1207},[58,50796,50797],{},"未定义类型（underfined）",[10,50799,50800],{},"表示没有赋值",[10,50802,50803],{},"未定义类型是比较特殊的类型，只有一个值undefined",[10,50805,50806],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[55,50808,50809],{"start":1298},[58,50810,50811],{},"null（空类型）",[10,50813,50814],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[10,50816,50817],{},"赋值了，但是内容为空",[92,50819,50821],{"className":50622,"code":50820,"language":50624,"meta":20,"style":20},"typeof null\n输出的是'object'，是一个对象数据类型\n",[98,50822,50823,50828],{"__ignoreMap":20},[101,50824,50825],{"class":103,"line":104},[101,50826,50827],{"class":111},"typeof null\n",[101,50829,50830],{"class":103,"line":21},[101,50831,50832],{"class":111},"输出的是'object'，是一个对象数据类型\n",[55,50834,50835],{"start":1304},[58,50836,50837],{},"控制台检测数据类型",[10,50839,50840],{},[1449,50841],{"alt":20,"src":50842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[55,50844,50845],{"start":1316},[58,50846,50847],{},"类型转换",[10,50849,50850],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[10,50852,50853],{},"转换方式：隐式转换和显示转换",[10,50855,50856],{},"①隐式转换",[1118,50858,50859,50862,50865,50868],{},[58,50860,50861],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[58,50863,50864],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[58,50866,50867],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[58,50869,50870],{},"任何数据和字符串相加结果都是字符串",[10,50872,50873],{},"②显示转换",[10,50875,50876],{},[1449,50877],{"alt":20,"src":50878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[10,50880,50881],{},[1449,50882],{"alt":20,"src":50883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[10,50885,50886],{},"在输入的时候要用好隐式转换，简单写起来",[10,50888,50889],{},"let num = +prompt(’请输入数字：‘)",[10,50891,50892],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[10,50894,50895],{},"console.log(parseInt('12.333px'))",[10,50897,50898],{},"输出为：12",[10,50900,50901],{},"console.log(parseInt('a'a'a12.333px'))",[10,50903,50904],{},"输出：NaN",[43,50906,50908],{"id":50907},"_26-运算符","2.6 运算符",[72,50910,50912],{"id":50911},"_261-赋值运算符","2.6.1 赋值运算符",[10,50914,50915],{},[1449,50916],{"alt":20,"src":50917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[72,50919,50921],{"id":50920},"_262-一元运算符","2.6.2 一元运算符",[10,50923,50924],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[10,50926,50927],{},[1449,50928],{"alt":20,"src":50929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[10,50931,50932],{},[1449,50933],{"alt":20,"src":50934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[10,50936,50937],{},"两者的区别：",[10,50939,50940],{},[1449,50941],{"alt":20,"src":50942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[10,50944,50945],{},"前置先自加；后置后加，代码执行完之后再加",[72,50947,50949],{"id":50948},"_263-比较运算符","2.6.3 比较运算符",[10,50951,50952],{},[1449,50953],{"alt":20,"src":50954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[10,50956,50957],{},"比较运算符也有隐式转换",[10,50959,50960],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[10,50962,50963],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[10,50965,50966],{},"要使用三等，开发的时候",[10,50968,50969],{},"NaN不等于任何人，包括它自己",[10,50971,50972],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[10,50974,50975],{},"7\u002F10=0.7",[10,50977,50978],{},"最后：0.5+0.2=0.7",[10,50980,50981],{},"字符串比较，比较的是字符对应的ASCII码",[72,50983,50985],{"id":50984},"_264-逻辑运算符","2.6.4 逻辑运算符",[10,50987,50988],{},[1449,50989],{"alt":20,"src":50990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[10,50992,50993],{},[1449,50994],{"alt":20,"src":50995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[10,50997,50998],{},[1449,50999],{"alt":20,"src":51000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[10,51002,51003],{},"上述题目选D",[10,51005,51006],{},"与真2假1；或真1假2",[72,51008,51010],{"id":51009},"_265-运算符优先级","2.6.5 运算符优先级",[10,51012,51013],{},[1449,51014],{"alt":20,"src":51015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[10,51017,51018],{},"先算逻辑与，后算逻辑或",[43,51020,51022],{"id":51021},"_27-语句","2.7 语句",[10,51024,51025],{},"表达式：是可以被求值的代码，会有结果给我们",[10,51027,51028],{},"语句：语句是可以被执行的代码，例如prompt()",[10,51030,51031],{},[1449,51032],{"alt":20,"src":51033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[10,51035,51036],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[10,51038,51039],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[72,51041,51043],{"id":51042},"_271-分支语句","2.7.1 分支语句",[21986,51045,51047],{"id":51046},"_2711-if分支语句","2.7.1.1 if分支语句",[10,51049,51050],{},"if语句单行简单的话，可以不写{}，写在一行就行",[55,51052,51053],{},[58,51054,51055],{},"单分支语句",[10,51057,51058],{},[1449,51059],{"alt":20,"src":51060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[10,51062,51063],{},"除了0，所有数字都为真",[92,51065,51067],{"className":50622,"code":51066,"language":50624,"meta":20,"style":20},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[98,51068,51069,51074,51079,51084,51088],{"__ignoreMap":20},[101,51070,51071],{"class":103,"line":104},[101,51072,51073],{"class":111},"if（0) {\n",[101,51075,51076],{"class":103,"line":21},[101,51077,51078],{"class":111},"    let a=1\n",[101,51080,51081],{"class":103,"line":1166},[101,51082,51083],{"class":111},"    alert(typeof a)\n",[101,51085,51086],{"class":103,"line":1181},[101,51087,1552],{"class":111},[101,51089,51090],{"class":103,"line":1187},[101,51091,51092],{"class":111},"不输出，括号为假\n",[55,51094,51095],{"start":21},[58,51096,51097],{},"双分支语句",[10,51099,51100],{},[1449,51101],{"alt":20,"src":51102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[55,51104,51105],{"start":1166},[58,51106,51107],{},"多分支语句",[10,51109,51110],{},[1449,51111],{"alt":20,"src":51112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21986,51114,51116],{"id":51115},"_2712-三元运算符","2.7.1.2 三元运算符",[10,51118,51119],{},[1449,51120],{"alt":20,"src":51121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21986,51123,51125],{"id":51124},"_2713-switch语句","2.7.1.3 switch语句",[10,51127,51128],{},[1449,51129],{"alt":20,"src":51130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[10,51132,51133],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[72,51135,51137],{"id":51136},"_272-循环语句","2.7.2 循环语句",[21986,51139,51141],{"id":51140},"_2721-断点演示","2.7.2.1 断点演示",[10,51143,51144],{},[1449,51145],{"alt":20,"src":51146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21986,51148,51150],{"id":51149},"_2722-while循环","2.7.2.2 while循环",[10,51152,51153],{},[1449,51154],{"alt":20,"src":51155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[10,51157,51158],{},[1449,51159],{"alt":20,"src":51160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21986,51162,51164],{"id":51163},"_2723-for循环","2.7.2.3 for循环",[10,51166,51167],{},[1449,51168],{"alt":20,"src":51169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[10,51171,51172],{},"for(;;) {",[10,51174,1057],{},[10,51176,51177],{},"表示无限循环",[10,51179,51180],{},[1449,51181],{"alt":20,"src":51182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21986,51184,51186],{"id":51185},"_2724-循环的退出","2.7.2.4 循环的退出",[10,51188,51189],{},[1449,51190],{"alt":20,"src":51191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[43,51193,51195],{"id":51194},"_28-数组","2.8 数组",[72,51197,51199],{"id":51198},"_281-基础认识","2.8.1 基础认识",[10,51201,51202],{},[1449,51203],{"alt":20,"src":51204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[10,51206,51207],{},[1449,51208],{"alt":20,"src":51209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[10,51211,51212],{},[1449,51213],{"alt":20,"src":51214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[10,51216,51217],{},[1449,51218],{"alt":20,"src":51219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[72,51221,51223],{"id":51222},"_282-操作数组","2.8.2 操作数组",[10,51225,51226],{},[1449,51227],{"alt":20,"src":51228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[55,51230,51231],{},[58,51232,51233],{},"添加元素",[10,51235,51236],{},[1449,51237],{"alt":20,"src":51238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[10,51240,51241],{},"console.log(arr.push('green'))",[10,51243,51244],{},"输出结果：为新数组的长度",[10,51246,51247],{},[1449,51248],{"alt":20,"src":51249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[10,51251,51252],{},"push用的非常多，一定要记住",[55,51254,51255],{},[58,51256,51257],{},"删除元素",[10,51259,51260],{},[1449,51261],{"alt":20,"src":51262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[10,51264,51265],{},[1449,51266],{"alt":20,"src":51267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[10,51269,51270],{},[1449,51271],{"alt":20,"src":51272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[72,51274,51276],{"id":51275},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[92,51278,51280],{"className":50622,"code":51279,"language":50624,"meta":20,"style":20},"\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",[98,51281,51282,51297,51313,51317,51326,51344,51368,51390,51404,51412,51419,51431,51442,51446,51450,51457,51469,51484,51497,51516,51533,51548,51560,51572,51584,51588,51592,51603,51613,51625,51637,51649,51660,51664,51668,51680,51684,51698,51702,51706,51717,51731,51743,51757,51761,51770,51779,51783,51792,51796,51805,51810,51815,51828,51856,51861,51866,51891,51896,51900,51905,51910,51925,51929,51934,51964,51976,51992,52008,52022,52027,52034,52038,52043,52056,52064,52072,52076],{"__ignoreMap":20},[101,51283,51284,51287,51291,51294],{"class":103,"line":104},[101,51285,51286],{"class":111},"\u003C!",[101,51288,51290],{"class":51289},"s9eBZ","DOCTYPE",[101,51292,51293],{"class":1950}," html",[101,51295,51296],{"class":111},">\n",[101,51298,51299,51301,51303,51306,51308,51311],{"class":103,"line":21},[101,51300,1021],{"class":111},[101,51302,50624],{"class":51289},[101,51304,51305],{"class":1950}," lang",[101,51307,157],{"class":111},[101,51309,51310],{"class":216},"\"en\"",[101,51312,51296],{"class":111},[101,51314,51315],{"class":103,"line":1166},[101,51316,2387],{"emptyLinePlaceholder":27},[101,51318,51319,51321,51324],{"class":103,"line":1181},[101,51320,1021],{"class":111},[101,51322,51323],{"class":51289},"head",[101,51325,51296],{"class":111},[101,51327,51328,51331,51334,51337,51339,51342],{"class":103,"line":1187},[101,51329,51330],{"class":111},"    \u003C",[101,51332,51333],{"class":51289},"meta",[101,51335,51336],{"class":1950}," charset",[101,51338,157],{"class":111},[101,51340,51341],{"class":216},"\"UTF-8\"",[101,51343,51296],{"class":111},[101,51345,51346,51348,51350,51353,51355,51358,51361,51363,51366],{"class":103,"line":1201},[101,51347,51330],{"class":111},[101,51349,51333],{"class":51289},[101,51351,51352],{"class":1950}," http-equiv",[101,51354,157],{"class":111},[101,51356,51357],{"class":216},"\"X-UA-Compatible\"",[101,51359,51360],{"class":1950}," content",[101,51362,157],{"class":111},[101,51364,51365],{"class":216},"\"IE=edge\"",[101,51367,51296],{"class":111},[101,51369,51370,51372,51374,51376,51378,51381,51383,51385,51388],{"class":103,"line":1207},[101,51371,51330],{"class":111},[101,51373,51333],{"class":51289},[101,51375,14908],{"class":1950},[101,51377,157],{"class":111},[101,51379,51380],{"class":216},"\"viewport\"",[101,51382,51360],{"class":1950},[101,51384,157],{"class":111},[101,51386,51387],{"class":216},"\"width=device-width, initial-scale=1.0\"",[101,51389,51296],{"class":111},[101,51391,51392,51394,51397,51400,51402],{"class":103,"line":1298},[101,51393,51330],{"class":111},[101,51395,51396],{"class":51289},"title",[101,51398,51399],{"class":111},">Document\u003C\u002F",[101,51401,51396],{"class":51289},[101,51403,51296],{"class":111},[101,51405,51406,51408,51410],{"class":103,"line":1304},[101,51407,51330],{"class":111},[101,51409,5114],{"class":51289},[101,51411,51296],{"class":111},[101,51413,51414,51417],{"class":103,"line":1316},[101,51415,51416],{"class":51289},"        *",[101,51418,15560],{"class":111},[101,51420,51421,51424,51427,51429],{"class":103,"line":1599},[101,51422,51423],{"class":160},"            margin",[101,51425,51426],{"class":111},": ",[101,51428,303],{"class":160},[101,51430,1277],{"class":111},[101,51432,51433,51436,51438,51440],{"class":103,"line":1604},[101,51434,51435],{"class":160},"            padding",[101,51437,51426],{"class":111},[101,51439,303],{"class":160},[101,51441,1277],{"class":111},[101,51443,51444],{"class":103,"line":1610},[101,51445,2516],{"class":111},[101,51447,51448],{"class":103,"line":1615},[101,51449,2387],{"emptyLinePlaceholder":27},[101,51451,51452,51455],{"class":103,"line":1629},[101,51453,51454],{"class":1950},"        .box",[101,51456,15560],{"class":111},[101,51458,51459,51462,51464,51467],{"class":103,"line":1634},[101,51460,51461],{"class":160},"            display",[101,51463,51426],{"class":111},[101,51465,51466],{"class":160},"flex",[101,51468,1277],{"class":111},[101,51470,51471,51474,51476,51479,51482],{"class":103,"line":1640},[101,51472,51473],{"class":160},"            width",[101,51475,51426],{"class":111},[101,51477,51478],{"class":160},"700",[101,51480,51481],{"class":107},"px",[101,51483,1277],{"class":111},[101,51485,51486,51489,51491,51493,51495],{"class":103,"line":1661},[101,51487,51488],{"class":160},"            height",[101,51490,51426],{"class":111},[101,51492,3960],{"class":160},[101,51494,51481],{"class":107},[101,51496,1277],{"class":111},[101,51498,51499,51502,51504,51506,51508,51511,51514],{"class":103,"line":1666},[101,51500,51501],{"class":160},"            border-left",[101,51503,51426],{"class":111},[101,51505,329],{"class":160},[101,51507,51481],{"class":107},[101,51509,51510],{"class":160}," solid",[101,51512,51513],{"class":160}," pink",[101,51515,1277],{"class":111},[101,51517,51518,51521,51523,51525,51527,51529,51531],{"class":103,"line":1680},[101,51519,51520],{"class":160},"            border-bottom",[101,51522,51426],{"class":111},[101,51524,329],{"class":160},[101,51526,51481],{"class":107},[101,51528,51510],{"class":160},[101,51530,51513],{"class":160},[101,51532,1277],{"class":111},[101,51534,51535,51537,51539,51541,51543,51546],{"class":103,"line":1685},[101,51536,51423],{"class":160},[101,51538,51426],{"class":111},[101,51540,767],{"class":160},[101,51542,51481],{"class":107},[101,51544,51545],{"class":160}," auto",[101,51547,1277],{"class":111},[101,51549,51550,51553,51555,51558],{"class":103,"line":1714},[101,51551,51552],{"class":160},"            justify-content",[101,51554,51426],{"class":111},[101,51556,51557],{"class":160},"space-around",[101,51559,1277],{"class":111},[101,51561,51562,51565,51567,51570],{"class":103,"line":1719},[101,51563,51564],{"class":160},"            align-items",[101,51566,51426],{"class":111},[101,51568,51569],{"class":160},"flex-end",[101,51571,1277],{"class":111},[101,51573,51574,51577,51579,51582],{"class":103,"line":1736},[101,51575,51576],{"class":160},"            text-align",[101,51578,51426],{"class":111},[101,51580,51581],{"class":160},"center",[101,51583,1277],{"class":111},[101,51585,51586],{"class":103,"line":1741},[101,51587,2516],{"class":111},[101,51589,51590],{"class":103,"line":1746},[101,51591,2387],{"emptyLinePlaceholder":27},[101,51593,51594,51596,51598,51601],{"class":103,"line":1751},[101,51595,51454],{"class":1950},[101,51597,1071],{"class":107},[101,51599,51600],{"class":51289},"div",[101,51602,15560],{"class":111},[101,51604,51605,51607,51609,51611],{"class":103,"line":1765},[101,51606,51461],{"class":160},[101,51608,51426],{"class":111},[101,51610,51466],{"class":160},[101,51612,1277],{"class":111},[101,51614,51615,51617,51619,51621,51623],{"class":103,"line":1770},[101,51616,51473],{"class":160},[101,51618,51426],{"class":111},[101,51620,767],{"class":160},[101,51622,51481],{"class":107},[101,51624,1277],{"class":111},[101,51626,51627,51630,51632,51635],{"class":103,"line":2564},[101,51628,51629],{"class":160},"            background-color",[101,51631,51426],{"class":111},[101,51633,51634],{"class":160},"pink",[101,51636,1277],{"class":111},[101,51638,51639,51642,51644,51647],{"class":103,"line":2578},[101,51640,51641],{"class":160},"            flex-direction",[101,51643,51426],{"class":111},[101,51645,51646],{"class":160},"column",[101,51648,1277],{"class":111},[101,51650,51651,51653,51655,51658],{"class":103,"line":2586},[101,51652,51552],{"class":160},[101,51654,51426],{"class":111},[101,51656,51657],{"class":160},"space-between",[101,51659,1277],{"class":111},[101,51661,51662],{"class":103,"line":2591},[101,51663,2516],{"class":111},[101,51665,51666],{"class":103,"line":2597},[101,51667,2387],{"emptyLinePlaceholder":27},[101,51669,51670,51672,51675,51678],{"class":103,"line":2603},[101,51671,51454],{"class":1950},[101,51673,51674],{"class":51289}," div",[101,51676,51677],{"class":51289}," span",[101,51679,15560],{"class":111},[101,51681,51682],{"class":103,"line":2608},[101,51683,2387],{"emptyLinePlaceholder":27},[101,51685,51686,51689,51691,51694,51696],{"class":103,"line":7936},[101,51687,51688],{"class":160},"            margin-top",[101,51690,51426],{"class":111},[101,51692,51693],{"class":160},"-20",[101,51695,51481],{"class":107},[101,51697,1277],{"class":111},[101,51699,51700],{"class":103,"line":7960},[101,51701,2516],{"class":111},[101,51703,51704],{"class":103,"line":7965},[101,51705,2387],{"emptyLinePlaceholder":27},[101,51707,51708,51710,51712,51715],{"class":103,"line":7971},[101,51709,51454],{"class":1950},[101,51711,51674],{"class":51289},[101,51713,51714],{"class":51289}," h4",[101,51716,15560],{"class":111},[101,51718,51719,51722,51724,51727,51729],{"class":103,"line":7998},[101,51720,51721],{"class":160},"            margin-bottom",[101,51723,51426],{"class":111},[101,51725,51726],{"class":160},"-35",[101,51728,51481],{"class":107},[101,51730,1277],{"class":111},[101,51732,51733,51735,51737,51739,51741],{"class":103,"line":8003},[101,51734,51473],{"class":160},[101,51736,51426],{"class":111},[101,51738,467],{"class":160},[101,51740,51481],{"class":107},[101,51742,1277],{"class":111},[101,51744,51745,51748,51750,51753,51755],{"class":103,"line":8009},[101,51746,51747],{"class":160},"            margin-left",[101,51749,51426],{"class":111},[101,51751,51752],{"class":160},"-10",[101,51754,51481],{"class":107},[101,51756,1277],{"class":111},[101,51758,51759],{"class":103,"line":8021},[101,51760,2516],{"class":111},[101,51762,51763,51766,51768],{"class":103,"line":8033},[101,51764,51765],{"class":111},"    \u003C\u002F",[101,51767,5114],{"class":51289},[101,51769,51296],{"class":111},[101,51771,51772,51775,51777],{"class":103,"line":8045},[101,51773,51774],{"class":111},"\u003C\u002F",[101,51776,51323],{"class":51289},[101,51778,51296],{"class":111},[101,51780,51781],{"class":103,"line":9704},[101,51782,2387],{"emptyLinePlaceholder":27},[101,51784,51785,51787,51790],{"class":103,"line":9729},[101,51786,1021],{"class":111},[101,51788,51789],{"class":51289},"body",[101,51791,51296],{"class":111},[101,51793,51794],{"class":103,"line":9752},[101,51795,2387],{"emptyLinePlaceholder":27},[101,51797,51798,51800,51803],{"class":103,"line":9776},[101,51799,51330],{"class":111},[101,51801,51802],{"class":51289},"script",[101,51804,51296],{"class":111},[101,51806,51807],{"class":103,"line":9781},[101,51808,51809],{"class":170},"        \u002F\u002F 1. 四次弹框效果\n",[101,51811,51812],{"class":103,"line":9786},[101,51813,51814],{"class":170},"        \u002F\u002F 声明一个新的数组\n",[101,51816,51817,51820,51823,51825],{"class":103,"line":9791},[101,51818,51819],{"class":107},"        let",[101,51821,51822],{"class":111}," arr ",[101,51824,157],{"class":107},[101,51826,51827],{"class":111}," []\n",[101,51829,51830,51832,51834,51837,51839,51841,51843,51845,51847,51850,51852,51854],{"class":103,"line":9800},[101,51831,3390],{"class":107},[101,51833,1645],{"class":111},[101,51835,51836],{"class":107},"let",[101,51838,9426],{"class":111},[101,51840,157],{"class":107},[101,51842,25107],{"class":160},[101,51844,9433],{"class":111},[101,51846,1575],{"class":107},[101,51848,51849],{"class":160}," 4",[101,51851,3201],{"class":111},[101,51853,2279],{"class":107},[101,51855,12430],{"class":111},[101,51857,51858],{"class":103,"line":9805},[101,51859,51860],{"class":170},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[101,51862,51863],{"class":103,"line":9811},[101,51864,51865],{"class":170},"            \u002F\u002F arr.push(num)\n",[101,51867,51868,51871,51874,51876,51879,51881,51884,51886,51889],{"class":103,"line":9832},[101,51869,51870],{"class":111},"            arr.",[101,51872,51873],{"class":1950},"push",[101,51875,112],{"class":111},[101,51877,51878],{"class":1950},"prompt",[101,51880,112],{"class":111},[101,51882,51883],{"class":216},"`请输入第${",[101,51885,552],{"class":111},[101,51887,51888],{"class":216},"}季度的数据:`",[101,51890,30486],{"class":111},[101,51892,51893],{"class":103,"line":9838},[101,51894,51895],{"class":170},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[101,51897,51898],{"class":103,"line":9852},[101,51899,2516],{"class":111},[101,51901,51902],{"class":103,"line":9858},[101,51903,51904],{"class":170},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[101,51906,51907],{"class":103,"line":9885},[101,51908,51909],{"class":170},"        \u002F\u002F 盒子开头\n",[101,51911,51912,51915,51918,51920,51923],{"class":103,"line":9894},[101,51913,51914],{"class":111},"        document.",[101,51916,51917],{"class":1950},"write",[101,51919,112],{"class":111},[101,51921,51922],{"class":216},"` \u003Cdiv class=\"box\">`",[101,51924,118],{"class":111},[101,51926,51927],{"class":103,"line":9900},[101,51928,2387],{"emptyLinePlaceholder":27},[101,51930,51931],{"class":103,"line":9908},[101,51932,51933],{"class":170},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[101,51935,51936,51938,51940,51942,51944,51946,51948,51950,51952,51955,51958,51960,51962],{"class":103,"line":9913},[101,51937,3390],{"class":107},[101,51939,1645],{"class":111},[101,51941,51836],{"class":107},[101,51943,9426],{"class":111},[101,51945,157],{"class":107},[101,51947,4080],{"class":160},[101,51949,9433],{"class":111},[101,51951,1021],{"class":107},[101,51953,51954],{"class":111}," arr.",[101,51956,51957],{"class":160},"length",[101,51959,3201],{"class":111},[101,51961,2279],{"class":107},[101,51963,12430],{"class":111},[101,51965,51966,51969,51971,51973],{"class":103,"line":16592},[101,51967,51968],{"class":111},"            document.",[101,51970,51917],{"class":1950},[101,51972,112],{"class":111},[101,51974,51975],{"class":216},"`\n",[101,51977,51978,51981,51983,51985,51987,51989],{"class":103,"line":16598},[101,51979,51980],{"class":216},"              \u003Cdiv style=\"height: ${",[101,51982,3867],{"class":111},[101,51984,1001],{"class":216},[101,51986,552],{"class":111},[101,51988,1051],{"class":216},[101,51990,51991],{"class":216},"}px;\">\n",[101,51993,51994,51997,51999,52001,52003,52005],{"class":103,"line":16621},[101,51995,51996],{"class":216},"                \u003Cspan>${",[101,51998,3867],{"class":111},[101,52000,1001],{"class":216},[101,52002,552],{"class":111},[101,52004,1051],{"class":216},[101,52006,52007],{"class":216},"}\u003C\u002Fspan>\n",[101,52009,52010,52013,52015,52017,52019],{"class":103,"line":16627},[101,52011,52012],{"class":216},"                \u003Ch4>第${",[101,52014,552],{"class":111},[101,52016,45555],{"class":107},[101,52018,25107],{"class":160},[101,52020,52021],{"class":216},"}季度\u003C\u002Fh4>\n",[101,52023,52024],{"class":103,"line":16650},[101,52025,52026],{"class":216},"              \u003C\u002Fdiv>          \n",[101,52028,52029,52032],{"class":103,"line":16664},[101,52030,52031],{"class":216},"            `",[101,52033,118],{"class":111},[101,52035,52036],{"class":103,"line":16684},[101,52037,2516],{"class":111},[101,52039,52040],{"class":103,"line":16690},[101,52041,52042],{"class":170},"        \u002F\u002F 盒子结尾\n",[101,52044,52045,52047,52049,52051,52054],{"class":103,"line":16701},[101,52046,51914],{"class":111},[101,52048,51917],{"class":1950},[101,52050,112],{"class":111},[101,52052,52053],{"class":216},"` \u003C\u002Fdiv>`",[101,52055,118],{"class":111},[101,52057,52058,52060,52062],{"class":103,"line":16724},[101,52059,51765],{"class":111},[101,52061,51802],{"class":51289},[101,52063,51296],{"class":111},[101,52065,52066,52068,52070],{"class":103,"line":16746},[101,52067,51774],{"class":111},[101,52069,51789],{"class":51289},[101,52071,51296],{"class":111},[101,52073,52074],{"class":103,"line":16751},[101,52075,2387],{"emptyLinePlaceholder":27},[101,52077,52078,52080,52082],{"class":103,"line":16757},[101,52079,51774],{"class":111},[101,52081,50624],{"class":51289},[101,52083,51296],{"class":111},[72,52085,52087],{"id":52086},"_284-冒泡排序","2.8.4 冒泡排序",[92,52089,52091],{"className":50622,"code":52090,"language":50624,"meta":20,"style":20},"\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",[98,52092,52093,52103,52117,52121,52129,52144,52164,52176,52184,52188,52196,52204,52236,52269,52306,52311,52330,52335,52348,52363,52379,52383,52388,52392,52402,52411,52419,52423],{"__ignoreMap":20},[101,52094,52095,52097,52099,52101],{"class":103,"line":104},[101,52096,51286],{"class":111},[101,52098,51290],{"class":51289},[101,52100,51293],{"class":1950},[101,52102,51296],{"class":111},[101,52104,52105,52107,52109,52111,52113,52115],{"class":103,"line":21},[101,52106,1021],{"class":111},[101,52108,50624],{"class":51289},[101,52110,51305],{"class":1950},[101,52112,157],{"class":111},[101,52114,51310],{"class":216},[101,52116,51296],{"class":111},[101,52118,52119],{"class":103,"line":1166},[101,52120,2387],{"emptyLinePlaceholder":27},[101,52122,52123,52125,52127],{"class":103,"line":1181},[101,52124,1021],{"class":111},[101,52126,51323],{"class":51289},[101,52128,51296],{"class":111},[101,52130,52131,52134,52136,52138,52140,52142],{"class":103,"line":1187},[101,52132,52133],{"class":111},"  \u003C",[101,52135,51333],{"class":51289},[101,52137,51336],{"class":1950},[101,52139,157],{"class":111},[101,52141,51341],{"class":216},[101,52143,51296],{"class":111},[101,52145,52146,52148,52150,52152,52154,52156,52158,52160,52162],{"class":103,"line":1201},[101,52147,52133],{"class":111},[101,52149,51333],{"class":51289},[101,52151,14908],{"class":1950},[101,52153,157],{"class":111},[101,52155,51380],{"class":216},[101,52157,51360],{"class":1950},[101,52159,157],{"class":111},[101,52161,51387],{"class":216},[101,52163,51296],{"class":111},[101,52165,52166,52168,52170,52172,52174],{"class":103,"line":1207},[101,52167,52133],{"class":111},[101,52169,51396],{"class":51289},[101,52171,51399],{"class":111},[101,52173,51396],{"class":51289},[101,52175,51296],{"class":111},[101,52177,52178,52180,52182],{"class":103,"line":1298},[101,52179,51774],{"class":111},[101,52181,51323],{"class":51289},[101,52183,51296],{"class":111},[101,52185,52186],{"class":103,"line":1304},[101,52187,2387],{"emptyLinePlaceholder":27},[101,52189,52190,52192,52194],{"class":103,"line":1316},[101,52191,1021],{"class":111},[101,52193,51789],{"class":51289},[101,52195,51296],{"class":111},[101,52197,52198,52200,52202],{"class":103,"line":1599},[101,52199,52133],{"class":111},[101,52201,51802],{"class":51289},[101,52203,51296],{"class":111},[101,52205,52206,52209,52211,52213,52216,52218,52220,52222,52224,52226,52228,52230,52232,52234],{"class":103,"line":1604},[101,52207,52208],{"class":107},"    let",[101,52210,51822],{"class":111},[101,52212,157],{"class":107},[101,52214,52215],{"class":111}," [",[101,52217,430],{"class":160},[101,52219,12423],{"class":111},[101,52221,404],{"class":160},[101,52223,12423],{"class":111},[101,52225,183],{"class":160},[101,52227,12423],{"class":111},[101,52229,189],{"class":160},[101,52231,12423],{"class":111},[101,52233,329],{"class":160},[101,52235,33235],{"class":111},[101,52237,52238,52240,52242,52244,52246,52248,52250,52252,52254,52256,52258,52261,52263,52265,52267],{"class":103,"line":1610},[101,52239,3188],{"class":107},[101,52241,1645],{"class":111},[101,52243,51836],{"class":107},[101,52245,9426],{"class":111},[101,52247,157],{"class":107},[101,52249,4080],{"class":160},[101,52251,9433],{"class":111},[101,52253,1021],{"class":107},[101,52255,51954],{"class":111},[101,52257,51957],{"class":160},[101,52259,52260],{"class":107}," -",[101,52262,25107],{"class":160},[101,52264,3201],{"class":111},[101,52266,2279],{"class":107},[101,52268,12430],{"class":111},[101,52270,52271,52274,52276,52278,52280,52282,52284,52286,52288,52290,52292,52294,52296,52298,52300,52302,52304],{"class":103,"line":1615},[101,52272,52273],{"class":107},"      for",[101,52275,1645],{"class":111},[101,52277,51836],{"class":107},[101,52279,9488],{"class":111},[101,52281,157],{"class":107},[101,52283,4080],{"class":160},[101,52285,9495],{"class":111},[101,52287,1021],{"class":107},[101,52289,51954],{"class":111},[101,52291,51957],{"class":160},[101,52293,52260],{"class":107},[101,52295,9426],{"class":111},[101,52297,643],{"class":107},[101,52299,25107],{"class":160},[101,52301,9502],{"class":111},[101,52303,2279],{"class":107},[101,52305,12430],{"class":111},[101,52307,52308],{"class":103,"line":1629},[101,52309,52310],{"class":170},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[101,52312,52313,52315,52318,52320,52323,52325,52327],{"class":103,"line":1634},[101,52314,2484],{"class":107},[101,52316,52317],{"class":111}," (arr[j] ",[101,52319,1071],{"class":107},[101,52321,52322],{"class":111}," arr[j ",[101,52324,592],{"class":107},[101,52326,25107],{"class":160},[101,52328,52329],{"class":111},"]) {\n",[101,52331,52332],{"class":103,"line":1640},[101,52333,52334],{"class":170},"          \u002F\u002F 交换两个变量\n",[101,52336,52337,52340,52343,52345],{"class":103,"line":1661},[101,52338,52339],{"class":107},"          let",[101,52341,52342],{"class":111}," tmp ",[101,52344,157],{"class":107},[101,52346,52347],{"class":111}," arr[j]\n",[101,52349,52350,52353,52355,52357,52359,52361],{"class":103,"line":1666},[101,52351,52352],{"class":111},"          arr[j] ",[101,52354,157],{"class":107},[101,52356,52322],{"class":111},[101,52358,592],{"class":107},[101,52360,25107],{"class":160},[101,52362,33235],{"class":111},[101,52364,52365,52368,52370,52372,52374,52376],{"class":103,"line":1680},[101,52366,52367],{"class":111},"          arr[j ",[101,52369,592],{"class":107},[101,52371,25107],{"class":160},[101,52373,4430],{"class":111},[101,52375,157],{"class":107},[101,52377,52378],{"class":111}," tmp\n",[101,52380,52381],{"class":103,"line":1685},[101,52382,2516],{"class":111},[101,52384,52385],{"class":103,"line":1714},[101,52386,52387],{"class":111},"      }\n",[101,52389,52390],{"class":103,"line":1719},[101,52391,2174],{"class":111},[101,52393,52394,52397,52399],{"class":103,"line":1736},[101,52395,52396],{"class":111},"    document.",[101,52398,51917],{"class":1950},[101,52400,52401],{"class":111},"(arr)\n",[101,52403,52404,52407,52409],{"class":103,"line":1741},[101,52405,52406],{"class":111},"  \u003C\u002F",[101,52408,51802],{"class":51289},[101,52410,51296],{"class":111},[101,52412,52413,52415,52417],{"class":103,"line":1746},[101,52414,51774],{"class":111},[101,52416,51789],{"class":51289},[101,52418,51296],{"class":111},[101,52420,52421],{"class":103,"line":1751},[101,52422,2387],{"emptyLinePlaceholder":27},[101,52424,52425,52427,52429],{"class":103,"line":1765},[101,52426,51774],{"class":111},[101,52428,50624],{"class":51289},[101,52430,51296],{"class":111},[10,52432,52433],{},[1449,52434],{"alt":20,"src":52435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[10,52437,52438],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[10,52440,52441],{},"let arr = [4, 2, 5, 1, 3]",[10,52443,52444],{},"\u002F\u002F 1.升序排列写法",[10,52446,52447],{},"arr.sort(function (a, b) {",[10,52449,52450],{},"return a - b",[10,52452,52453],{},"})",[10,52455,52456],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[10,52458,52459],{},"\u002F\u002F 降序排列写法",[10,52461,52447],{},[10,52463,52464],{},"return b - a",[10,52466,52453],{},[10,52468,52469],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[43,52471,52473],{"id":52472},"_29-函数","2.9 函数",[10,52475,52476],{},[1449,52477],{"alt":20,"src":52478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[10,52480,52481],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[10,52483,52484],{},"函数的声明用function",[10,52486,52487],{},"函数里边可以嵌套函数",[72,52489,52491],{"id":52490},"_291-函数传参","2.9.1 函数传参",[10,52493,52494],{},[1449,52495],{"alt":20,"src":52496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[10,52498,52499],{},[1449,52500],{"alt":20,"src":52501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1118,52503,52504,52507,52510,52513,52516,52519],{},[58,52505,52506],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[58,52508,52509],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[58,52511,52512],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[58,52514,52515],{},"开发中尽量保持形参和实参个数一致",[58,52517,52518],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[58,52520,52521],{},"形参只在函数中有用，所以不需要进行声明这个变量",[10,52523,52524],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[72,52526,52528],{"id":52527},"_292-函数的返回值","2.9.2 函数的返回值",[10,52530,52531],{},[1449,52532],{"alt":20,"src":52533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[10,52535,52536],{},[1449,52537],{"alt":20,"src":52538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1118,52540,52541,52544,52547,52550,52553],{},[58,52542,52543],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[58,52545,52546],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[58,52548,52549],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[58,52551,52552],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[58,52554,52555],{},"断点调试:进入函数内部看执行过程F11",[72,52557,52559],{"id":52558},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[92,52561,52563],{"className":50622,"code":52562,"language":50624,"meta":20,"style":20},"    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",[98,52564,52565,52570,52575,52579,52584],{"__ignoreMap":20},[101,52566,52567],{"class":103,"line":104},[101,52568,52569],{"class":111},"    function fn(a, b) {\n",[101,52571,52572],{"class":103,"line":21},[101,52573,52574],{"class":111},"      console.log(a + b);\n",[101,52576,52577],{"class":103,"line":1166},[101,52578,2174],{"class":111},[101,52580,52581],{"class":103,"line":1181},[101,52582,52583],{"class":111},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[101,52585,52586],{"class":103,"line":1187},[101,52587,52588],{"class":111},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[72,52590,52592],{"id":52591},"_294-作用域","2.9.4 作用域",[1118,52594,52595,52601,52606,52609,52612],{},[58,52596,52597,52598],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[261,52599,52600],{},"作用域",[58,52602,52603],{},[261,52604,52605],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[58,52607,52608],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[58,52610,52611],{},"函数内部可以直接所使用全局变量",[58,52613,52614],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[10,52616,14621],{},[92,52618,52620],{"className":50622,"code":52619,"language":50624,"meta":20,"style":20},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[98,52621,52622,52627,52632,52636,52641,52646,52651],{"__ignoreMap":20},[101,52623,52624],{"class":103,"line":104},[101,52625,52626],{"class":111},"    function fun() {\n",[101,52628,52629],{"class":103,"line":21},[101,52630,52631],{"class":111},"      num = 10\n",[101,52633,52634],{"class":103,"line":1166},[101,52635,2174],{"class":111},[101,52637,52638],{"class":103,"line":1181},[101,52639,52640],{"class":111},"    fun()\n",[101,52642,52643],{"class":103,"line":1187},[101,52644,52645],{"class":111},"    console.log(num)\n",[101,52647,52648],{"class":103,"line":1201},[101,52649,52650],{"class":111},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[101,52652,52653],{"class":103,"line":1207},[101,52654,52655],{"class":111},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1118,52657,52658,52661],{},[58,52659,52660],{},"函数内部的形参可以看做是局部变量",[58,52662,52663],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[10,52665,52666,52667],{},"变量访问原则： ",[261,52668,52669],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[72,52671,52673],{"id":52672},"_295-匿名函数","2.9.5 匿名函数",[10,52675,52676],{},"函数可以分为具名函数和匿名函数",[10,52678,52679],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[55,52681,52682],{},[58,52683,52684],{},"函数表达式",[10,52686,52687],{},[1449,52688],{"alt":20,"src":52689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[10,52691,52692],{},"里边也可以写参数",[10,52694,52695],{},"具名函数调用位置可以随意调整；",[10,52697,52698],{},"匿名函数函数表达式形式只能在声明后才可以使用",[55,52700,52701],{"start":21},[58,52702,52703],{},"立即执行函数",[10,52705,52706],{},[1449,52707],{"alt":20,"src":52708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[10,52710,52711],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[10,52713,52714],{},"写法：两个小括号，然后在第一个小括号中写function",[10,52716,52717],{},"(function () {})();",[10,52719,52720],{},"不要落下最后的;",[10,52722,52723],{},"立即执行函数必须要加;",[10,52725,52726],{},"分号写前写后都没问题",[10,52728,52729],{},"写前：",[10,52731,52732],{},"(function() {})()",[10,52734,52735],{},";(function () {})();",[10,52737,52738],{},"写后:",[10,52740,52741],{},"(function() {})();",[10,52743,52717],{},[10,52745,52746],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[10,52748,52749],{},"还有一种写法：",[10,52751,52752],{},"(function(){}());",[10,52754,52755],{},"或者:",[10,52757,52758],{},"!function(){}();",[10,52760,52761],{},"立即执行函数有时候也是可以加名字的：",[10,52763,52764],{},"(function flexible(window,document) {}(window,document));",[10,52766,52767],{},"省一些调用方法",[72,52769,52771],{"id":52770},"_296-逻辑中断","2.9.6 逻辑中断!!!",[10,52773,52774],{},[1449,52775],{"alt":20,"src":52776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[10,52778,52779],{},"这样就不用非得给x,y初始化了",[10,52781,52782],{},[1449,52783],{"alt":20,"src":52784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[10,52786,52787],{},"代码执行时先看左边",[10,52789,52790],{},"例如：console.log(false && 3+5)",[10,52792,52793],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[10,52795,52796],{},"&&都是真时，就返回最后一个真值",[10,52798,52799],{},"console.log(11 && 22)",[10,52801,52802],{},"输出22",[10,52804,52805],{},"逻辑与：遇真则真",[10,52807,14621],{},[10,52809,52810],{},"let age=1",[10,52812,52813],{},"console.log(11 || age++)",[10,52815,52816],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[10,52818,52819],{},"console.log(11 || 22)",[10,52821,52822],{},"||逻辑或遇到真就直接输出，输出结果为11",[10,52824,52825],{},"||如果都是假的话，就取最后一个假的值了",[72,52827,52829],{"id":52828},"_297-转换为boolean型","2.9.7 转换为Boolean型",[10,52831,52832],{},"显示转换：",[10,52834,52835,52838,52839],{},[261,52836,52837],{},"记忆","： ",[261,52840,52841],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[10,52843,52844],{},"空字符串为假，其他字符串全为真",[10,52846,52847],{},[1449,52848],{"alt":20,"src":52849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[10,52851,52852],{},"隐式转换：",[10,52854,52855],{},[1449,52856],{"alt":20,"src":52857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[10,52859,52860],{},"隐式转换:",[10,52862,52863],{},"null+3=3",[10,52865,52866],{},"undefined+3=NaN",[10,52868,52869],{},"null==undefined 输出true,他两个都当0看",[10,52871,52872],{},"null===undefined 输出false",[10,52874,52875],{},"undefined做任何操作都是NaN",[10,52877,52878],{},"NaN不等于NaN，NaN表示计算错误",[43,52880,52882],{"id":52881},"_210-对象","2.10 对象",[72,52884,52886],{"id":52885},"_2101-对象的介绍","2.10.1 对象的介绍",[10,52888,52889],{},"对象也是一种数据类型，里边的数据是无序的",[10,52891,52892],{},"对象由属性和方法组成",[10,52894,52895],{},[1449,52896],{"alt":20,"src":52897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[10,52899,52900],{},[1449,52901],{"alt":20,"src":52902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[10,52904,52905],{},[1449,52906],{"alt":20,"src":52907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[72,52909,52911],{"id":52910},"_2102-对象属性","2.10.2 对象属性",[10,52913,52914],{},[1449,52915],{"alt":20,"src":52916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[55,52918,52919],{},[58,52920,52921],{},"查询对象",[10,52923,52924],{},"对象名.属性 goods.uname",[10,52926,52927],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[10,52929,52930],{},"不带字符串的属性名也可以使用 对象名['属性名']",[10,52932,52933],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[10,52935,52936],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[55,52938,52939],{"start":21},[58,52940,52941],{},"重新赋值",[10,52943,52944],{},"对象名.属性=新值",[55,52946,52947],{"start":1166},[58,52948,52949],{},"增加新数据",[10,52951,52944],{},[55,52953,52954],{"start":1181},[58,52955,52956],{},"删除对象中的属性",[10,52958,52959],{},"delete 对象名.属性",[72,52961,52963],{"id":52962},"_2103-对象方法","2.10.3 对象方法",[10,52965,52966],{},[1449,52967],{"alt":20,"src":52968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[10,52970,52971],{},"后边跟的是匿名函数",[10,52973,52974],{},"对象外面的叫函数；对象内部的叫方法",[10,52976,52977],{},[1449,52978],{"alt":20,"src":52979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[72,52981,52983],{"id":52982},"_2104-遍历对象","2.10.4 遍历对象",[10,52985,52986],{},"理解为加括号的python字典遍历",[10,52988,52989],{},[1449,52990],{"alt":20,"src":52991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[10,52993,52994],{},"k是字符串类型",[10,52996,52997],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[92,52999,53001],{"className":50622,"code":53000,"language":50624,"meta":20,"style":20},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[98,53002,53003,53008,53013,53018,53023],{"__ignoreMap":20},[101,53004,53005],{"class":103,"line":104},[101,53006,53007],{"class":111},"   let arr = [1, 2, 3]\n",[101,53009,53010],{"class":103,"line":21},[101,53011,53012],{"class":111},"    for (let k in arr) {\n",[101,53014,53015],{"class":103,"line":1166},[101,53016,53017],{"class":111},"      console.log(k)\n",[101,53019,53020],{"class":103,"line":1181},[101,53021,53022],{"class":111},"      console.log(arr[k])\n",[101,53024,53025],{"class":103,"line":1187},[101,53026,2174],{"class":111},[10,53028,53029],{},[1449,53030],{"alt":20,"src":53031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[10,53033,53034],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[10,53036,53037],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[10,53039,53040],{},"for in 得到的k是属性名",[51802,53042,53043],{},"\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",[10,53045,53046],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[72,53048,53050],{"id":53049},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[10,53052,53053],{},"数组中放对象信息",[92,53055,53059],{"className":53056,"code":53057,"language":53058,"meta":20,"style":20},"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",[98,53060,53061,53069,53074,53079,53084,53089,53094,53099,53104,53109,53114,53119,53124,53128,53132],{"__ignoreMap":20},[101,53062,53063,53065,53067],{"class":103,"line":104},[101,53064,1021],{"class":111},[101,53066,51802],{"class":51289},[101,53068,51296],{"class":111},[101,53070,53071],{"class":103,"line":21},[101,53072,53073],{"class":111},"    let students = [\n",[101,53075,53076],{"class":103,"line":1166},[101,53077,53078],{"class":111},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[101,53080,53081],{"class":103,"line":1181},[101,53082,53083],{"class":111},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[101,53085,53086],{"class":103,"line":1187},[101,53087,53088],{"class":111},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[101,53090,53091],{"class":103,"line":1201},[101,53092,53093],{"class":111},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[101,53095,53096],{"class":103,"line":1207},[101,53097,53098],{"class":111},"    ]\n",[101,53100,53101],{"class":103,"line":1298},[101,53102,53103],{"class":111},"    for (let i = 0; i \u003C students.length; i++) {\n",[101,53105,53106],{"class":103,"line":1304},[101,53107,53108],{"class":111},"      for (let k in students[i]) {\n",[101,53110,53111],{"class":103,"line":1316},[101,53112,53113],{"class":111},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[101,53115,53116],{"class":103,"line":1599},[101,53117,53118],{"class":111},"        \u002F\u002F输出每个人的名字：\n",[101,53120,53121],{"class":103,"line":1604},[101,53122,53123],{"class":111},"        \u002F\u002Fconsole.log(students[i].name)\n",[101,53125,53126],{"class":103,"line":1610},[101,53127,52387],{"class":111},[101,53129,53130],{"class":103,"line":1615},[101,53131,2174],{"class":111},[101,53133,53134,53136,53138],{"class":103,"line":1629},[101,53135,52406],{"class":111},[101,53137,51802],{"class":51289},[101,53139,51296],{"class":111},[72,53141,53143],{"id":53142},"_2106-内置对象","2.10.6 内置对象",[10,53145,53146],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[55,53148,53149],{},[58,53150,53151],{},"数学对象Math",[10,53153,53154],{},[1449,53155],{"alt":20,"src":53156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[10,53158,53159],{},[14,53160,53163],{"href":53161,"rel":53162},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[18],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[10,53165,53166],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[10,53168,53169],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[10,53171,53172],{},"数组不可以使用Math中的max,min来求最大值与最小值",[10,53174,53175],{},"null是一个空对象，可以认为：null类似于let obj={}",[10,53177,53178],{},"null属于对象数据类型",[55,53180,53181],{"start":21},[58,53182,53183],{},"生成任意范围随机数",[10,53185,53186],{},[1449,53187],{"alt":20,"src":53188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[10,53190,53191],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[10,53193,53194],{},"乘以几就取不到几",[10,53196,53197],{},"取数组中的随机元素：",[10,53199,53200],{},"let arr = ['red', 'green', 'blue']",[10,53202,53203],{},"let random = Math.floor(Math.random() * arr.length)",[10,53205,53206],{},"console.log(arr[random])",[10,53208,53209],{},"这个函数得到的是全闭区间",[10,53211,53212],{},"function getRandom(N, M) {",[10,53214,53215],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[10,53217,1057],{},[10,53219,53220],{},"console.log(getRandom(4, 8))",[72,53222,53224],{"id":53223},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[10,53226,53227],{},[1449,53228],{"alt":20,"src":53229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[10,53231,53232],{},[1449,53233],{"alt":20,"src":53234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[10,53236,53237],{},[1449,53238],{"alt":20,"src":53239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[10,53241,53242],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[10,53244,53245],{},[1449,53246],{"alt":20,"src":53247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[10,53249,53250],{},[1449,53251],{"alt":20,"src":53252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[10,53254,53255],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[10,53257,53258],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[10,53260,53261],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5114,53263,53264],{},"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":20,"searchDepth":21,"depth":21,"links":53266},[53267,53275,53276,53277,53278,53279,53286,53290,53296,53305],{"id":50457,"depth":21,"text":50458,"children":53268},[53269,53270,53271,53272,53273,53274],{"id":50461,"depth":1166,"text":50462},{"id":50478,"depth":1166,"text":50479},{"id":50518,"depth":1166,"text":50519},{"id":50530,"depth":1166,"text":50531},{"id":50539,"depth":1166,"text":50540},{"id":50587,"depth":1166,"text":50588},{"id":50597,"depth":21,"text":50598},{"id":50685,"depth":21,"text":50686},{"id":50708,"depth":21,"text":50709},{"id":50720,"depth":21,"text":50721},{"id":50907,"depth":21,"text":50908,"children":53280},[53281,53282,53283,53284,53285],{"id":50911,"depth":1166,"text":50912},{"id":50920,"depth":1166,"text":50921},{"id":50948,"depth":1166,"text":50949},{"id":50984,"depth":1166,"text":50985},{"id":51009,"depth":1166,"text":51010},{"id":51021,"depth":21,"text":51022,"children":53287},[53288,53289],{"id":51042,"depth":1166,"text":51043},{"id":51136,"depth":1166,"text":51137},{"id":51194,"depth":21,"text":51195,"children":53291},[53292,53293,53294,53295],{"id":51198,"depth":1166,"text":51199},{"id":51222,"depth":1166,"text":51223},{"id":51275,"depth":1166,"text":51276},{"id":52086,"depth":1166,"text":52087},{"id":52472,"depth":21,"text":52473,"children":53297},[53298,53299,53300,53301,53302,53303,53304],{"id":52490,"depth":1166,"text":52491},{"id":52527,"depth":1166,"text":52528},{"id":52558,"depth":1166,"text":52559},{"id":52591,"depth":1166,"text":52592},{"id":52672,"depth":1166,"text":52673},{"id":52770,"depth":1166,"text":52771},{"id":52828,"depth":1166,"text":52829},{"id":52881,"depth":21,"text":52882,"children":53306},[53307,53308,53309,53310,53311,53312,53313],{"id":52885,"depth":1166,"text":52886},{"id":52910,"depth":1166,"text":52911},{"id":52962,"depth":1166,"text":52963},{"id":52982,"depth":1166,"text":52983},{"id":53049,"depth":1166,"text":53050},{"id":53142,"depth":1166,"text":53143},{"id":53223,"depth":1166,"text":53224},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50449,"description":23365},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53320,"title":53321,"body":53322,"description":23365,"extension":24,"meta":76662,"navigation":27,"path":76663,"seo":76664,"stem":76665,"__hash__":76666},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53323,"toc":76602},[53324,53327,53330,53333,53338,53341,53344,53347,53351,53355,53361,53366,53374,53381,53384,53388,53393,53398,53403,53406,53409,53420,53423,53427,53430,53433,53438,53443,53448,53451,53454,53546,53549,53554,53557,53562,53565,53568,53573,53576,53581,53585,53588,53602,53606,53611,53614,53617,53621,53626,53629,53633,53637,53642,53646,53651,53654,53657,53660,53663,53666,53669,53674,53679,53707,53710,53713,53716,53721,53724,53727,53730,53733,53737,53766,53770,53775,53780,53783,53786,53789,53794,53909,53914,53919,54080,54085,54088,54092,54097,54102,54105,54108,54111,54114,54117,54120,54123,54126,54129,54132,54135,54138,54141,54144,54146,54149,54152,54155,54160,54164,54561,54564,54570,54574,54579,55861,55866,55869,55872,55875,55880,57076,57080,57086,57091,57094,57099,57104,57108,57112,57117,57120,57125,57128,57131,57135,58043,58046,58050,58271,58274,58277,58280,58506,58509,58733,58736,58740,58745,58748,58751,58979,58982,59015,59018,59022,59027,59031,59034,59037,59040,59043,59046,59049,59052,59057,60337,60341,60344,61437,61441,61444,61447,61450,61453,61457,61460,61463,61465,61473,62954,62958,62961,62964,62967,63176,63179,63183,63187,63192,63197,63200,63203,63208,63212,63217,63220,63329,63333,63338,63343,63346,63349,63353,63358,63363,63368,63371,63374,63385,63388,63393,63398,63401,63404,63477,63481,63486,63489,63491,63502,63506,63511,64837,64840,64843,64846,64848,64851,64854,64857,64860,64863,64866,64869,64872,64875,64878,64881,64884,64886,64888,64891,64895,65989,65992,65995,66011,66025,66028,66033,66039,66044,66048,66052,66057,66061,66066,66508,66513,66516,66520,66525,66528,66531,66535,66540,66544,66549,66554,66558,66563,66568,66571,66576,66581,66585,66590,66595,66699,66702,66706,66711,67077,67080,67083,67086,67089,67092,67095,67098,67101,68397,68401,68406,68411,68414,68417,68420,68423,68425,68430,68435,68438,68442,68447,68452,68457,68460,68463,68466,68469,68472,68477,68480,68484,68489,68494,68498,68503,68506,68511,68514,68517,68520,68523,68526,68531,68534,68537,68540,68543,68547,68552,68555,68559,68564,68567,68570,68574,68603,68606,68610,68614,68619,68623,68628,68631,68634,68637,68640,68643,68646,68649,68652,68655,68658,68661,68664,68667,68670,68674,68679,68684,68687,68691,68695,68700,68703,68707,68710,68713,68718,68723,68728,68733,68738,68741,68744,68749,68754,68758,68763,68766,68771,68774,68777,68780,68783,68788,68791,68800,68804,68809,68812,68815,68819,68822,68827,68831,68834,68840,68846,68850,68876,68879,70440,70443,70939,70942,70947,70952,70957,70961,70966,70971,70976,70980,70985,70988,70991,70994,70997,71001,71004,71009,71012,71017,71021,71026,71029,71034,71039,71044,71047,71050,71055,71060,71063,71066,71070,71073,71078,71081,71086,71089,71094,71099,71104,71107,71112,71177,71180,71191,71195,71200,71372,71376,71381,71384,71387,71390,71394,71405,71409,71412,71417,71422,71425,71428,71431,71434,71437,71439,71442,71445,71448,71453,71456,71461,71464,71468,71471,71474,71488,71492,71495,71550,71555,71558,71561,71566,71569,71573,71578,71708,71712,71717,71722,71803,71808,71812,71815,71820,71825,71831,71834,71837,71840,71844,71849,71852,71863,71867,71884,74931,74935,74938,74941,74944,74965,74969,74972,74980,74983,74988,74991,74994,74999,75004,75008,75029,75033,75038,75041,75044,75047,75050,75054,75059,75062,75066,75071,75074,75079,75082,75087,75090,75095,76298,76302,76307,76310,76315,76599],[39,53325,53321],{"id":53326},"_3web-apis",[10,53328,53329],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[10,53331,53332],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[10,53334,53335],{},[1449,53336],{"alt":20,"src":53337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[10,53339,53340],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[10,53342,53343],{},"建议数组和对象使用 const 来声明",[10,53345,53346],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[43,53348,53350],{"id":53349},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[72,53352,53354],{"id":53353},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[10,53356,53357,53360],{},[98,53358,53359],{},"document"," = HTML 文件解析后的对象化表示；",[10,53362,53363,53365],{},[98,53364,53359],{}," ≠ HTML 文件本身",[10,53367,53368,53373],{},[261,53369,53370],{},[98,53371,53372],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[10,53375,53376,53380],{},[261,53377,53378],{},[98,53379,53359],{}," ：容器里的内容，代表当前加载的网页（DOM）",[10,53382,53383],{},"document实际上为window.document的简写",[72,53385,53387],{"id":53386},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[10,53389,53390],{},[1449,53391],{"alt":20,"src":53392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[10,53394,53395],{},[1449,53396],{"alt":20,"src":53397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[10,53399,53400],{},[1449,53401],{"alt":20,"src":53402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[10,53404,53405],{},"console.dir()",[10,53407,53408],{},"dir用来打印对象",[1118,53410,53411,53414,53417],{},[58,53412,53413],{},"任何一个标签，都是一个对象",[58,53415,53416],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[58,53418,53419],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[10,53421,53422],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[72,53424,53426],{"id":53425},"_312-获取dom对象","3.1.2 获取DoM对象",[10,53428,53429],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[10,53431,53432],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[10,53434,53435],{},[261,53436,53437],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[55,53439,53440],{},[58,53441,53442],{},"利用CSS选择器来获取标签元素",[10,53444,53445],{},[1449,53446],{"alt":20,"src":53447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[10,53449,53450],{},"里边的选择器必须必须加引号！！！",[10,53452,53453],{},"只选择第一个元素",[92,53455,53457],{"className":53056,"code":53456,"language":53058,"meta":20,"style":20},"\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",[98,53458,53459,53467,53488,53507,53515,53520,53525,53530,53538],{"__ignoreMap":20},[101,53460,53461,53463,53465],{"class":103,"line":104},[101,53462,1021],{"class":111},[101,53464,51789],{"class":51289},[101,53466,51296],{"class":111},[101,53468,53469,53471,53473,53476,53478,53481,53484,53486],{"class":103,"line":21},[101,53470,52133],{"class":111},[101,53472,51600],{"class":51289},[101,53474,53475],{"class":1950}," class",[101,53477,157],{"class":111},[101,53479,53480],{"class":216},"\"box\"",[101,53482,53483],{"class":111},">123\u003C\u002F",[101,53485,51600],{"class":51289},[101,53487,51296],{"class":111},[101,53489,53490,53492,53494,53496,53498,53500,53503,53505],{"class":103,"line":1166},[101,53491,52133],{"class":111},[101,53493,51600],{"class":51289},[101,53495,53475],{"class":1950},[101,53497,157],{"class":111},[101,53499,53480],{"class":216},[101,53501,53502],{"class":111},">456\u003C\u002F",[101,53504,51600],{"class":51289},[101,53506,51296],{"class":111},[101,53508,53509,53511,53513],{"class":103,"line":1181},[101,53510,52133],{"class":111},[101,53512,51802],{"class":51289},[101,53514,51296],{"class":111},[101,53516,53517],{"class":103,"line":1187},[101,53518,53519],{"class":111},"    \u002F\u002F 1.获取匹配的第一个元素\n",[101,53521,53522],{"class":103,"line":1201},[101,53523,53524],{"class":111},"    const box = document.querySelector('div')\n",[101,53526,53527],{"class":103,"line":1207},[101,53528,53529],{"class":111},"    console.dir(box)\n",[101,53531,53532,53534,53536],{"class":103,"line":1298},[101,53533,52406],{"class":111},[101,53535,51802],{"class":51289},[101,53537,51296],{"class":111},[101,53539,53540,53542,53544],{"class":103,"line":1304},[101,53541,51774],{"class":111},[101,53543,51789],{"class":51289},[101,53545,51296],{"class":111},[10,53547,53548],{},"只选123，不选456",[10,53550,53551],{},[1449,53552],{"alt":20,"src":53553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[10,53555,53556],{},"返回的是一个数组的集合，不能对其进行直接修改",[10,53558,53559],{},[1449,53560],{"alt":20,"src":53561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[10,53563,53564],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[10,53566,53567],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[55,53569,53570],{"start":21},[58,53571,53572],{},"其他方法来获取标签元素",[10,53574,53575],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[10,53577,53578],{},[1449,53579],{"alt":20,"src":53580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[72,53582,53584],{"id":53583},"_313-操作元素的内容","3.1.3 操作元素的内容",[10,53586,53587],{},"设置修改DOM元素内容有两种方式：",[1118,53589,53590,53593,53596,53599],{},[58,53591,53592],{},"元素.innerText=''",[58,53594,53595],{},"元素.innerHTML=''",[58,53597,53598],{},"不写字符串输出数字也是可以的",[58,53600,53601],{},"元素.innerHtml=1",[21986,53603,53605],{"id":53604},"_3131-innertext","3.1.3.1 innerText",[10,53607,53608],{},[1449,53609],{"alt":20,"src":53610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[10,53612,53613],{},"思路：实现了修改盒子中的内容！",[10,53615,53616],{},"它只显示纯文本，不解析标签",[21986,53618,53620],{"id":53619},"_3132-innerhtml","3.1.3.2 innerHTML",[10,53622,53623],{},[1449,53624],{"alt":20,"src":53625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[10,53627,53628],{},"相比于innerText，他的强大之处在于可以解析标签",[72,53630,53632],{"id":53631},"_314-操作元素属性","3.1.4 操作元素属性",[21986,53634,53636],{"id":53635},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[10,53638,53639],{},[1449,53640],{"alt":20,"src":53641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21986,53643,53645],{"id":53644},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[10,53647,53648],{},[1449,53649],{"alt":20,"src":53650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[10,53652,53653],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[10,53655,53656],{},"div.style.backgroundColor = 'hotpink'",[10,53658,53659],{},"如果按照css的写法，-表示减，就会出错",[10,53661,53662],{},"body元素不需要再获取，直接用就行！！！！！！",[10,53664,53665],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[10,53667,53668],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[10,53670,53671],{},[1449,53672],{"alt":20,"src":53673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[10,53675,53676],{},[1449,53677],{"alt":20,"src":53678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[55,53680,53681,53684,53687,53690,53693,53696],{},[58,53682,53683],{},"className这个方式就是修改很多样式的时候来使用的！",[58,53685,53686],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[58,53688,53689],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[58,53691,53692],{},"className为属性名，如果还用class的话就导致与关键字冲突",[58,53694,53695],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[58,53697,53698,53699,53704],{},"解析标签的时候就变为了",[51600,53700],{"className":53701},[53702,53703],"nav","box",[53705,53706],"br",{},[10,53708,53709],{},"例子：",[51600,53711],{"className":53712},[53702],[51802,53714,53715],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[10,53717,53718],{},[1449,53719],{"alt":20,"src":53720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[10,53722,53723],{},"追加和删除类名用classList",[10,53725,53726],{},"常用于类似于开关的操作",[10,53728,53729],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[10,53731,53732],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21986,53734,53736],{"id":53735},"_3143-牢记点","3.1.4.3 牢记点",[55,53738,53739,53742,53745,53748,53751,53754,53757,53760,53763],{},[58,53740,53741],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[58,53743,53744],{},"使用style属性操作css时不要忘记引号",[58,53746,53747],{},"使用className或者classList时也不要忘记引号",[58,53749,53750],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[58,53752,53753],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[58,53755,53756],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[58,53758,53759],{},"若： let arr=['1','2',3] arr[0]=1",[58,53761,53762],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[58,53764,53765],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[72,53767,53769],{"id":53768},"_315-操作表单元素","3.1.5 操作表单元素",[55,53771,53772],{},[58,53773,53774],{},"天生的属性",[10,53776,53777],{},[1449,53778],{"alt":20,"src":53779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[10,53781,53782],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[10,53784,53785],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[10,53787,53788],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[10,53790,53791],{},[1449,53792],{"alt":20,"src":53793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[92,53795,53797],{"className":50622,"code":53796,"language":50624,"meta":20,"style":20},"在复选框中如果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",[98,53798,53799,53804,53836,53841,53846,53851,53856,53860,53865,53870,53887,53899,53904],{"__ignoreMap":20},[101,53800,53801],{"class":103,"line":104},[101,53802,53803],{"class":111},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[101,53805,53806,53808,53811,53814,53816,53819,53821,53823,53825,53827,53829,53831,53834],{"class":103,"line":21},[101,53807,1021],{"class":111},[101,53809,53810],{"class":51289},"input",[101,53812,53813],{"class":1950}," type",[101,53815,157],{"class":111},[101,53817,53818],{"class":216},"\"checkbox\"",[101,53820,14908],{"class":1950},[101,53822,157],{"class":111},[101,53824,7640],{"class":216},[101,53826,14947],{"class":1950},[101,53828,157],{"class":111},[101,53830,7640],{"class":216},[101,53832,53833],{"class":1950}," checked",[101,53835,51296],{"class":111},[101,53837,53838],{"class":103,"line":1166},[101,53839,53840],{"class":111},"不选的话：\n",[101,53842,53843],{"class":103,"line":1181},[101,53844,53845],{"class":111},"const input = document.querySelector('input')\n",[101,53847,53848],{"class":103,"line":1187},[101,53849,53850],{"class":111},"input.checked=false\n",[101,53852,53853],{"class":103,"line":1201},[101,53854,53855],{"class":111},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[101,53857,53858],{"class":103,"line":1207},[101,53859,2387],{"emptyLinePlaceholder":27},[101,53861,53862],{"class":103,"line":1298},[101,53863,53864],{"class":111},"禁用按钮：\n",[101,53866,53867],{"class":103,"line":1304},[101,53868,53869],{"class":111},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[101,53871,53872,53874,53877,53880,53883,53885],{"class":103,"line":1316},[101,53873,1021],{"class":111},[101,53875,53876],{"class":51289},"button",[101,53878,53879],{"class":1950}," disabled",[101,53881,53882],{"class":111},">点击\u003C\u002F",[101,53884,53876],{"class":51289},[101,53886,51296],{"class":111},[101,53888,53889,53891,53893,53895,53897],{"class":103,"line":1599},[101,53890,1021],{"class":111},[101,53892,53876],{"class":51289},[101,53894,53882],{"class":111},[101,53896,53876],{"class":51289},[101,53898,51296],{"class":111},[101,53900,53901],{"class":103,"line":1604},[101,53902,53903],{"class":111},"const bt = document.querySelector('button')\n",[101,53905,53906],{"class":103,"line":1610},[101,53907,53908],{"class":111},"bt.disabled = false\n",[55,53910,53911],{"start":21},[58,53912,53913],{},"自定义属性",[10,53915,53916],{},[1449,53917],{"alt":20,"src":53918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[92,53920,53922],{"className":53056,"code":53921,"language":53058,"meta":20,"style":20},"\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",[98,53923,53924,53932,53960,53979,53998,54017,54036,54044,54049,54054,54059,54064,54072],{"__ignoreMap":20},[101,53925,53926,53928,53930],{"class":103,"line":104},[101,53927,1021],{"class":111},[101,53929,51789],{"class":51289},[101,53931,51296],{"class":111},[101,53933,53934,53936,53938,53941,53943,53945,53948,53950,53953,53956,53958],{"class":103,"line":21},[101,53935,52133],{"class":111},[101,53937,51600],{"class":51289},[101,53939,53940],{"class":1950}," data-id",[101,53942,157],{"class":111},[101,53944,3665],{"class":216},[101,53946,53947],{"class":1950}," data-spm",[101,53949,157],{"class":111},[101,53951,53952],{"class":216},"\"我不知道\"",[101,53954,53955],{"class":111},">1\u003C\u002F",[101,53957,51600],{"class":51289},[101,53959,51296],{"class":111},[101,53961,53962,53964,53966,53968,53970,53972,53975,53977],{"class":103,"line":1166},[101,53963,52133],{"class":111},[101,53965,51600],{"class":51289},[101,53967,53940],{"class":1950},[101,53969,157],{"class":111},[101,53971,3688],{"class":216},[101,53973,53974],{"class":111},">2\u003C\u002F",[101,53976,51600],{"class":51289},[101,53978,51296],{"class":111},[101,53980,53981,53983,53985,53987,53989,53991,53994,53996],{"class":103,"line":1181},[101,53982,52133],{"class":111},[101,53984,51600],{"class":51289},[101,53986,53940],{"class":1950},[101,53988,157],{"class":111},[101,53990,3701],{"class":216},[101,53992,53993],{"class":111},">3\u003C\u002F",[101,53995,51600],{"class":51289},[101,53997,51296],{"class":111},[101,53999,54000,54002,54004,54006,54008,54010,54013,54015],{"class":103,"line":1187},[101,54001,52133],{"class":111},[101,54003,51600],{"class":51289},[101,54005,53940],{"class":1950},[101,54007,157],{"class":111},[101,54009,3714],{"class":216},[101,54011,54012],{"class":111},">4\u003C\u002F",[101,54014,51600],{"class":51289},[101,54016,51296],{"class":111},[101,54018,54019,54021,54023,54025,54027,54029,54032,54034],{"class":103,"line":1201},[101,54020,52133],{"class":111},[101,54022,51600],{"class":51289},[101,54024,53940],{"class":1950},[101,54026,157],{"class":111},[101,54028,3735],{"class":216},[101,54030,54031],{"class":111},">5\u003C\u002F",[101,54033,51600],{"class":51289},[101,54035,51296],{"class":111},[101,54037,54038,54040,54042],{"class":103,"line":1207},[101,54039,52133],{"class":111},[101,54041,51802],{"class":51289},[101,54043,51296],{"class":111},[101,54045,54046],{"class":103,"line":1298},[101,54047,54048],{"class":111},"    const one = document.querySelector('div')\n",[101,54050,54051],{"class":103,"line":1304},[101,54052,54053],{"class":111},"    console.log(one.dataset)\n",[101,54055,54056],{"class":103,"line":1316},[101,54057,54058],{"class":111},"    console.log(one.dataset.id)\n",[101,54060,54061],{"class":103,"line":1599},[101,54062,54063],{"class":111},"    console.log(one.dataset.spm)\n",[101,54065,54066,54068,54070],{"class":103,"line":1604},[101,54067,52406],{"class":111},[101,54069,51802],{"class":51289},[101,54071,51296],{"class":111},[101,54073,54074,54076,54078],{"class":103,"line":1610},[101,54075,51774],{"class":111},[101,54077,51789],{"class":51289},[101,54079,51296],{"class":111},[10,54081,54082],{},[1449,54083],{"alt":20,"src":54084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[10,54086,54087],{},"document.querySelector选择的是第一个对象（元素）",[72,54089,54091],{"id":54090},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[10,54093,54094],{},[1449,54095],{"alt":20,"src":54096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[10,54098,54099],{},[1449,54100],{"alt":20,"src":54101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[10,54103,54104],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51802,54106,54107],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[10,54109,54110],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51802,54112,54113],{},"\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",[10,54115,54116],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[10,54118,54119],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[10,54121,54122],{},"单位为毫秒！！！",[10,54124,54125],{},"可以搭配匿名函数来用！！！",[10,54127,54128],{},"setInterval(function () {",[10,54130,54131],{},"alert('两秒执行一次')",[10,54133,54134],{},"}, 2000)",[10,54136,54137],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[10,54139,54140],{},"function fn() {",[10,54142,54143],{},"document.write(1)",[10,54145,1057],{},[10,54147,54148],{},"setInterval(fn, 1000)",[10,54150,54151],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[10,54153,54154],{},"setInterval('fn()', 1000)",[10,54156,54157],{},[1449,54158],{"alt":20,"src":54159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21986,54161,54163],{"id":54162},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[92,54165,54167],{"className":50622,"code":54166,"language":50624,"meta":20,"style":20},"\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",[98,54168,54169,54179,54193,54197,54205,54219,54239,54251,54259,54263,54271,54308,54313,54318,54323,54331,54339,54361,54369,54374,54396,54401,54406,54417,54422,54442,54450,54465,54480,54491,54496,54506,54516,54520,54529,54533,54541,54549,54553],{"__ignoreMap":20},[101,54170,54171,54173,54175,54177],{"class":103,"line":104},[101,54172,51286],{"class":111},[101,54174,51290],{"class":51289},[101,54176,51293],{"class":1950},[101,54178,51296],{"class":111},[101,54180,54181,54183,54185,54187,54189,54191],{"class":103,"line":21},[101,54182,1021],{"class":111},[101,54184,50624],{"class":51289},[101,54186,51305],{"class":1950},[101,54188,157],{"class":111},[101,54190,51310],{"class":216},[101,54192,51296],{"class":111},[101,54194,54195],{"class":103,"line":1166},[101,54196,2387],{"emptyLinePlaceholder":27},[101,54198,54199,54201,54203],{"class":103,"line":1181},[101,54200,1021],{"class":111},[101,54202,51323],{"class":51289},[101,54204,51296],{"class":111},[101,54206,54207,54209,54211,54213,54215,54217],{"class":103,"line":1187},[101,54208,52133],{"class":111},[101,54210,51333],{"class":51289},[101,54212,51336],{"class":1950},[101,54214,157],{"class":111},[101,54216,51341],{"class":216},[101,54218,51296],{"class":111},[101,54220,54221,54223,54225,54227,54229,54231,54233,54235,54237],{"class":103,"line":1201},[101,54222,52133],{"class":111},[101,54224,51333],{"class":51289},[101,54226,14908],{"class":1950},[101,54228,157],{"class":111},[101,54230,51380],{"class":216},[101,54232,51360],{"class":1950},[101,54234,157],{"class":111},[101,54236,51387],{"class":216},[101,54238,51296],{"class":111},[101,54240,54241,54243,54245,54247,54249],{"class":103,"line":1207},[101,54242,52133],{"class":111},[101,54244,51396],{"class":51289},[101,54246,51399],{"class":111},[101,54248,51396],{"class":51289},[101,54250,51296],{"class":111},[101,54252,54253,54255,54257],{"class":103,"line":1298},[101,54254,51774],{"class":111},[101,54256,51323],{"class":51289},[101,54258,51296],{"class":111},[101,54260,54261],{"class":103,"line":1304},[101,54262,2387],{"emptyLinePlaceholder":27},[101,54264,54265,54267,54269],{"class":103,"line":1316},[101,54266,1021],{"class":111},[101,54268,51789],{"class":51289},[101,54270,51296],{"class":111},[101,54272,54273,54275,54278,54280,54282,54284,54286,54288,54290,54293,54295,54298,54301,54303,54306],{"class":103,"line":1599},[101,54274,52133],{"class":111},[101,54276,54277],{"class":51289},"textarea",[101,54279,14908],{"class":1950},[101,54281,157],{"class":111},[101,54283,7640],{"class":216},[101,54285,14947],{"class":1950},[101,54287,157],{"class":111},[101,54289,7640],{"class":216},[101,54291,54292],{"class":1950}," cols",[101,54294,157],{"class":111},[101,54296,54297],{"class":216},"\"30\"",[101,54299,54300],{"class":1950}," rows",[101,54302,157],{"class":111},[101,54304,54305],{"class":216},"\"10\"",[101,54307,51296],{"class":111},[101,54309,54310],{"class":103,"line":1604},[101,54311,54312],{"class":111},"        用户注册协议\n",[101,54314,54315],{"class":103,"line":1610},[101,54316,54317],{"class":111},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[101,54319,54320],{"class":103,"line":1615},[101,54321,54322],{"class":111},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[101,54324,54325,54327,54329],{"class":103,"line":1629},[101,54326,51765],{"class":111},[101,54328,54277],{"class":51289},[101,54330,51296],{"class":111},[101,54332,54333,54335,54337],{"class":103,"line":1634},[101,54334,52133],{"class":111},[101,54336,53705],{"class":51289},[101,54338,51296],{"class":111},[101,54340,54341,54343,54345,54347,54349,54352,54354,54357,54359],{"class":103,"line":1640},[101,54342,52133],{"class":111},[101,54344,53876],{"class":51289},[101,54346,53475],{"class":1950},[101,54348,157],{"class":111},[101,54350,54351],{"class":216},"\"btn\"",[101,54353,53879],{"class":1950},[101,54355,54356],{"class":111},">我已经阅读用户协议(5)\u003C\u002F",[101,54358,53876],{"class":51289},[101,54360,51296],{"class":111},[101,54362,54363,54365,54367],{"class":103,"line":1661},[101,54364,52133],{"class":111},[101,54366,51802],{"class":51289},[101,54368,51296],{"class":111},[101,54370,54371],{"class":103,"line":1666},[101,54372,54373],{"class":170},"    \u002F\u002F 1. 获取元素\n",[101,54375,54376,54378,54381,54383,54386,54389,54391,54394],{"class":103,"line":1680},[101,54377,11209],{"class":107},[101,54379,54380],{"class":160}," btn",[101,54382,13552],{"class":107},[101,54384,54385],{"class":111}," document.",[101,54387,54388],{"class":1950},"querySelector",[101,54390,112],{"class":111},[101,54392,54393],{"class":216},"'.btn'",[101,54395,118],{"class":111},[101,54397,54398],{"class":103,"line":1685},[101,54399,54400],{"class":170},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[101,54402,54403],{"class":103,"line":1714},[101,54404,54405],{"class":170},"    \u002F\u002F 2. 倒计时\n",[101,54407,54408,54410,54412,54414],{"class":103,"line":1719},[101,54409,52208],{"class":107},[101,54411,9426],{"class":111},[101,54413,157],{"class":107},[101,54415,54416],{"class":160}," 5\n",[101,54418,54419],{"class":103,"line":1736},[101,54420,54421],{"class":170},"    \u002F\u002F 2.1 开启定时器\n",[101,54423,54424,54426,54429,54431,54434,54436,54439],{"class":103,"line":1741},[101,54425,52208],{"class":107},[101,54427,54428],{"class":111}," n ",[101,54430,157],{"class":107},[101,54432,54433],{"class":1950}," setInterval",[101,54435,112],{"class":111},[101,54437,54438],{"class":107},"function",[101,54440,54441],{"class":111}," () {\n",[101,54443,54444,54447],{"class":103,"line":1746},[101,54445,54446],{"class":111},"      i",[101,54448,54449],{"class":107},"--\n",[101,54451,54452,54455,54457,54460,54462],{"class":103,"line":1751},[101,54453,54454],{"class":111},"      btn.innerHTML ",[101,54456,157],{"class":107},[101,54458,54459],{"class":216}," `我已经阅读用户协议(${",[101,54461,552],{"class":111},[101,54463,54464],{"class":216},"})`\n",[101,54466,54467,54470,54473,54476,54478],{"class":103,"line":1765},[101,54468,54469],{"class":107},"      if",[101,54471,54472],{"class":111}," (i ",[101,54474,54475],{"class":107},"===",[101,54477,4080],{"class":160},[101,54479,12430],{"class":111},[101,54481,54482,54485,54488],{"class":103,"line":1770},[101,54483,54484],{"class":1950},"        clearInterval",[101,54486,54487],{"class":111},"(n)  ",[101,54489,54490],{"class":170},"\u002F\u002F 关闭定时器\n",[101,54492,54493],{"class":103,"line":2564},[101,54494,54495],{"class":170},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[101,54497,54498,54501,54503],{"class":103,"line":2578},[101,54499,54500],{"class":111},"        btn.disabled ",[101,54502,157],{"class":107},[101,54504,54505],{"class":160}," false\n",[101,54507,54508,54511,54513],{"class":103,"line":2586},[101,54509,54510],{"class":111},"        btn.innerHTML ",[101,54512,157],{"class":107},[101,54514,54515],{"class":216}," '同意'\n",[101,54517,54518],{"class":103,"line":2591},[101,54519,52387],{"class":111},[101,54521,54522,54525,54527],{"class":103,"line":2597},[101,54523,54524],{"class":111},"    }, ",[101,54526,6398],{"class":160},[101,54528,118],{"class":111},[101,54530,54531],{"class":103,"line":2603},[101,54532,2387],{"emptyLinePlaceholder":27},[101,54534,54535,54537,54539],{"class":103,"line":2608},[101,54536,52406],{"class":111},[101,54538,51802],{"class":51289},[101,54540,51296],{"class":111},[101,54542,54543,54545,54547],{"class":103,"line":7936},[101,54544,51774],{"class":111},[101,54546,51789],{"class":51289},[101,54548,51296],{"class":111},[101,54550,54551],{"class":103,"line":7960},[101,54552,2387],{"emptyLinePlaceholder":27},[101,54554,54555,54557,54559],{"class":103,"line":7965},[101,54556,51774],{"class":111},[101,54558,50624],{"class":51289},[101,54560,51296],{"class":111},[10,54562,54563],{},"不要一直想着用死循环,避免死循环",[10,54565,54566,54569],{},[98,54567,54568],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21986,54571,54573],{"id":54572},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[55,54575,54576],{},[58,54577,54578],{},"法1",[92,54580,54582],{"className":50622,"code":54581,"language":50624,"meta":20,"style":20},"\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",[98,54583,54584,54594,54608,54612,54620,54634,54654,54666,54674,54680,54691,54702,54706,54710,54717,54729,54733,54737,54744,54756,54770,54783,54797,54801,54805,54812,54823,54834,54845,54857,54869,54881,54885,54889,54897,54907,54920,54932,54945,54949,54953,54960,54970,54982,54994,55005,55016,55026,55038,55050,55054,55058,55067,55079,55091,55119,55132,55136,55140,55147,55158,55162,55170,55178,55182,55190,55204,55219,55243,55251,55266,55279,55287,55308,55320,55332,55344,55356,55368,55380,55392,55401,55409,55417,55425,55437,55460,55479,55498,55517,55536,55555,55574,55594,55598,55618,55637,55657,55678,55689,55706,55716,55726,55736,55741,55746,55751,55756,55781,55794,55798,55821,55825,55833,55841,55849,55853],{"__ignoreMap":20},[101,54585,54586,54588,54590,54592],{"class":103,"line":104},[101,54587,51286],{"class":111},[101,54589,51290],{"class":51289},[101,54591,51293],{"class":1950},[101,54593,51296],{"class":111},[101,54595,54596,54598,54600,54602,54604,54606],{"class":103,"line":21},[101,54597,1021],{"class":111},[101,54599,50624],{"class":51289},[101,54601,51305],{"class":1950},[101,54603,157],{"class":111},[101,54605,51310],{"class":216},[101,54607,51296],{"class":111},[101,54609,54610],{"class":103,"line":1166},[101,54611,2387],{"emptyLinePlaceholder":27},[101,54613,54614,54616,54618],{"class":103,"line":1181},[101,54615,1021],{"class":111},[101,54617,51323],{"class":51289},[101,54619,51296],{"class":111},[101,54621,54622,54624,54626,54628,54630,54632],{"class":103,"line":1187},[101,54623,52133],{"class":111},[101,54625,51333],{"class":51289},[101,54627,51336],{"class":1950},[101,54629,157],{"class":111},[101,54631,51341],{"class":216},[101,54633,51296],{"class":111},[101,54635,54636,54638,54640,54642,54644,54646,54648,54650,54652],{"class":103,"line":1201},[101,54637,52133],{"class":111},[101,54639,51333],{"class":51289},[101,54641,14908],{"class":1950},[101,54643,157],{"class":111},[101,54645,51380],{"class":216},[101,54647,51360],{"class":1950},[101,54649,157],{"class":111},[101,54651,51387],{"class":216},[101,54653,51296],{"class":111},[101,54655,54656,54658,54660,54662,54664],{"class":103,"line":1207},[101,54657,52133],{"class":111},[101,54659,51396],{"class":51289},[101,54661,51399],{"class":111},[101,54663,51396],{"class":51289},[101,54665,51296],{"class":111},[101,54667,54668,54670,54672],{"class":103,"line":1298},[101,54669,52133],{"class":111},[101,54671,5114],{"class":51289},[101,54673,51296],{"class":111},[101,54675,54676,54678],{"class":103,"line":1304},[101,54677,6391],{"class":51289},[101,54679,15560],{"class":111},[101,54681,54682,54685,54687,54689],{"class":103,"line":1316},[101,54683,54684],{"class":160},"      padding",[101,54686,51426],{"class":111},[101,54688,303],{"class":160},[101,54690,1277],{"class":111},[101,54692,54693,54696,54698,54700],{"class":103,"line":1599},[101,54694,54695],{"class":160},"      margin",[101,54697,51426],{"class":111},[101,54699,303],{"class":160},[101,54701,1277],{"class":111},[101,54703,54704],{"class":103,"line":1604},[101,54705,2174],{"class":111},[101,54707,54708],{"class":103,"line":1610},[101,54709,2387],{"emptyLinePlaceholder":27},[101,54711,54712,54715],{"class":103,"line":1615},[101,54713,54714],{"class":51289},"    li",[101,54716,15560],{"class":111},[101,54718,54719,54722,54724,54727],{"class":103,"line":1629},[101,54720,54721],{"class":160},"      list-style",[101,54723,51426],{"class":111},[101,54725,54726],{"class":160},"none",[101,54728,1277],{"class":111},[101,54730,54731],{"class":103,"line":1634},[101,54732,2174],{"class":111},[101,54734,54735],{"class":103,"line":1640},[101,54736,2387],{"emptyLinePlaceholder":27},[101,54738,54739,54742],{"class":103,"line":1661},[101,54740,54741],{"class":1950},"    .box",[101,54743,15560],{"class":111},[101,54745,54746,54749,54751,54754],{"class":103,"line":1666},[101,54747,54748],{"class":160},"      position",[101,54750,51426],{"class":111},[101,54752,54753],{"class":160},"relative",[101,54755,1277],{"class":111},[101,54757,54758,54761,54763,54766,54768],{"class":103,"line":1680},[101,54759,54760],{"class":160},"      width",[101,54762,51426],{"class":111},[101,54764,54765],{"class":160},"976",[101,54767,51481],{"class":107},[101,54769,1277],{"class":111},[101,54771,54772,54775,54777,54779,54781],{"class":103,"line":1685},[101,54773,54774],{"class":160},"      height",[101,54776,51426],{"class":111},[101,54778,1526],{"class":160},[101,54780,51481],{"class":107},[101,54782,1277],{"class":111},[101,54784,54785,54787,54789,54791,54793,54795],{"class":103,"line":1714},[101,54786,54695],{"class":160},[101,54788,51426],{"class":111},[101,54790,422],{"class":160},[101,54792,51481],{"class":107},[101,54794,51545],{"class":160},[101,54796,1277],{"class":111},[101,54798,54799],{"class":103,"line":1719},[101,54800,2174],{"class":111},[101,54802,54803],{"class":103,"line":1736},[101,54804,2387],{"emptyLinePlaceholder":27},[101,54806,54807,54810],{"class":103,"line":1741},[101,54808,54809],{"class":1950},"    .slider-footer",[101,54811,15560],{"class":111},[101,54813,54814,54816,54818,54821],{"class":103,"line":1746},[101,54815,54748],{"class":160},[101,54817,51426],{"class":111},[101,54819,54820],{"class":160},"absolute",[101,54822,1277],{"class":111},[101,54824,54825,54828,54830,54832],{"class":103,"line":1751},[101,54826,54827],{"class":160},"      left",[101,54829,51426],{"class":111},[101,54831,303],{"class":160},[101,54833,1277],{"class":111},[101,54835,54836,54839,54841,54843],{"class":103,"line":1765},[101,54837,54838],{"class":160},"      bottom",[101,54840,51426],{"class":111},[101,54842,303],{"class":160},[101,54844,1277],{"class":111},[101,54846,54847,54849,54851,54853,54855],{"class":103,"line":1770},[101,54848,54760],{"class":160},[101,54850,51426],{"class":111},[101,54852,422],{"class":160},[101,54854,439],{"class":107},[101,54856,1277],{"class":111},[101,54858,54859,54861,54863,54865,54867],{"class":103,"line":2564},[101,54860,54774],{"class":160},[101,54862,51426],{"class":111},[101,54864,686],{"class":160},[101,54866,439],{"class":107},[101,54868,1277],{"class":111},[101,54870,54871,54874,54876,54879],{"class":103,"line":2578},[101,54872,54873],{"class":160},"      background-color",[101,54875,51426],{"class":111},[101,54877,54878],{"class":160},"skyblue",[101,54880,1277],{"class":111},[101,54882,54883],{"class":103,"line":2586},[101,54884,2174],{"class":111},[101,54886,54887],{"class":103,"line":2591},[101,54888,2387],{"emptyLinePlaceholder":27},[101,54890,54891,54893,54895],{"class":103,"line":2597},[101,54892,54809],{"class":1950},[101,54894,6813],{"class":51289},[101,54896,15560],{"class":111},[101,54898,54899,54901,54903,54905],{"class":103,"line":2603},[101,54900,54748],{"class":160},[101,54902,51426],{"class":111},[101,54904,54820],{"class":160},[101,54906,1277],{"class":111},[101,54908,54909,54912,54914,54916,54918],{"class":103,"line":2608},[101,54910,54911],{"class":160},"      font-size",[101,54913,51426],{"class":111},[101,54915,1012],{"class":160},[101,54917,51481],{"class":107},[101,54919,1277],{"class":111},[101,54921,54922,54924,54926,54928,54930],{"class":103,"line":7936},[101,54923,54827],{"class":160},[101,54925,51426],{"class":111},[101,54927,811],{"class":160},[101,54929,51481],{"class":107},[101,54931,1277],{"class":111},[101,54933,54934,54937,54939,54941,54943],{"class":103,"line":7960},[101,54935,54936],{"class":160},"      top",[101,54938,51426],{"class":111},[101,54940,430],{"class":160},[101,54942,51481],{"class":107},[101,54944,1277],{"class":111},[101,54946,54947],{"class":103,"line":7965},[101,54948,2174],{"class":111},[101,54950,54951],{"class":103,"line":7971},[101,54952,2387],{"emptyLinePlaceholder":27},[101,54954,54955,54958],{"class":103,"line":7998},[101,54956,54957],{"class":51289},"    ul",[101,54959,15560],{"class":111},[101,54961,54962,54964,54966,54968],{"class":103,"line":8003},[101,54963,54748],{"class":160},[101,54965,51426],{"class":111},[101,54967,54820],{"class":160},[101,54969,1277],{"class":111},[101,54971,54972,54974,54976,54978,54980],{"class":103,"line":8009},[101,54973,54936],{"class":160},[101,54975,51426],{"class":111},[101,54977,892],{"class":160},[101,54979,51481],{"class":107},[101,54981,1277],{"class":111},[101,54983,54984,54986,54988,54990,54992],{"class":103,"line":8021},[101,54985,54827],{"class":160},[101,54987,51426],{"class":111},[101,54989,811],{"class":160},[101,54991,51481],{"class":107},[101,54993,1277],{"class":111},[101,54995,54996,54999,55001,55003],{"class":103,"line":8033},[101,54997,54998],{"class":160},"      display",[101,55000,51426],{"class":111},[101,55002,51466],{"class":160},[101,55004,1277],{"class":111},[101,55006,55007,55010,55012,55014],{"class":103,"line":8045},[101,55008,55009],{"class":160},"      justify-content",[101,55011,51426],{"class":111},[101,55013,51657],{"class":160},[101,55015,1277],{"class":111},[101,55017,55018,55020,55022,55024],{"class":103,"line":9704},[101,55019,54748],{"class":160},[101,55021,51426],{"class":111},[101,55023,54820],{"class":160},[101,55025,1277],{"class":111},[101,55027,55028,55030,55032,55034,55036],{"class":103,"line":9729},[101,55029,54760],{"class":160},[101,55031,51426],{"class":111},[101,55033,3979],{"class":160},[101,55035,51481],{"class":107},[101,55037,1277],{"class":111},[101,55039,55040,55042,55044,55046,55048],{"class":103,"line":9752},[101,55041,54774],{"class":160},[101,55043,51426],{"class":111},[101,55045,811],{"class":160},[101,55047,51481],{"class":107},[101,55049,1277],{"class":111},[101,55051,55052],{"class":103,"line":9776},[101,55053,2174],{"class":111},[101,55055,55056],{"class":103,"line":9781},[101,55057,2387],{"emptyLinePlaceholder":27},[101,55059,55060,55062,55065],{"class":103,"line":9786},[101,55061,54957],{"class":51289},[101,55063,55064],{"class":51289}," li",[101,55066,15560],{"class":111},[101,55068,55069,55071,55073,55075,55077],{"class":103,"line":9791},[101,55070,54760],{"class":160},[101,55072,51426],{"class":111},[101,55074,811],{"class":160},[101,55076,51481],{"class":107},[101,55078,1277],{"class":111},[101,55080,55081,55083,55085,55087,55089],{"class":103,"line":9800},[101,55082,54774],{"class":160},[101,55084,51426],{"class":111},[101,55086,811],{"class":160},[101,55088,51481],{"class":107},[101,55090,1277],{"class":111},[101,55092,55093,55095,55097,55100,55102,55104,55106,55108,55110,55112,55114,55117],{"class":103,"line":9805},[101,55094,54873],{"class":160},[101,55096,51426],{"class":111},[101,55098,55099],{"class":160},"rgba",[101,55101,112],{"class":111},[101,55103,303],{"class":160},[101,55105,12423],{"class":111},[101,55107,303],{"class":160},[101,55109,12423],{"class":111},[101,55111,303],{"class":160},[101,55113,12423],{"class":111},[101,55115,55116],{"class":160},".4",[101,55118,2706],{"class":111},[101,55120,55121,55124,55126,55128,55130],{"class":103,"line":9811},[101,55122,55123],{"class":160},"      border-radius",[101,55125,51426],{"class":111},[101,55127,557],{"class":160},[101,55129,51481],{"class":107},[101,55131,1277],{"class":111},[101,55133,55134],{"class":103,"line":9832},[101,55135,2174],{"class":111},[101,55137,55138],{"class":103,"line":9838},[101,55139,2387],{"emptyLinePlaceholder":27},[101,55141,55142,55145],{"class":103,"line":9852},[101,55143,55144],{"class":1950},"    .activate",[101,55146,15560],{"class":111},[101,55148,55149,55151,55153,55156],{"class":103,"line":9858},[101,55150,54873],{"class":160},[101,55152,51426],{"class":111},[101,55154,55155],{"class":160},"#f7f7f7",[101,55157,1277],{"class":111},[101,55159,55160],{"class":103,"line":9885},[101,55161,2174],{"class":111},[101,55163,55164,55166,55168],{"class":103,"line":9894},[101,55165,52406],{"class":111},[101,55167,5114],{"class":51289},[101,55169,51296],{"class":111},[101,55171,55172,55174,55176],{"class":103,"line":9900},[101,55173,51774],{"class":111},[101,55175,51323],{"class":51289},[101,55177,51296],{"class":111},[101,55179,55180],{"class":103,"line":9908},[101,55181,2387],{"emptyLinePlaceholder":27},[101,55183,55184,55186,55188],{"class":103,"line":9913},[101,55185,1021],{"class":111},[101,55187,51789],{"class":51289},[101,55189,51296],{"class":111},[101,55191,55192,55194,55196,55198,55200,55202],{"class":103,"line":16592},[101,55193,52133],{"class":111},[101,55195,51600],{"class":51289},[101,55197,53475],{"class":1950},[101,55199,157],{"class":111},[101,55201,53480],{"class":216},[101,55203,51296],{"class":111},[101,55205,55206,55208,55210,55212,55214,55217],{"class":103,"line":16598},[101,55207,51330],{"class":111},[101,55209,51600],{"class":51289},[101,55211,53475],{"class":1950},[101,55213,157],{"class":111},[101,55215,55216],{"class":216},"\"slider-wrapper\"",[101,55218,51296],{"class":111},[101,55220,55221,55224,55226,55229,55231,55234,55237,55239,55241],{"class":103,"line":16621},[101,55222,55223],{"class":111},"      \u003C",[101,55225,1449],{"class":51289},[101,55227,55228],{"class":1950}," src",[101,55230,157],{"class":111},[101,55232,55233],{"class":216},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[101,55235,55236],{"class":1950}," alt",[101,55238,157],{"class":111},[101,55240,7640],{"class":216},[101,55242,51296],{"class":111},[101,55244,55245,55247,55249],{"class":103,"line":16627},[101,55246,51765],{"class":111},[101,55248,51600],{"class":51289},[101,55250,51296],{"class":111},[101,55252,55253,55255,55257,55259,55261,55264],{"class":103,"line":16650},[101,55254,51330],{"class":111},[101,55256,51600],{"class":51289},[101,55258,53475],{"class":1950},[101,55260,157],{"class":111},[101,55262,55263],{"class":216},"\"slider-footer\"",[101,55265,51296],{"class":111},[101,55267,55268,55270,55272,55275,55277],{"class":103,"line":16664},[101,55269,55223],{"class":111},[101,55271,10],{"class":51289},[101,55273,55274],{"class":111},">对人类来说会不会太超前了?\u003C\u002F",[101,55276,10],{"class":51289},[101,55278,51296],{"class":111},[101,55280,55281,55283,55285],{"class":103,"line":16684},[101,55282,55223],{"class":111},[101,55284,1118],{"class":51289},[101,55286,51296],{"class":111},[101,55288,55289,55292,55294,55296,55298,55301,55304,55306],{"class":103,"line":16690},[101,55290,55291],{"class":111},"        \u003C",[101,55293,58],{"class":51289},[101,55295,53475],{"class":1950},[101,55297,157],{"class":111},[101,55299,55300],{"class":216},"\"activate\"",[101,55302,55303],{"class":111},">\u003C\u002F",[101,55305,58],{"class":51289},[101,55307,51296],{"class":111},[101,55309,55310,55312,55314,55316,55318],{"class":103,"line":16701},[101,55311,55291],{"class":111},[101,55313,58],{"class":51289},[101,55315,55303],{"class":111},[101,55317,58],{"class":51289},[101,55319,51296],{"class":111},[101,55321,55322,55324,55326,55328,55330],{"class":103,"line":16724},[101,55323,55291],{"class":111},[101,55325,58],{"class":51289},[101,55327,55303],{"class":111},[101,55329,58],{"class":51289},[101,55331,51296],{"class":111},[101,55333,55334,55336,55338,55340,55342],{"class":103,"line":16746},[101,55335,55291],{"class":111},[101,55337,58],{"class":51289},[101,55339,55303],{"class":111},[101,55341,58],{"class":51289},[101,55343,51296],{"class":111},[101,55345,55346,55348,55350,55352,55354],{"class":103,"line":16751},[101,55347,55291],{"class":111},[101,55349,58],{"class":51289},[101,55351,55303],{"class":111},[101,55353,58],{"class":51289},[101,55355,51296],{"class":111},[101,55357,55358,55360,55362,55364,55366],{"class":103,"line":16757},[101,55359,55291],{"class":111},[101,55361,58],{"class":51289},[101,55363,55303],{"class":111},[101,55365,58],{"class":51289},[101,55367,51296],{"class":111},[101,55369,55370,55372,55374,55376,55378],{"class":103,"line":16771},[101,55371,55291],{"class":111},[101,55373,58],{"class":51289},[101,55375,55303],{"class":111},[101,55377,58],{"class":51289},[101,55379,51296],{"class":111},[101,55381,55382,55384,55386,55388,55390],{"class":103,"line":16784},[101,55383,55291],{"class":111},[101,55385,58],{"class":51289},[101,55387,55303],{"class":111},[101,55389,58],{"class":51289},[101,55391,51296],{"class":111},[101,55393,55394,55397,55399],{"class":103,"line":16789},[101,55395,55396],{"class":111},"      \u003C\u002F",[101,55398,1118],{"class":51289},[101,55400,51296],{"class":111},[101,55402,55403,55405,55407],{"class":103,"line":16803},[101,55404,51765],{"class":111},[101,55406,51600],{"class":51289},[101,55408,51296],{"class":111},[101,55410,55411,55413,55415],{"class":103,"line":16808},[101,55412,52406],{"class":111},[101,55414,51600],{"class":51289},[101,55416,51296],{"class":111},[101,55418,55419,55421,55423],{"class":103,"line":16814},[101,55420,52133],{"class":111},[101,55422,51802],{"class":51289},[101,55424,51296],{"class":111},[101,55426,55427,55429,55432,55434],{"class":103,"line":16819},[101,55428,11209],{"class":107},[101,55430,55431],{"class":160}," arrImage",[101,55433,13552],{"class":107},[101,55435,55436],{"class":111}," [\n",[101,55438,55439,55442,55445,55448,55451,55454,55457],{"class":103,"line":16833},[101,55440,55441],{"class":111},"      { url: ",[101,55443,55444],{"class":216},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[101,55446,55447],{"class":111},", title: ",[101,55449,55450],{"class":216},"'对人类来说会不会太超前了?'",[101,55452,55453],{"class":111},", color: ",[101,55455,55456],{"class":216},"'rgba(100,67,68)'",[101,55458,55459],{"class":111}," },\n",[101,55461,55462,55464,55467,55469,55472,55474,55477],{"class":103,"line":16838},[101,55463,55441],{"class":111},[101,55465,55466],{"class":216},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[101,55468,55447],{"class":111},[101,55470,55471],{"class":216},"'开启剑与雪的黑暗传说!'",[101,55473,55453],{"class":111},[101,55475,55476],{"class":216},"'rgba(43,35,26)'",[101,55478,55459],{"class":111},[101,55480,55481,55483,55486,55488,55491,55493,55496],{"class":103,"line":16843},[101,55482,55441],{"class":111},[101,55484,55485],{"class":216},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[101,55487,55447],{"class":111},[101,55489,55490],{"class":216},"'真正的jo厨出现了!'",[101,55492,55453],{"class":111},[101,55494,55495],{"class":216},"'rgba(36,31,33)'",[101,55497,55459],{"class":111},[101,55499,55500,55502,55505,55507,55510,55512,55515],{"class":103,"line":16857},[101,55501,55441],{"class":111},[101,55503,55504],{"class":216},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[101,55506,55447],{"class":111},[101,55508,55509],{"class":216},"'李玉刚:让世界通过b站看到东方大国文化'",[101,55511,55453],{"class":111},[101,55513,55514],{"class":216},"'rgba(139,98,66)'",[101,55516,55459],{"class":111},[101,55518,55519,55521,55524,55526,55529,55531,55534],{"class":103,"line":16869},[101,55520,55441],{"class":111},[101,55522,55523],{"class":216},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[101,55525,55447],{"class":111},[101,55527,55528],{"class":216},"'快来分享你的寒假日常吧'",[101,55530,55453],{"class":111},[101,55532,55533],{"class":216},"'rgba(67,90,92)'",[101,55535,55459],{"class":111},[101,55537,55538,55540,55543,55545,55548,55550,55553],{"class":103,"line":16874},[101,55539,55441],{"class":111},[101,55541,55542],{"class":216},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[101,55544,55447],{"class":111},[101,55546,55547],{"class":216},"'哔哩哔哩小年YEAR'",[101,55549,55453],{"class":111},[101,55551,55552],{"class":216},"'rgba(166,131,143)'",[101,55554,55459],{"class":111},[101,55556,55557,55559,55562,55564,55567,55569,55572],{"class":103,"line":16887},[101,55558,55441],{"class":111},[101,55560,55561],{"class":216},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[101,55563,55447],{"class":111},[101,55565,55566],{"class":216},"'一站式解决你的电脑配置问题'",[101,55568,55453],{"class":111},[101,55570,55571],{"class":216},"'rgba(53,29,25)'",[101,55573,55459],{"class":111},[101,55575,55576,55578,55581,55583,55586,55588,55591],{"class":103,"line":16892},[101,55577,55441],{"class":111},[101,55579,55580],{"class":216},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[101,55582,55447],{"class":111},[101,55584,55585],{"class":216},"'谁不想和小猫咪贴贴呢?'",[101,55587,55453],{"class":111},[101,55589,55590],{"class":216},"'rgba(99,72,114)'",[101,55592,55593],{"class":111}," }\n",[101,55595,55596],{"class":103,"line":16897},[101,55597,53098],{"class":111},[101,55599,55600,55602,55605,55607,55609,55611,55613,55616],{"class":103,"line":16902},[101,55601,11209],{"class":107},[101,55603,55604],{"class":160}," img",[101,55606,13552],{"class":107},[101,55608,54385],{"class":111},[101,55610,54388],{"class":1950},[101,55612,112],{"class":111},[101,55614,55615],{"class":216},"'.slider-wrapper img'",[101,55617,118],{"class":111},[101,55619,55620,55622,55624,55626,55628,55630,55632,55635],{"class":103,"line":16915},[101,55621,11209],{"class":107},[101,55623,6813],{"class":160},[101,55625,13552],{"class":107},[101,55627,54385],{"class":111},[101,55629,54388],{"class":1950},[101,55631,112],{"class":111},[101,55633,55634],{"class":216},"'.slider-footer p'",[101,55636,118],{"class":111},[101,55638,55639,55641,55644,55646,55648,55650,55652,55655],{"class":103,"line":16920},[101,55640,11209],{"class":107},[101,55642,55643],{"class":160}," color",[101,55645,13552],{"class":107},[101,55647,54385],{"class":111},[101,55649,54388],{"class":1950},[101,55651,112],{"class":111},[101,55653,55654],{"class":216},"'.slider-footer'",[101,55656,118],{"class":111},[101,55658,55659,55661,55664,55666,55668,55671,55673,55676],{"class":103,"line":32622},[101,55660,11209],{"class":107},[101,55662,55663],{"class":160}," lis",[101,55665,13552],{"class":107},[101,55667,54385],{"class":111},[101,55669,55670],{"class":1950},"querySelectorAll",[101,55672,112],{"class":111},[101,55674,55675],{"class":216},"'.slider-footer ul li'",[101,55677,118],{"class":111},[101,55679,55680,55682,55684,55686],{"class":103,"line":32628},[101,55681,52208],{"class":107},[101,55683,9426],{"class":111},[101,55685,157],{"class":107},[101,55687,55688],{"class":160}," 1\n",[101,55690,55691,55693,55696,55698,55700,55702,55704],{"class":103,"line":32634},[101,55692,52208],{"class":107},[101,55694,55695],{"class":111}," timer ",[101,55697,157],{"class":107},[101,55699,54433],{"class":1950},[101,55701,112],{"class":111},[101,55703,54438],{"class":107},[101,55705,54441],{"class":111},[101,55707,55708,55711,55713],{"class":103,"line":32640},[101,55709,55710],{"class":111},"      img.src ",[101,55712,157],{"class":107},[101,55714,55715],{"class":111}," arrImage[i].url\n",[101,55717,55718,55721,55723],{"class":103,"line":32646},[101,55719,55720],{"class":111},"      p.innerHTML ",[101,55722,157],{"class":107},[101,55724,55725],{"class":111}," arrImage[i].title\n",[101,55727,55728,55731,55733],{"class":103,"line":32657},[101,55729,55730],{"class":111},"      color.style.backgroundColor ",[101,55732,157],{"class":107},[101,55734,55735],{"class":111}," arrImage[i].color\n",[101,55737,55738],{"class":103,"line":32663},[101,55739,55740],{"class":170},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[101,55742,55743],{"class":103,"line":32683},[101,55744,55745],{"class":170},"      \u002F\u002F li.classList.add('activate')\n",[101,55747,55748],{"class":103,"line":32689},[101,55749,55750],{"class":170},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[101,55752,55753],{"class":103,"line":32700},[101,55754,55755],{"class":170},"      \u002F\u002F lis[i].classList.remove('activate')\n",[101,55757,55758,55761,55763,55765,55768,55771,55774,55776,55779],{"class":103,"line":32706},[101,55759,55760],{"class":111},"      document.",[101,55762,54388],{"class":1950},[101,55764,112],{"class":111},[101,55766,55767],{"class":216},"'.activate'",[101,55769,55770],{"class":111},")?.classList.",[101,55772,55773],{"class":1950},"toggle",[101,55775,112],{"class":111},[101,55777,55778],{"class":216},"'activate'",[101,55780,118],{"class":111},[101,55782,55783,55786,55788,55790,55792],{"class":103,"line":32712},[101,55784,55785],{"class":111},"      lis[i].classList.",[101,55787,5322],{"class":1950},[101,55789,112],{"class":111},[101,55791,55778],{"class":216},[101,55793,118],{"class":111},[101,55795,55796],{"class":103,"line":32718},[101,55797,2387],{"emptyLinePlaceholder":27},[101,55799,55800,55803,55805,55807,55809,55811,55813,55815,55818],{"class":103,"line":32724},[101,55801,55802],{"class":111},"      i ",[101,55804,157],{"class":107},[101,55806,54472],{"class":111},[101,55808,592],{"class":107},[101,55810,25107],{"class":160},[101,55812,13702],{"class":111},[101,55814,439],{"class":107},[101,55816,55817],{"class":111}," arrImage.",[101,55819,55820],{"class":160},"length\n",[101,55822,55823],{"class":103,"line":32730},[101,55824,2387],{"emptyLinePlaceholder":27},[101,55826,55827,55829,55831],{"class":103,"line":32736},[101,55828,54524],{"class":111},[101,55830,6398],{"class":160},[101,55832,118],{"class":111},[101,55834,55835,55837,55839],{"class":103,"line":32742},[101,55836,52406],{"class":111},[101,55838,51802],{"class":51289},[101,55840,51296],{"class":111},[101,55842,55843,55845,55847],{"class":103,"line":32762},[101,55844,51774],{"class":111},[101,55846,51789],{"class":51289},[101,55848,51296],{"class":111},[101,55850,55851],{"class":103,"line":32768},[101,55852,2387],{"emptyLinePlaceholder":27},[101,55854,55855,55857,55859],{"class":103,"line":32784},[101,55856,51774],{"class":111},[101,55858,50624],{"class":51289},[101,55860,51296],{"class":111},[10,55862,55863],{},[1449,55864],{"alt":20,"src":55865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[10,55867,55868],{},"?.就是短路保护,确保输出正常进行",[10,55870,55871],{},"不要忘记取余%,有时候可以用",[10,55873,55874],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[55,55876,55877],{"start":21},[58,55878,55879],{},"法2",[92,55881,55883],{"className":50622,"code":55882,"language":50624,"meta":20,"style":20},"\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",[98,55884,55885,55895,55909,55913,55921,55935,55955,55967,55975,55981,55991,56001,56005,56009,56015,56025,56029,56033,56039,56049,56061,56073,56087,56091,56095,56101,56111,56121,56131,56143,56155,56165,56169,56173,56181,56191,56203,56215,56227,56231,56235,56241,56251,56263,56275,56285,56295,56305,56317,56329,56333,56337,56345,56357,56369,56395,56407,56411,56415,56421,56431,56435,56443,56451,56455,56463,56477,56491,56511,56519,56533,56545,56553,56571,56583,56595,56607,56619,56631,56643,56655,56663,56671,56679,56687,56698,56714,56730,56746,56762,56778,56794,56810,56826,56830,56835,56853,56871,56881,56886,56891,56902,56908,56923,56932,56936,56941,56950,56955,56964,56969,56974,56979,57002,57032,57036,57044,57048,57056,57064,57068],{"__ignoreMap":20},[101,55886,55887,55889,55891,55893],{"class":103,"line":104},[101,55888,51286],{"class":111},[101,55890,51290],{"class":51289},[101,55892,51293],{"class":1950},[101,55894,51296],{"class":111},[101,55896,55897,55899,55901,55903,55905,55907],{"class":103,"line":21},[101,55898,1021],{"class":111},[101,55900,50624],{"class":51289},[101,55902,51305],{"class":1950},[101,55904,157],{"class":111},[101,55906,51310],{"class":216},[101,55908,51296],{"class":111},[101,55910,55911],{"class":103,"line":1166},[101,55912,2387],{"emptyLinePlaceholder":27},[101,55914,55915,55917,55919],{"class":103,"line":1181},[101,55916,1021],{"class":111},[101,55918,51323],{"class":51289},[101,55920,51296],{"class":111},[101,55922,55923,55925,55927,55929,55931,55933],{"class":103,"line":1187},[101,55924,52133],{"class":111},[101,55926,51333],{"class":51289},[101,55928,51336],{"class":1950},[101,55930,157],{"class":111},[101,55932,51341],{"class":216},[101,55934,51296],{"class":111},[101,55936,55937,55939,55941,55943,55945,55947,55949,55951,55953],{"class":103,"line":1201},[101,55938,52133],{"class":111},[101,55940,51333],{"class":51289},[101,55942,14908],{"class":1950},[101,55944,157],{"class":111},[101,55946,51380],{"class":216},[101,55948,51360],{"class":1950},[101,55950,157],{"class":111},[101,55952,51387],{"class":216},[101,55954,51296],{"class":111},[101,55956,55957,55959,55961,55963,55965],{"class":103,"line":1207},[101,55958,52133],{"class":111},[101,55960,51396],{"class":51289},[101,55962,51399],{"class":111},[101,55964,51396],{"class":51289},[101,55966,51296],{"class":111},[101,55968,55969,55971,55973],{"class":103,"line":1298},[101,55970,52133],{"class":111},[101,55972,5114],{"class":51289},[101,55974,51296],{"class":111},[101,55976,55977,55979],{"class":103,"line":1304},[101,55978,6391],{"class":51289},[101,55980,15560],{"class":111},[101,55982,55983,55985,55987,55989],{"class":103,"line":1316},[101,55984,54684],{"class":160},[101,55986,51426],{"class":111},[101,55988,303],{"class":160},[101,55990,1277],{"class":111},[101,55992,55993,55995,55997,55999],{"class":103,"line":1599},[101,55994,54695],{"class":160},[101,55996,51426],{"class":111},[101,55998,303],{"class":160},[101,56000,1277],{"class":111},[101,56002,56003],{"class":103,"line":1604},[101,56004,2174],{"class":111},[101,56006,56007],{"class":103,"line":1610},[101,56008,2387],{"emptyLinePlaceholder":27},[101,56010,56011,56013],{"class":103,"line":1615},[101,56012,54714],{"class":51289},[101,56014,15560],{"class":111},[101,56016,56017,56019,56021,56023],{"class":103,"line":1629},[101,56018,54721],{"class":160},[101,56020,51426],{"class":111},[101,56022,54726],{"class":160},[101,56024,1277],{"class":111},[101,56026,56027],{"class":103,"line":1634},[101,56028,2174],{"class":111},[101,56030,56031],{"class":103,"line":1640},[101,56032,2387],{"emptyLinePlaceholder":27},[101,56034,56035,56037],{"class":103,"line":1661},[101,56036,54741],{"class":1950},[101,56038,15560],{"class":111},[101,56040,56041,56043,56045,56047],{"class":103,"line":1666},[101,56042,54748],{"class":160},[101,56044,51426],{"class":111},[101,56046,54753],{"class":160},[101,56048,1277],{"class":111},[101,56050,56051,56053,56055,56057,56059],{"class":103,"line":1680},[101,56052,54760],{"class":160},[101,56054,51426],{"class":111},[101,56056,54765],{"class":160},[101,56058,51481],{"class":107},[101,56060,1277],{"class":111},[101,56062,56063,56065,56067,56069,56071],{"class":103,"line":1685},[101,56064,54774],{"class":160},[101,56066,51426],{"class":111},[101,56068,1526],{"class":160},[101,56070,51481],{"class":107},[101,56072,1277],{"class":111},[101,56074,56075,56077,56079,56081,56083,56085],{"class":103,"line":1714},[101,56076,54695],{"class":160},[101,56078,51426],{"class":111},[101,56080,422],{"class":160},[101,56082,51481],{"class":107},[101,56084,51545],{"class":160},[101,56086,1277],{"class":111},[101,56088,56089],{"class":103,"line":1719},[101,56090,2174],{"class":111},[101,56092,56093],{"class":103,"line":1736},[101,56094,2387],{"emptyLinePlaceholder":27},[101,56096,56097,56099],{"class":103,"line":1741},[101,56098,54809],{"class":1950},[101,56100,15560],{"class":111},[101,56102,56103,56105,56107,56109],{"class":103,"line":1746},[101,56104,54748],{"class":160},[101,56106,51426],{"class":111},[101,56108,54820],{"class":160},[101,56110,1277],{"class":111},[101,56112,56113,56115,56117,56119],{"class":103,"line":1751},[101,56114,54827],{"class":160},[101,56116,51426],{"class":111},[101,56118,303],{"class":160},[101,56120,1277],{"class":111},[101,56122,56123,56125,56127,56129],{"class":103,"line":1765},[101,56124,54838],{"class":160},[101,56126,51426],{"class":111},[101,56128,303],{"class":160},[101,56130,1277],{"class":111},[101,56132,56133,56135,56137,56139,56141],{"class":103,"line":1770},[101,56134,54760],{"class":160},[101,56136,51426],{"class":111},[101,56138,422],{"class":160},[101,56140,439],{"class":107},[101,56142,1277],{"class":111},[101,56144,56145,56147,56149,56151,56153],{"class":103,"line":2564},[101,56146,54774],{"class":160},[101,56148,51426],{"class":111},[101,56150,686],{"class":160},[101,56152,439],{"class":107},[101,56154,1277],{"class":111},[101,56156,56157,56159,56161,56163],{"class":103,"line":2578},[101,56158,54873],{"class":160},[101,56160,51426],{"class":111},[101,56162,54878],{"class":160},[101,56164,1277],{"class":111},[101,56166,56167],{"class":103,"line":2586},[101,56168,2174],{"class":111},[101,56170,56171],{"class":103,"line":2591},[101,56172,2387],{"emptyLinePlaceholder":27},[101,56174,56175,56177,56179],{"class":103,"line":2597},[101,56176,54809],{"class":1950},[101,56178,6813],{"class":51289},[101,56180,15560],{"class":111},[101,56182,56183,56185,56187,56189],{"class":103,"line":2603},[101,56184,54748],{"class":160},[101,56186,51426],{"class":111},[101,56188,54820],{"class":160},[101,56190,1277],{"class":111},[101,56192,56193,56195,56197,56199,56201],{"class":103,"line":2608},[101,56194,54911],{"class":160},[101,56196,51426],{"class":111},[101,56198,1012],{"class":160},[101,56200,51481],{"class":107},[101,56202,1277],{"class":111},[101,56204,56205,56207,56209,56211,56213],{"class":103,"line":7936},[101,56206,54827],{"class":160},[101,56208,51426],{"class":111},[101,56210,811],{"class":160},[101,56212,51481],{"class":107},[101,56214,1277],{"class":111},[101,56216,56217,56219,56221,56223,56225],{"class":103,"line":7960},[101,56218,54936],{"class":160},[101,56220,51426],{"class":111},[101,56222,430],{"class":160},[101,56224,51481],{"class":107},[101,56226,1277],{"class":111},[101,56228,56229],{"class":103,"line":7965},[101,56230,2174],{"class":111},[101,56232,56233],{"class":103,"line":7971},[101,56234,2387],{"emptyLinePlaceholder":27},[101,56236,56237,56239],{"class":103,"line":7998},[101,56238,54957],{"class":51289},[101,56240,15560],{"class":111},[101,56242,56243,56245,56247,56249],{"class":103,"line":8003},[101,56244,54748],{"class":160},[101,56246,51426],{"class":111},[101,56248,54820],{"class":160},[101,56250,1277],{"class":111},[101,56252,56253,56255,56257,56259,56261],{"class":103,"line":8009},[101,56254,54936],{"class":160},[101,56256,51426],{"class":111},[101,56258,892],{"class":160},[101,56260,51481],{"class":107},[101,56262,1277],{"class":111},[101,56264,56265,56267,56269,56271,56273],{"class":103,"line":8021},[101,56266,54827],{"class":160},[101,56268,51426],{"class":111},[101,56270,811],{"class":160},[101,56272,51481],{"class":107},[101,56274,1277],{"class":111},[101,56276,56277,56279,56281,56283],{"class":103,"line":8033},[101,56278,54998],{"class":160},[101,56280,51426],{"class":111},[101,56282,51466],{"class":160},[101,56284,1277],{"class":111},[101,56286,56287,56289,56291,56293],{"class":103,"line":8045},[101,56288,55009],{"class":160},[101,56290,51426],{"class":111},[101,56292,51657],{"class":160},[101,56294,1277],{"class":111},[101,56296,56297,56299,56301,56303],{"class":103,"line":9704},[101,56298,54748],{"class":160},[101,56300,51426],{"class":111},[101,56302,54820],{"class":160},[101,56304,1277],{"class":111},[101,56306,56307,56309,56311,56313,56315],{"class":103,"line":9729},[101,56308,54760],{"class":160},[101,56310,51426],{"class":111},[101,56312,3979],{"class":160},[101,56314,51481],{"class":107},[101,56316,1277],{"class":111},[101,56318,56319,56321,56323,56325,56327],{"class":103,"line":9752},[101,56320,54774],{"class":160},[101,56322,51426],{"class":111},[101,56324,811],{"class":160},[101,56326,51481],{"class":107},[101,56328,1277],{"class":111},[101,56330,56331],{"class":103,"line":9776},[101,56332,2174],{"class":111},[101,56334,56335],{"class":103,"line":9781},[101,56336,2387],{"emptyLinePlaceholder":27},[101,56338,56339,56341,56343],{"class":103,"line":9786},[101,56340,54957],{"class":51289},[101,56342,55064],{"class":51289},[101,56344,15560],{"class":111},[101,56346,56347,56349,56351,56353,56355],{"class":103,"line":9791},[101,56348,54760],{"class":160},[101,56350,51426],{"class":111},[101,56352,811],{"class":160},[101,56354,51481],{"class":107},[101,56356,1277],{"class":111},[101,56358,56359,56361,56363,56365,56367],{"class":103,"line":9800},[101,56360,54774],{"class":160},[101,56362,51426],{"class":111},[101,56364,811],{"class":160},[101,56366,51481],{"class":107},[101,56368,1277],{"class":111},[101,56370,56371,56373,56375,56377,56379,56381,56383,56385,56387,56389,56391,56393],{"class":103,"line":9805},[101,56372,54873],{"class":160},[101,56374,51426],{"class":111},[101,56376,55099],{"class":160},[101,56378,112],{"class":111},[101,56380,303],{"class":160},[101,56382,12423],{"class":111},[101,56384,303],{"class":160},[101,56386,12423],{"class":111},[101,56388,303],{"class":160},[101,56390,12423],{"class":111},[101,56392,55116],{"class":160},[101,56394,2706],{"class":111},[101,56396,56397,56399,56401,56403,56405],{"class":103,"line":9811},[101,56398,55123],{"class":160},[101,56400,51426],{"class":111},[101,56402,557],{"class":160},[101,56404,51481],{"class":107},[101,56406,1277],{"class":111},[101,56408,56409],{"class":103,"line":9832},[101,56410,2174],{"class":111},[101,56412,56413],{"class":103,"line":9838},[101,56414,2387],{"emptyLinePlaceholder":27},[101,56416,56417,56419],{"class":103,"line":9852},[101,56418,55144],{"class":1950},[101,56420,15560],{"class":111},[101,56422,56423,56425,56427,56429],{"class":103,"line":9858},[101,56424,54873],{"class":160},[101,56426,51426],{"class":111},[101,56428,55155],{"class":160},[101,56430,1277],{"class":111},[101,56432,56433],{"class":103,"line":9885},[101,56434,2174],{"class":111},[101,56436,56437,56439,56441],{"class":103,"line":9894},[101,56438,52406],{"class":111},[101,56440,5114],{"class":51289},[101,56442,51296],{"class":111},[101,56444,56445,56447,56449],{"class":103,"line":9900},[101,56446,51774],{"class":111},[101,56448,51323],{"class":51289},[101,56450,51296],{"class":111},[101,56452,56453],{"class":103,"line":9908},[101,56454,2387],{"emptyLinePlaceholder":27},[101,56456,56457,56459,56461],{"class":103,"line":9913},[101,56458,1021],{"class":111},[101,56460,51789],{"class":51289},[101,56462,51296],{"class":111},[101,56464,56465,56467,56469,56471,56473,56475],{"class":103,"line":16592},[101,56466,52133],{"class":111},[101,56468,51600],{"class":51289},[101,56470,53475],{"class":1950},[101,56472,157],{"class":111},[101,56474,53480],{"class":216},[101,56476,51296],{"class":111},[101,56478,56479,56481,56483,56485,56487,56489],{"class":103,"line":16598},[101,56480,51330],{"class":111},[101,56482,51600],{"class":51289},[101,56484,53475],{"class":1950},[101,56486,157],{"class":111},[101,56488,55216],{"class":216},[101,56490,51296],{"class":111},[101,56492,56493,56495,56497,56499,56501,56503,56505,56507,56509],{"class":103,"line":16621},[101,56494,55223],{"class":111},[101,56496,1449],{"class":51289},[101,56498,55228],{"class":1950},[101,56500,157],{"class":111},[101,56502,55233],{"class":216},[101,56504,55236],{"class":1950},[101,56506,157],{"class":111},[101,56508,7640],{"class":216},[101,56510,51296],{"class":111},[101,56512,56513,56515,56517],{"class":103,"line":16627},[101,56514,51765],{"class":111},[101,56516,51600],{"class":51289},[101,56518,51296],{"class":111},[101,56520,56521,56523,56525,56527,56529,56531],{"class":103,"line":16650},[101,56522,51330],{"class":111},[101,56524,51600],{"class":51289},[101,56526,53475],{"class":1950},[101,56528,157],{"class":111},[101,56530,55263],{"class":216},[101,56532,51296],{"class":111},[101,56534,56535,56537,56539,56541,56543],{"class":103,"line":16664},[101,56536,55223],{"class":111},[101,56538,10],{"class":51289},[101,56540,55274],{"class":111},[101,56542,10],{"class":51289},[101,56544,51296],{"class":111},[101,56546,56547,56549,56551],{"class":103,"line":16684},[101,56548,55223],{"class":111},[101,56550,1118],{"class":51289},[101,56552,51296],{"class":111},[101,56554,56555,56557,56559,56561,56563,56565,56567,56569],{"class":103,"line":16690},[101,56556,55291],{"class":111},[101,56558,58],{"class":51289},[101,56560,53475],{"class":1950},[101,56562,157],{"class":111},[101,56564,55300],{"class":216},[101,56566,55303],{"class":111},[101,56568,58],{"class":51289},[101,56570,51296],{"class":111},[101,56572,56573,56575,56577,56579,56581],{"class":103,"line":16701},[101,56574,55291],{"class":111},[101,56576,58],{"class":51289},[101,56578,55303],{"class":111},[101,56580,58],{"class":51289},[101,56582,51296],{"class":111},[101,56584,56585,56587,56589,56591,56593],{"class":103,"line":16724},[101,56586,55291],{"class":111},[101,56588,58],{"class":51289},[101,56590,55303],{"class":111},[101,56592,58],{"class":51289},[101,56594,51296],{"class":111},[101,56596,56597,56599,56601,56603,56605],{"class":103,"line":16746},[101,56598,55291],{"class":111},[101,56600,58],{"class":51289},[101,56602,55303],{"class":111},[101,56604,58],{"class":51289},[101,56606,51296],{"class":111},[101,56608,56609,56611,56613,56615,56617],{"class":103,"line":16751},[101,56610,55291],{"class":111},[101,56612,58],{"class":51289},[101,56614,55303],{"class":111},[101,56616,58],{"class":51289},[101,56618,51296],{"class":111},[101,56620,56621,56623,56625,56627,56629],{"class":103,"line":16757},[101,56622,55291],{"class":111},[101,56624,58],{"class":51289},[101,56626,55303],{"class":111},[101,56628,58],{"class":51289},[101,56630,51296],{"class":111},[101,56632,56633,56635,56637,56639,56641],{"class":103,"line":16771},[101,56634,55291],{"class":111},[101,56636,58],{"class":51289},[101,56638,55303],{"class":111},[101,56640,58],{"class":51289},[101,56642,51296],{"class":111},[101,56644,56645,56647,56649,56651,56653],{"class":103,"line":16784},[101,56646,55291],{"class":111},[101,56648,58],{"class":51289},[101,56650,55303],{"class":111},[101,56652,58],{"class":51289},[101,56654,51296],{"class":111},[101,56656,56657,56659,56661],{"class":103,"line":16789},[101,56658,55396],{"class":111},[101,56660,1118],{"class":51289},[101,56662,51296],{"class":111},[101,56664,56665,56667,56669],{"class":103,"line":16803},[101,56666,51765],{"class":111},[101,56668,51600],{"class":51289},[101,56670,51296],{"class":111},[101,56672,56673,56675,56677],{"class":103,"line":16808},[101,56674,52406],{"class":111},[101,56676,51600],{"class":51289},[101,56678,51296],{"class":111},[101,56680,56681,56683,56685],{"class":103,"line":16814},[101,56682,52133],{"class":111},[101,56684,51802],{"class":51289},[101,56686,51296],{"class":111},[101,56688,56689,56691,56694,56696],{"class":103,"line":16819},[101,56690,11209],{"class":107},[101,56692,56693],{"class":160}," sliderData",[101,56695,13552],{"class":107},[101,56697,55436],{"class":111},[101,56699,56700,56702,56704,56706,56708,56710,56712],{"class":103,"line":16833},[101,56701,55441],{"class":111},[101,56703,55444],{"class":216},[101,56705,55447],{"class":111},[101,56707,55450],{"class":216},[101,56709,55453],{"class":111},[101,56711,55456],{"class":216},[101,56713,55459],{"class":111},[101,56715,56716,56718,56720,56722,56724,56726,56728],{"class":103,"line":16838},[101,56717,55441],{"class":111},[101,56719,55466],{"class":216},[101,56721,55447],{"class":111},[101,56723,55471],{"class":216},[101,56725,55453],{"class":111},[101,56727,55476],{"class":216},[101,56729,55459],{"class":111},[101,56731,56732,56734,56736,56738,56740,56742,56744],{"class":103,"line":16843},[101,56733,55441],{"class":111},[101,56735,55485],{"class":216},[101,56737,55447],{"class":111},[101,56739,55490],{"class":216},[101,56741,55453],{"class":111},[101,56743,55495],{"class":216},[101,56745,55459],{"class":111},[101,56747,56748,56750,56752,56754,56756,56758,56760],{"class":103,"line":16857},[101,56749,55441],{"class":111},[101,56751,55504],{"class":216},[101,56753,55447],{"class":111},[101,56755,55509],{"class":216},[101,56757,55453],{"class":111},[101,56759,55514],{"class":216},[101,56761,55459],{"class":111},[101,56763,56764,56766,56768,56770,56772,56774,56776],{"class":103,"line":16869},[101,56765,55441],{"class":111},[101,56767,55523],{"class":216},[101,56769,55447],{"class":111},[101,56771,55528],{"class":216},[101,56773,55453],{"class":111},[101,56775,55533],{"class":216},[101,56777,55459],{"class":111},[101,56779,56780,56782,56784,56786,56788,56790,56792],{"class":103,"line":16874},[101,56781,55441],{"class":111},[101,56783,55542],{"class":216},[101,56785,55447],{"class":111},[101,56787,55547],{"class":216},[101,56789,55453],{"class":111},[101,56791,55552],{"class":216},[101,56793,55459],{"class":111},[101,56795,56796,56798,56800,56802,56804,56806,56808],{"class":103,"line":16887},[101,56797,55441],{"class":111},[101,56799,55561],{"class":216},[101,56801,55447],{"class":111},[101,56803,55566],{"class":216},[101,56805,55453],{"class":111},[101,56807,55571],{"class":216},[101,56809,55459],{"class":111},[101,56811,56812,56814,56816,56818,56820,56822,56824],{"class":103,"line":16892},[101,56813,55441],{"class":111},[101,56815,55580],{"class":216},[101,56817,55447],{"class":111},[101,56819,55585],{"class":216},[101,56821,55453],{"class":111},[101,56823,55590],{"class":216},[101,56825,55593],{"class":111},[101,56827,56828],{"class":103,"line":16897},[101,56829,53098],{"class":111},[101,56831,56832],{"class":103,"line":16902},[101,56833,56834],{"class":170},"    \u002F\u002F 1.获取元素\n",[101,56836,56837,56839,56841,56843,56845,56847,56849,56851],{"class":103,"line":16915},[101,56838,11209],{"class":107},[101,56840,55604],{"class":160},[101,56842,13552],{"class":107},[101,56844,54385],{"class":111},[101,56846,54388],{"class":1950},[101,56848,112],{"class":111},[101,56850,55615],{"class":216},[101,56852,118],{"class":111},[101,56854,56855,56857,56859,56861,56863,56865,56867,56869],{"class":103,"line":16920},[101,56856,11209],{"class":107},[101,56858,6813],{"class":160},[101,56860,13552],{"class":107},[101,56862,54385],{"class":111},[101,56864,54388],{"class":1950},[101,56866,112],{"class":111},[101,56868,55634],{"class":216},[101,56870,118],{"class":111},[101,56872,56873,56875,56877,56879],{"class":103,"line":32622},[101,56874,52208],{"class":107},[101,56876,9426],{"class":111},[101,56878,157],{"class":107},[101,56880,47322],{"class":160},[101,56882,56883],{"class":103,"line":32628},[101,56884,56885],{"class":170},"    \u002F\u002F 2.开启定时器\n",[101,56887,56888],{"class":103,"line":32634},[101,56889,56890],{"class":170},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[101,56892,56893,56896,56898,56900],{"class":103,"line":32640},[101,56894,56895],{"class":1950},"    setInterval",[101,56897,112],{"class":111},[101,56899,54438],{"class":107},[101,56901,54441],{"class":111},[101,56903,56904,56906],{"class":103,"line":32646},[101,56905,54446],{"class":111},[101,56907,2689],{"class":107},[101,56909,56910,56912,56914,56916,56919,56921],{"class":103,"line":32657},[101,56911,54469],{"class":107},[101,56913,54472],{"class":111},[101,56915,1697],{"class":107},[101,56917,56918],{"class":111}," sliderData.",[101,56920,51957],{"class":160},[101,56922,12430],{"class":111},[101,56924,56925,56928,56930],{"class":103,"line":32663},[101,56926,56927],{"class":111},"        i ",[101,56929,157],{"class":107},[101,56931,47322],{"class":160},[101,56933,56934],{"class":103,"line":32683},[101,56935,52387],{"class":111},[101,56937,56938],{"class":103,"line":32689},[101,56939,56940],{"class":170},"      \u002F\u002F 更换图片路径\n",[101,56942,56943,56945,56947],{"class":103,"line":32700},[101,56944,55710],{"class":111},[101,56946,157],{"class":107},[101,56948,56949],{"class":111}," sliderData[i].url\n",[101,56951,56952],{"class":103,"line":32706},[101,56953,56954],{"class":170},"      \u002F\u002F 把文字写到p里面\n",[101,56956,56957,56959,56961],{"class":103,"line":32712},[101,56958,55720],{"class":111},[101,56960,157],{"class":107},[101,56962,56963],{"class":111}," sliderData[i].title\n",[101,56965,56966],{"class":103,"line":32718},[101,56967,56968],{"class":170},"      \u002F\u002F 小圆点\n",[101,56970,56971],{"class":103,"line":32724},[101,56972,56973],{"class":170},"      \u002F\u002F 先删除以前的active\n",[101,56975,56976],{"class":103,"line":32730},[101,56977,56978],{"class":170},"      \u002F\u002F 只让当前li添加active\n",[101,56980,56981,56983,56985,56987,56990,56993,56996,56998,57000],{"class":103,"line":32736},[101,56982,55760],{"class":111},[101,56984,54388],{"class":1950},[101,56986,112],{"class":111},[101,56988,56989],{"class":216},"'.slider-footer .activate'",[101,56991,56992],{"class":111},").classList.",[101,56994,56995],{"class":1950},"remove",[101,56997,112],{"class":111},[101,56999,55778],{"class":216},[101,57001,118],{"class":111},[101,57003,57004,57006,57008,57010,57013,57015,57017,57019,57022,57024,57026,57028,57030],{"class":103,"line":32742},[101,57005,55760],{"class":111},[101,57007,54388],{"class":1950},[101,57009,112],{"class":111},[101,57011,57012],{"class":216},"`.slider-footer ul li:nth-child(${",[101,57014,552],{"class":111},[101,57016,45555],{"class":107},[101,57018,25107],{"class":160},[101,57020,57021],{"class":216},"})`",[101,57023,56992],{"class":111},[101,57025,5322],{"class":1950},[101,57027,112],{"class":111},[101,57029,55778],{"class":216},[101,57031,118],{"class":111},[101,57033,57034],{"class":103,"line":32762},[101,57035,2387],{"emptyLinePlaceholder":27},[101,57037,57038,57040,57042],{"class":103,"line":32768},[101,57039,54524],{"class":111},[101,57041,6398],{"class":160},[101,57043,118],{"class":111},[101,57045,57046],{"class":103,"line":32784},[101,57047,2387],{"emptyLinePlaceholder":27},[101,57049,57050,57052,57054],{"class":103,"line":32790},[101,57051,52406],{"class":111},[101,57053,51802],{"class":51289},[101,57055,51296],{"class":111},[101,57057,57058,57060,57062],{"class":103,"line":32804},[101,57059,51774],{"class":111},[101,57061,51789],{"class":51289},[101,57063,51296],{"class":111},[101,57065,57066],{"class":103,"line":32810},[101,57067,2387],{"emptyLinePlaceholder":27},[101,57069,57070,57072,57074],{"class":103,"line":32825},[101,57071,51774],{"class":111},[101,57073,50624],{"class":51289},[101,57075,51296],{"class":111},[72,57077,57079],{"id":57078},"_317-重要知识点","3.1.7 重要知识点",[10,57081,57082,57083],{},"浏览器在渲染文本时， ",[261,57084,57085],{},"没有空格或换行符就没有“断行点”",[10,57087,57088],{},[1449,57089],{"alt":20,"src":57090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[10,57092,57093],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[10,57095,57096],{},[1449,57097],{"alt":20,"src":57098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[10,57100,57101],{},[1449,57102],{"alt":20,"src":57103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[43,57105,57107],{"id":57106},"_32-dom事件基础","3.2 DOM事件基础",[72,57109,57111],{"id":57110},"_321-事件监听","3.2.1 事件监听",[10,57113,57114],{},[1449,57115],{"alt":20,"src":57116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[10,57118,57119],{},"事件监听有响应的发生",[10,57121,57122],{},[1449,57123],{"alt":20,"src":57124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[10,57126,57127],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[10,57129,57130],{},"对于有名函数,要执行的函数名后边不要加()",[72,57132,57134],{"id":57133},"_322-随机点名案例","3.2.2 随机点名案例",[92,57136,57138],{"className":50622,"code":57137,"language":50624,"meta":20,"style":20},"\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",[98,57139,57140,57150,57164,57168,57176,57190,57210,57222,57230,57236,57246,57256,57260,57264,57271,57282,57286,57290,57296,57308,57322,57332,57344,57357,57361,57365,57372,57376,57389,57401,57413,57417,57421,57425,57432,57442,57446,57450,57459,57471,57483,57498,57502,57510,57518,57522,57530,57543,57557,57570,57590,57598,57613,57633,57653,57661,57665,57673,57678,57714,57734,57739,57758,57763,57774,57779,57790,57795,57814,57829,57834,57860,57870,57879,57884,57900,57905,57910,57915,57930,57934,57938,57943,57962,57979,57987,57992,58007,58011,58015,58023,58031,58035],{"__ignoreMap":20},[101,57141,57142,57144,57146,57148],{"class":103,"line":104},[101,57143,51286],{"class":111},[101,57145,51290],{"class":51289},[101,57147,51293],{"class":1950},[101,57149,51296],{"class":111},[101,57151,57152,57154,57156,57158,57160,57162],{"class":103,"line":21},[101,57153,1021],{"class":111},[101,57155,50624],{"class":51289},[101,57157,51305],{"class":1950},[101,57159,157],{"class":111},[101,57161,51310],{"class":216},[101,57163,51296],{"class":111},[101,57165,57166],{"class":103,"line":1166},[101,57167,2387],{"emptyLinePlaceholder":27},[101,57169,57170,57172,57174],{"class":103,"line":1181},[101,57171,1021],{"class":111},[101,57173,51323],{"class":51289},[101,57175,51296],{"class":111},[101,57177,57178,57180,57182,57184,57186,57188],{"class":103,"line":1187},[101,57179,52133],{"class":111},[101,57181,51333],{"class":51289},[101,57183,51336],{"class":1950},[101,57185,157],{"class":111},[101,57187,51341],{"class":216},[101,57189,51296],{"class":111},[101,57191,57192,57194,57196,57198,57200,57202,57204,57206,57208],{"class":103,"line":1201},[101,57193,52133],{"class":111},[101,57195,51333],{"class":51289},[101,57197,14908],{"class":1950},[101,57199,157],{"class":111},[101,57201,51380],{"class":216},[101,57203,51360],{"class":1950},[101,57205,157],{"class":111},[101,57207,51387],{"class":216},[101,57209,51296],{"class":111},[101,57211,57212,57214,57216,57218,57220],{"class":103,"line":1207},[101,57213,52133],{"class":111},[101,57215,51396],{"class":51289},[101,57217,51399],{"class":111},[101,57219,51396],{"class":51289},[101,57221,51296],{"class":111},[101,57223,57224,57226,57228],{"class":103,"line":1298},[101,57225,52133],{"class":111},[101,57227,5114],{"class":51289},[101,57229,51296],{"class":111},[101,57231,57232,57234],{"class":103,"line":1304},[101,57233,6391],{"class":51289},[101,57235,15560],{"class":111},[101,57237,57238,57240,57242,57244],{"class":103,"line":1316},[101,57239,54695],{"class":160},[101,57241,51426],{"class":111},[101,57243,303],{"class":160},[101,57245,1277],{"class":111},[101,57247,57248,57250,57252,57254],{"class":103,"line":1599},[101,57249,54684],{"class":160},[101,57251,51426],{"class":111},[101,57253,303],{"class":160},[101,57255,1277],{"class":111},[101,57257,57258],{"class":103,"line":1604},[101,57259,2174],{"class":111},[101,57261,57262],{"class":103,"line":1610},[101,57263,2387],{"emptyLinePlaceholder":27},[101,57265,57266,57269],{"class":103,"line":1615},[101,57267,57268],{"class":51289},"    h2",[101,57270,15560],{"class":111},[101,57272,57273,57276,57278,57280],{"class":103,"line":1629},[101,57274,57275],{"class":160},"      text-align",[101,57277,51426],{"class":111},[101,57279,51581],{"class":160},[101,57281,1277],{"class":111},[101,57283,57284],{"class":103,"line":1634},[101,57285,2174],{"class":111},[101,57287,57288],{"class":103,"line":1640},[101,57289,2387],{"emptyLinePlaceholder":27},[101,57291,57292,57294],{"class":103,"line":1661},[101,57293,54741],{"class":1950},[101,57295,15560],{"class":111},[101,57297,57298,57300,57302,57304,57306],{"class":103,"line":1666},[101,57299,54760],{"class":160},[101,57301,51426],{"class":111},[101,57303,1526],{"class":160},[101,57305,51481],{"class":107},[101,57307,1277],{"class":111},[101,57309,57310,57312,57314,57316,57318,57320],{"class":103,"line":1680},[101,57311,54695],{"class":160},[101,57313,51426],{"class":111},[101,57315,767],{"class":160},[101,57317,51481],{"class":107},[101,57319,51545],{"class":160},[101,57321,1277],{"class":111},[101,57323,57324,57326,57328,57330],{"class":103,"line":1685},[101,57325,54998],{"class":160},[101,57327,51426],{"class":111},[101,57329,51466],{"class":160},[101,57331,1277],{"class":111},[101,57333,57334,57336,57338,57340,57342],{"class":103,"line":1714},[101,57335,54911],{"class":160},[101,57337,51426],{"class":111},[101,57339,936],{"class":160},[101,57341,51481],{"class":107},[101,57343,1277],{"class":111},[101,57345,57346,57349,57351,57353,57355],{"class":103,"line":1719},[101,57347,57348],{"class":160},"      line-height",[101,57350,51426],{"class":111},[101,57352,512],{"class":160},[101,57354,51481],{"class":107},[101,57356,1277],{"class":111},[101,57358,57359],{"class":103,"line":1736},[101,57360,2174],{"class":111},[101,57362,57363],{"class":103,"line":1741},[101,57364,2387],{"emptyLinePlaceholder":27},[101,57366,57367,57370],{"class":103,"line":1746},[101,57368,57369],{"class":1950},"    .qs",[101,57371,15560],{"class":111},[101,57373,57374],{"class":103,"line":1751},[101,57375,2387],{"emptyLinePlaceholder":27},[101,57377,57378,57380,57382,57385,57387],{"class":103,"line":1765},[101,57379,54760],{"class":160},[101,57381,51426],{"class":111},[101,57383,57384],{"class":160},"450",[101,57386,51481],{"class":107},[101,57388,1277],{"class":111},[101,57390,57391,57393,57395,57397,57399],{"class":103,"line":1770},[101,57392,54774],{"class":160},[101,57394,51426],{"class":111},[101,57396,512],{"class":160},[101,57398,51481],{"class":107},[101,57400,1277],{"class":111},[101,57402,57403,57406,57408,57411],{"class":103,"line":2564},[101,57404,57405],{"class":160},"      color",[101,57407,51426],{"class":111},[101,57409,57410],{"class":160},"red",[101,57412,1277],{"class":111},[101,57414,57415],{"class":103,"line":2578},[101,57416,2387],{"emptyLinePlaceholder":27},[101,57418,57419],{"class":103,"line":2586},[101,57420,2174],{"class":111},[101,57422,57423],{"class":103,"line":2591},[101,57424,2387],{"emptyLinePlaceholder":27},[101,57426,57427,57430],{"class":103,"line":2597},[101,57428,57429],{"class":1950},"    .btns",[101,57431,15560],{"class":111},[101,57433,57434,57436,57438,57440],{"class":103,"line":2603},[101,57435,57275],{"class":160},[101,57437,51426],{"class":111},[101,57439,51581],{"class":160},[101,57441,1277],{"class":111},[101,57443,57444],{"class":103,"line":2608},[101,57445,2174],{"class":111},[101,57447,57448],{"class":103,"line":7936},[101,57449,2387],{"emptyLinePlaceholder":27},[101,57451,57452,57454,57457],{"class":103,"line":7960},[101,57453,57429],{"class":1950},[101,57455,57456],{"class":51289}," button",[101,57458,15560],{"class":111},[101,57460,57461,57463,57465,57467,57469],{"class":103,"line":7965},[101,57462,54760],{"class":160},[101,57464,51426],{"class":111},[101,57466,928],{"class":160},[101,57468,51481],{"class":107},[101,57470,1277],{"class":111},[101,57472,57473,57475,57477,57479,57481],{"class":103,"line":7971},[101,57474,54774],{"class":160},[101,57476,51426],{"class":111},[101,57478,384],{"class":160},[101,57480,51481],{"class":107},[101,57482,1277],{"class":111},[101,57484,57485,57487,57489,57491,57494,57496],{"class":103,"line":7998},[101,57486,54695],{"class":160},[101,57488,51426],{"class":111},[101,57490,303],{"class":160},[101,57492,57493],{"class":160}," 50",[101,57495,51481],{"class":107},[101,57497,1277],{"class":111},[101,57499,57500],{"class":103,"line":8003},[101,57501,2174],{"class":111},[101,57503,57504,57506,57508],{"class":103,"line":8009},[101,57505,52406],{"class":111},[101,57507,5114],{"class":51289},[101,57509,51296],{"class":111},[101,57511,57512,57514,57516],{"class":103,"line":8021},[101,57513,51774],{"class":111},[101,57515,51323],{"class":51289},[101,57517,51296],{"class":111},[101,57519,57520],{"class":103,"line":8033},[101,57521,2387],{"emptyLinePlaceholder":27},[101,57523,57524,57526,57528],{"class":103,"line":8045},[101,57525,1021],{"class":111},[101,57527,51789],{"class":51289},[101,57529,51296],{"class":111},[101,57531,57532,57534,57536,57539,57541],{"class":103,"line":9704},[101,57533,52133],{"class":111},[101,57535,43],{"class":51289},[101,57537,57538],{"class":111},">随机点名\u003C\u002F",[101,57540,43],{"class":51289},[101,57542,51296],{"class":111},[101,57544,57545,57547,57549,57551,57553,57555],{"class":103,"line":9729},[101,57546,52133],{"class":111},[101,57548,51600],{"class":51289},[101,57550,53475],{"class":1950},[101,57552,157],{"class":111},[101,57554,53480],{"class":216},[101,57556,51296],{"class":111},[101,57558,57559,57561,57563,57566,57568],{"class":103,"line":9752},[101,57560,51330],{"class":111},[101,57562,101],{"class":51289},[101,57564,57565],{"class":111},">名字是：\u003C\u002F",[101,57567,101],{"class":51289},[101,57569,51296],{"class":111},[101,57571,57572,57574,57576,57578,57580,57583,57586,57588],{"class":103,"line":9776},[101,57573,51330],{"class":111},[101,57575,51600],{"class":51289},[101,57577,53475],{"class":1950},[101,57579,157],{"class":111},[101,57581,57582],{"class":216},"\"qs\"",[101,57584,57585],{"class":111},">这里显示姓名\u003C\u002F",[101,57587,51600],{"class":51289},[101,57589,51296],{"class":111},[101,57591,57592,57594,57596],{"class":103,"line":9781},[101,57593,52406],{"class":111},[101,57595,51600],{"class":51289},[101,57597,51296],{"class":111},[101,57599,57600,57602,57604,57606,57608,57611],{"class":103,"line":9786},[101,57601,52133],{"class":111},[101,57603,51600],{"class":51289},[101,57605,53475],{"class":1950},[101,57607,157],{"class":111},[101,57609,57610],{"class":216},"\"btns\"",[101,57612,51296],{"class":111},[101,57614,57615,57617,57619,57621,57623,57626,57629,57631],{"class":103,"line":9791},[101,57616,51330],{"class":111},[101,57618,53876],{"class":51289},[101,57620,53475],{"class":1950},[101,57622,157],{"class":111},[101,57624,57625],{"class":216},"\"start\"",[101,57627,57628],{"class":111},">开始\u003C\u002F",[101,57630,53876],{"class":51289},[101,57632,51296],{"class":111},[101,57634,57635,57637,57639,57641,57643,57646,57649,57651],{"class":103,"line":9800},[101,57636,51330],{"class":111},[101,57638,53876],{"class":51289},[101,57640,53475],{"class":1950},[101,57642,157],{"class":111},[101,57644,57645],{"class":216},"\"end\"",[101,57647,57648],{"class":111},">结束\u003C\u002F",[101,57650,53876],{"class":51289},[101,57652,51296],{"class":111},[101,57654,57655,57657,57659],{"class":103,"line":9805},[101,57656,52406],{"class":111},[101,57658,51600],{"class":51289},[101,57660,51296],{"class":111},[101,57662,57663],{"class":103,"line":9811},[101,57664,2387],{"emptyLinePlaceholder":27},[101,57666,57667,57669,57671],{"class":103,"line":9832},[101,57668,52133],{"class":111},[101,57670,51802],{"class":51289},[101,57672,51296],{"class":111},[101,57674,57675],{"class":103,"line":9838},[101,57676,57677],{"class":170},"    \u002F\u002F 数据数组\n",[101,57679,57680,57682,57685,57687,57689,57692,57694,57697,57699,57702,57704,57707,57709,57712],{"class":103,"line":9852},[101,57681,11209],{"class":107},[101,57683,57684],{"class":160}," arr",[101,57686,13552],{"class":107},[101,57688,52215],{"class":111},[101,57690,57691],{"class":216},"'马超'",[101,57693,12423],{"class":111},[101,57695,57696],{"class":216},"'黄忠'",[101,57698,12423],{"class":111},[101,57700,57701],{"class":216},"'赵云'",[101,57703,12423],{"class":111},[101,57705,57706],{"class":216},"'关羽'",[101,57708,12423],{"class":111},[101,57710,57711],{"class":216},"'张飞'",[101,57713,33235],{"class":111},[101,57715,57716,57718,57721,57723,57725,57727,57729,57732],{"class":103,"line":9858},[101,57717,11209],{"class":107},[101,57719,57720],{"class":160}," qs",[101,57722,13552],{"class":107},[101,57724,54385],{"class":111},[101,57726,54388],{"class":1950},[101,57728,112],{"class":111},[101,57730,57731],{"class":216},"'.qs'",[101,57733,118],{"class":111},[101,57735,57736],{"class":103,"line":9885},[101,57737,57738],{"class":170},"    \u002F\u002F 1.业务1.开始按钮模块\n",[101,57740,57741,57743,57745,57747,57749,57751,57753,57756],{"class":103,"line":9894},[101,57742,11209],{"class":107},[101,57744,4171],{"class":160},[101,57746,13552],{"class":107},[101,57748,54385],{"class":111},[101,57750,54388],{"class":1950},[101,57752,112],{"class":111},[101,57754,57755],{"class":216},"'.start'",[101,57757,118],{"class":111},[101,57759,57760],{"class":103,"line":9900},[101,57761,57762],{"class":170},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[101,57764,57765,57767,57770,57772],{"class":103,"line":9908},[101,57766,52208],{"class":107},[101,57768,57769],{"class":111}," timerId ",[101,57771,157],{"class":107},[101,57773,47322],{"class":160},[101,57775,57776],{"class":103,"line":9913},[101,57777,57778],{"class":170},"    \u002F\u002F 随机号要全局变量\n",[101,57780,57781,57783,57786,57788],{"class":103,"line":16592},[101,57782,52208],{"class":107},[101,57784,57785],{"class":111}," random ",[101,57787,157],{"class":107},[101,57789,47322],{"class":160},[101,57791,57792],{"class":103,"line":16598},[101,57793,57794],{"class":170},"    \u002F\u002F 1.1 添加点击事件\n",[101,57796,57797,57800,57803,57805,57808,57810,57812],{"class":103,"line":16621},[101,57798,57799],{"class":111},"    start.",[101,57801,57802],{"class":1950},"addEventListener",[101,57804,112],{"class":111},[101,57806,57807],{"class":216},"'click'",[101,57809,12423],{"class":111},[101,57811,54438],{"class":107},[101,57813,54441],{"class":111},[101,57815,57816,57819,57821,57823,57825,57827],{"class":103,"line":16627},[101,57817,57818],{"class":111},"      timerId ",[101,57820,157],{"class":107},[101,57822,54433],{"class":1950},[101,57824,112],{"class":111},[101,57826,54438],{"class":107},[101,57828,54441],{"class":111},[101,57830,57831],{"class":103,"line":16650},[101,57832,57833],{"class":170},"        \u002F\u002F 随机数\n",[101,57835,57836,57839,57841,57844,57847,57850,57852,57854,57856,57858],{"class":103,"line":16664},[101,57837,57838],{"class":111},"        random ",[101,57840,157],{"class":107},[101,57842,57843],{"class":1950}," parseInt",[101,57845,57846],{"class":111},"(Math.",[101,57848,57849],{"class":1950},"random",[101,57851,13038],{"class":111},[101,57853,566],{"class":107},[101,57855,51954],{"class":111},[101,57857,51957],{"class":160},[101,57859,118],{"class":111},[101,57861,57862,57865,57867],{"class":103,"line":16684},[101,57863,57864],{"class":111},"        qs.innerHTML ",[101,57866,157],{"class":107},[101,57868,57869],{"class":111}," arr[random]\n",[101,57871,57872,57875,57877],{"class":103,"line":16690},[101,57873,57874],{"class":111},"      }, ",[101,57876,384],{"class":160},[101,57878,118],{"class":111},[101,57880,57881],{"class":103,"line":16701},[101,57882,57883],{"class":170},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[101,57885,57886,57888,57891,57893,57896,57898],{"class":103,"line":16724},[101,57887,54469],{"class":107},[101,57889,57890],{"class":111}," (arr.",[101,57892,51957],{"class":160},[101,57894,57895],{"class":107}," ===",[101,57897,25107],{"class":160},[101,57899,12430],{"class":111},[101,57901,57902],{"class":103,"line":16746},[101,57903,57904],{"class":170},"        \u002F\u002F start.disabled = true\n",[101,57906,57907],{"class":103,"line":16751},[101,57908,57909],{"class":170},"        \u002F\u002F end.disabled = true\n",[101,57911,57912],{"class":103,"line":16757},[101,57913,57914],{"class":170},"        \u002F\u002F 可以合起来写\n",[101,57916,57917,57920,57922,57925,57927],{"class":103,"line":16771},[101,57918,57919],{"class":111},"        start.disabled ",[101,57921,157],{"class":107},[101,57923,57924],{"class":111}," end.disabled ",[101,57926,157],{"class":107},[101,57928,57929],{"class":160}," true\n",[101,57931,57932],{"class":103,"line":16784},[101,57933,52387],{"class":111},[101,57935,57936],{"class":103,"line":16789},[101,57937,33450],{"class":111},[101,57939,57940],{"class":103,"line":16803},[101,57941,57942],{"class":170},"    \u002F\u002F 1.2 关闭按钮模块\n",[101,57944,57945,57947,57949,57951,57953,57955,57957,57960],{"class":103,"line":16808},[101,57946,11209],{"class":107},[101,57948,4187],{"class":160},[101,57950,13552],{"class":107},[101,57952,54385],{"class":111},[101,57954,54388],{"class":1950},[101,57956,112],{"class":111},[101,57958,57959],{"class":216},"'.end'",[101,57961,118],{"class":111},[101,57963,57964,57967,57969,57971,57973,57975,57977],{"class":103,"line":16814},[101,57965,57966],{"class":111},"    end.",[101,57968,57802],{"class":1950},[101,57970,112],{"class":111},[101,57972,57807],{"class":216},[101,57974,12423],{"class":111},[101,57976,54438],{"class":107},[101,57978,54441],{"class":111},[101,57980,57981,57984],{"class":103,"line":16819},[101,57982,57983],{"class":1950},"      clearInterval",[101,57985,57986],{"class":111},"(timerId)\n",[101,57988,57989],{"class":103,"line":16833},[101,57990,57991],{"class":170},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[101,57993,57994,57997,58000,58003,58005],{"class":103,"line":16838},[101,57995,57996],{"class":111},"      arr.",[101,57998,57999],{"class":1950},"splice",[101,58001,58002],{"class":111},"(random, ",[101,58004,329],{"class":160},[101,58006,118],{"class":111},[101,58008,58009],{"class":103,"line":16843},[101,58010,33450],{"class":111},[101,58012,58013],{"class":103,"line":16857},[101,58014,2387],{"emptyLinePlaceholder":27},[101,58016,58017,58019,58021],{"class":103,"line":16869},[101,58018,52406],{"class":111},[101,58020,51802],{"class":51289},[101,58022,51296],{"class":111},[101,58024,58025,58027,58029],{"class":103,"line":16874},[101,58026,51774],{"class":111},[101,58028,51789],{"class":51289},[101,58030,51296],{"class":111},[101,58032,58033],{"class":103,"line":16887},[101,58034,2387],{"emptyLinePlaceholder":27},[101,58036,58037,58039,58041],{"class":103,"line":16892},[101,58038,51774],{"class":111},[101,58040,50624],{"class":51289},[101,58042,51296],{"class":111},[10,58044,58045],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[72,58047,58049],{"id":58048},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[92,58051,58053],{"className":50622,"code":58052,"language":50624,"meta":20,"style":20},"\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",[98,58054,58055,58065,58079,58083,58091,58105,58125,58137,58145,58149,58157,58169,58177,58196,58213,58229,58239,58243,58251,58259,58263],{"__ignoreMap":20},[101,58056,58057,58059,58061,58063],{"class":103,"line":104},[101,58058,51286],{"class":111},[101,58060,51290],{"class":51289},[101,58062,51293],{"class":1950},[101,58064,51296],{"class":111},[101,58066,58067,58069,58071,58073,58075,58077],{"class":103,"line":21},[101,58068,1021],{"class":111},[101,58070,50624],{"class":51289},[101,58072,51305],{"class":1950},[101,58074,157],{"class":111},[101,58076,51310],{"class":216},[101,58078,51296],{"class":111},[101,58080,58081],{"class":103,"line":1166},[101,58082,2387],{"emptyLinePlaceholder":27},[101,58084,58085,58087,58089],{"class":103,"line":1181},[101,58086,1021],{"class":111},[101,58088,51323],{"class":51289},[101,58090,51296],{"class":111},[101,58092,58093,58095,58097,58099,58101,58103],{"class":103,"line":1187},[101,58094,52133],{"class":111},[101,58096,51333],{"class":51289},[101,58098,51336],{"class":1950},[101,58100,157],{"class":111},[101,58102,51341],{"class":216},[101,58104,51296],{"class":111},[101,58106,58107,58109,58111,58113,58115,58117,58119,58121,58123],{"class":103,"line":1201},[101,58108,52133],{"class":111},[101,58110,51333],{"class":51289},[101,58112,14908],{"class":1950},[101,58114,157],{"class":111},[101,58116,51380],{"class":216},[101,58118,51360],{"class":1950},[101,58120,157],{"class":111},[101,58122,51387],{"class":216},[101,58124,51296],{"class":111},[101,58126,58127,58129,58131,58133,58135],{"class":103,"line":1207},[101,58128,52133],{"class":111},[101,58130,51396],{"class":51289},[101,58132,51399],{"class":111},[101,58134,51396],{"class":51289},[101,58136,51296],{"class":111},[101,58138,58139,58141,58143],{"class":103,"line":1298},[101,58140,51774],{"class":111},[101,58142,51323],{"class":51289},[101,58144,51296],{"class":111},[101,58146,58147],{"class":103,"line":1304},[101,58148,2387],{"emptyLinePlaceholder":27},[101,58150,58151,58153,58155],{"class":103,"line":1316},[101,58152,1021],{"class":111},[101,58154,51789],{"class":51289},[101,58156,51296],{"class":111},[101,58158,58159,58161,58163,58165,58167],{"class":103,"line":1599},[101,58160,52133],{"class":111},[101,58162,53876],{"class":51289},[101,58164,53882],{"class":111},[101,58166,53876],{"class":51289},[101,58168,51296],{"class":111},[101,58170,58171,58173,58175],{"class":103,"line":1604},[101,58172,52133],{"class":111},[101,58174,51802],{"class":51289},[101,58176,51296],{"class":111},[101,58178,58179,58181,58183,58185,58187,58189,58191,58194],{"class":103,"line":1610},[101,58180,11209],{"class":107},[101,58182,54380],{"class":160},[101,58184,13552],{"class":107},[101,58186,54385],{"class":111},[101,58188,54388],{"class":1950},[101,58190,112],{"class":111},[101,58192,58193],{"class":216},"'button'",[101,58195,118],{"class":111},[101,58197,58198,58201,58203,58205,58207,58209,58211],{"class":103,"line":1615},[101,58199,58200],{"class":111},"    btn.",[101,58202,57802],{"class":1950},[101,58204,112],{"class":111},[101,58206,57807],{"class":216},[101,58208,12423],{"class":111},[101,58210,54438],{"class":107},[101,58212,54441],{"class":111},[101,58214,58215,58218,58220,58222,58225,58227],{"class":103,"line":1629},[101,58216,58217],{"class":107},"      const",[101,58219,2227],{"class":160},[101,58221,13552],{"class":107},[101,58223,58224],{"class":111}," Math.",[101,58226,57849],{"class":1950},[101,58228,1963],{"class":111},[101,58230,58231,58234,58237],{"class":103,"line":1634},[101,58232,58233],{"class":111},"      console.",[101,58235,58236],{"class":1950},"log",[101,58238,125],{"class":111},[101,58240,58241],{"class":103,"line":1640},[101,58242,33450],{"class":111},[101,58244,58245,58247,58249],{"class":103,"line":1661},[101,58246,52406],{"class":111},[101,58248,51802],{"class":51289},[101,58250,51296],{"class":111},[101,58252,58253,58255,58257],{"class":103,"line":1666},[101,58254,51774],{"class":111},[101,58256,51789],{"class":51289},[101,58258,51296],{"class":111},[101,58260,58261],{"class":103,"line":1680},[101,58262,2387],{"emptyLinePlaceholder":27},[101,58264,58265,58267,58269],{"class":103,"line":1685},[101,58266,51774],{"class":111},[101,58268,50624],{"class":51289},[101,58270,51296],{"class":111},[10,58272,58273],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[10,58275,58276],{},"常量不可以重新赋值",[10,58278,58279],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[92,58281,58283],{"className":50622,"code":58282,"language":50624,"meta":20,"style":20},"\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",[98,58284,58285,58295,58309,58313,58321,58335,58355,58367,58375,58379,58387,58399,58407,58418,58436,58452,58466,58474,58478,58486,58494,58498],{"__ignoreMap":20},[101,58286,58287,58289,58291,58293],{"class":103,"line":104},[101,58288,51286],{"class":111},[101,58290,51290],{"class":51289},[101,58292,51293],{"class":1950},[101,58294,51296],{"class":111},[101,58296,58297,58299,58301,58303,58305,58307],{"class":103,"line":21},[101,58298,1021],{"class":111},[101,58300,50624],{"class":51289},[101,58302,51305],{"class":1950},[101,58304,157],{"class":111},[101,58306,51310],{"class":216},[101,58308,51296],{"class":111},[101,58310,58311],{"class":103,"line":1166},[101,58312,2387],{"emptyLinePlaceholder":27},[101,58314,58315,58317,58319],{"class":103,"line":1181},[101,58316,1021],{"class":111},[101,58318,51323],{"class":51289},[101,58320,51296],{"class":111},[101,58322,58323,58325,58327,58329,58331,58333],{"class":103,"line":1187},[101,58324,52133],{"class":111},[101,58326,51333],{"class":51289},[101,58328,51336],{"class":1950},[101,58330,157],{"class":111},[101,58332,51341],{"class":216},[101,58334,51296],{"class":111},[101,58336,58337,58339,58341,58343,58345,58347,58349,58351,58353],{"class":103,"line":1201},[101,58338,52133],{"class":111},[101,58340,51333],{"class":51289},[101,58342,14908],{"class":1950},[101,58344,157],{"class":111},[101,58346,51380],{"class":216},[101,58348,51360],{"class":1950},[101,58350,157],{"class":111},[101,58352,51387],{"class":216},[101,58354,51296],{"class":111},[101,58356,58357,58359,58361,58363,58365],{"class":103,"line":1207},[101,58358,52133],{"class":111},[101,58360,51396],{"class":51289},[101,58362,51399],{"class":111},[101,58364,51396],{"class":51289},[101,58366,51296],{"class":111},[101,58368,58369,58371,58373],{"class":103,"line":1298},[101,58370,51774],{"class":111},[101,58372,51323],{"class":51289},[101,58374,51296],{"class":111},[101,58376,58377],{"class":103,"line":1304},[101,58378,2387],{"emptyLinePlaceholder":27},[101,58380,58381,58383,58385],{"class":103,"line":1316},[101,58382,1021],{"class":111},[101,58384,51789],{"class":51289},[101,58386,51296],{"class":111},[101,58388,58389,58391,58393,58395,58397],{"class":103,"line":1599},[101,58390,52133],{"class":111},[101,58392,53876],{"class":51289},[101,58394,53882],{"class":111},[101,58396,53876],{"class":51289},[101,58398,51296],{"class":111},[101,58400,58401,58403,58405],{"class":103,"line":1604},[101,58402,52133],{"class":111},[101,58404,51802],{"class":51289},[101,58406,51296],{"class":111},[101,58408,58409,58411,58413,58415],{"class":103,"line":1610},[101,58410,11209],{"class":107},[101,58412,2227],{"class":160},[101,58414,13552],{"class":107},[101,58416,58417],{"class":160}," 10\n",[101,58419,58420,58422,58424,58426,58428,58430,58432,58434],{"class":103,"line":1615},[101,58421,11209],{"class":107},[101,58423,54380],{"class":160},[101,58425,13552],{"class":107},[101,58427,54385],{"class":111},[101,58429,54388],{"class":1950},[101,58431,112],{"class":111},[101,58433,58193],{"class":216},[101,58435,118],{"class":111},[101,58437,58438,58440,58442,58444,58446,58448,58450],{"class":103,"line":1629},[101,58439,58200],{"class":111},[101,58441,57802],{"class":1950},[101,58443,112],{"class":111},[101,58445,57807],{"class":216},[101,58447,12423],{"class":111},[101,58449,54438],{"class":107},[101,58451,54441],{"class":111},[101,58453,58454,58456,58458,58460,58462,58464],{"class":103,"line":1634},[101,58455,58217],{"class":107},[101,58457,2227],{"class":160},[101,58459,13552],{"class":107},[101,58461,58224],{"class":111},[101,58463,57849],{"class":1950},[101,58465,1963],{"class":111},[101,58467,58468,58470,58472],{"class":103,"line":1640},[101,58469,58233],{"class":111},[101,58471,58236],{"class":1950},[101,58473,125],{"class":111},[101,58475,58476],{"class":103,"line":1661},[101,58477,33450],{"class":111},[101,58479,58480,58482,58484],{"class":103,"line":1666},[101,58481,52406],{"class":111},[101,58483,51802],{"class":51289},[101,58485,51296],{"class":111},[101,58487,58488,58490,58492],{"class":103,"line":1680},[101,58489,51774],{"class":111},[101,58491,51789],{"class":51289},[101,58493,51296],{"class":111},[101,58495,58496],{"class":103,"line":1685},[101,58497,2387],{"emptyLinePlaceholder":27},[101,58499,58500,58502,58504],{"class":103,"line":1714},[101,58501,51774],{"class":111},[101,58503,50624],{"class":51289},[101,58505,51296],{"class":111},[10,58507,58508],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[92,58510,58512],{"className":50622,"code":58511,"language":50624,"meta":20,"style":20},"\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",[98,58513,58514,58524,58538,58542,58550,58564,58584,58596,58604,58608,58616,58628,58636,58646,58664,58680,58693,58701,58705,58713,58721,58725],{"__ignoreMap":20},[101,58515,58516,58518,58520,58522],{"class":103,"line":104},[101,58517,51286],{"class":111},[101,58519,51290],{"class":51289},[101,58521,51293],{"class":1950},[101,58523,51296],{"class":111},[101,58525,58526,58528,58530,58532,58534,58536],{"class":103,"line":21},[101,58527,1021],{"class":111},[101,58529,50624],{"class":51289},[101,58531,51305],{"class":1950},[101,58533,157],{"class":111},[101,58535,51310],{"class":216},[101,58537,51296],{"class":111},[101,58539,58540],{"class":103,"line":1166},[101,58541,2387],{"emptyLinePlaceholder":27},[101,58543,58544,58546,58548],{"class":103,"line":1181},[101,58545,1021],{"class":111},[101,58547,51323],{"class":51289},[101,58549,51296],{"class":111},[101,58551,58552,58554,58556,58558,58560,58562],{"class":103,"line":1187},[101,58553,52133],{"class":111},[101,58555,51333],{"class":51289},[101,58557,51336],{"class":1950},[101,58559,157],{"class":111},[101,58561,51341],{"class":216},[101,58563,51296],{"class":111},[101,58565,58566,58568,58570,58572,58574,58576,58578,58580,58582],{"class":103,"line":1201},[101,58567,52133],{"class":111},[101,58569,51333],{"class":51289},[101,58571,14908],{"class":1950},[101,58573,157],{"class":111},[101,58575,51380],{"class":216},[101,58577,51360],{"class":1950},[101,58579,157],{"class":111},[101,58581,51387],{"class":216},[101,58583,51296],{"class":111},[101,58585,58586,58588,58590,58592,58594],{"class":103,"line":1207},[101,58587,52133],{"class":111},[101,58589,51396],{"class":51289},[101,58591,51399],{"class":111},[101,58593,51396],{"class":51289},[101,58595,51296],{"class":111},[101,58597,58598,58600,58602],{"class":103,"line":1298},[101,58599,51774],{"class":111},[101,58601,51323],{"class":51289},[101,58603,51296],{"class":111},[101,58605,58606],{"class":103,"line":1304},[101,58607,2387],{"emptyLinePlaceholder":27},[101,58609,58610,58612,58614],{"class":103,"line":1316},[101,58611,1021],{"class":111},[101,58613,51789],{"class":51289},[101,58615,51296],{"class":111},[101,58617,58618,58620,58622,58624,58626],{"class":103,"line":1599},[101,58619,52133],{"class":111},[101,58621,53876],{"class":51289},[101,58623,53882],{"class":111},[101,58625,53876],{"class":51289},[101,58627,51296],{"class":111},[101,58629,58630,58632,58634],{"class":103,"line":1604},[101,58631,52133],{"class":111},[101,58633,51802],{"class":51289},[101,58635,51296],{"class":111},[101,58637,58638,58640,58642,58644],{"class":103,"line":1610},[101,58639,11209],{"class":107},[101,58641,2227],{"class":160},[101,58643,13552],{"class":107},[101,58645,58417],{"class":160},[101,58647,58648,58650,58652,58654,58656,58658,58660,58662],{"class":103,"line":1615},[101,58649,11209],{"class":107},[101,58651,54380],{"class":160},[101,58653,13552],{"class":107},[101,58655,54385],{"class":111},[101,58657,54388],{"class":1950},[101,58659,112],{"class":111},[101,58661,58193],{"class":216},[101,58663,118],{"class":111},[101,58665,58666,58668,58670,58672,58674,58676,58678],{"class":103,"line":1629},[101,58667,58200],{"class":111},[101,58669,57802],{"class":1950},[101,58671,112],{"class":111},[101,58673,57807],{"class":216},[101,58675,12423],{"class":111},[101,58677,54438],{"class":107},[101,58679,54441],{"class":111},[101,58681,58682,58685,58687,58689,58691],{"class":103,"line":1634},[101,58683,58684],{"class":111},"      num ",[101,58686,157],{"class":107},[101,58688,58224],{"class":111},[101,58690,57849],{"class":1950},[101,58692,1963],{"class":111},[101,58694,58695,58697,58699],{"class":103,"line":1640},[101,58696,58233],{"class":111},[101,58698,58236],{"class":1950},[101,58700,125],{"class":111},[101,58702,58703],{"class":103,"line":1661},[101,58704,33450],{"class":111},[101,58706,58707,58709,58711],{"class":103,"line":1666},[101,58708,52406],{"class":111},[101,58710,51802],{"class":51289},[101,58712,51296],{"class":111},[101,58714,58715,58717,58719],{"class":103,"line":1680},[101,58716,51774],{"class":111},[101,58718,51789],{"class":51289},[101,58720,51296],{"class":111},[101,58722,58723],{"class":103,"line":1685},[101,58724,2387],{"emptyLinePlaceholder":27},[101,58726,58727,58729,58731],{"class":103,"line":1714},[101,58728,51774],{"class":111},[101,58730,50624],{"class":51289},[101,58732,51296],{"class":111},[10,58734,58735],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[72,58737,58739],{"id":58738},"_324-事件监听版本","3.2.4 事件监听版本",[10,58741,58742],{},[1449,58743],{"alt":20,"src":58744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[10,58746,58747],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[10,58749,58750],{},"这种方式会覆盖前边的事件监听:",[92,58752,58754],{"className":50622,"code":58753,"language":50624,"meta":20,"style":20},"\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",[98,58755,58756,58766,58780,58784,58792,58806,58826,58838,58846,58850,58858,58870,58878,58896,58910,58921,58925,58937,58947,58951,58959,58967,58971],{"__ignoreMap":20},[101,58757,58758,58760,58762,58764],{"class":103,"line":104},[101,58759,51286],{"class":111},[101,58761,51290],{"class":51289},[101,58763,51293],{"class":1950},[101,58765,51296],{"class":111},[101,58767,58768,58770,58772,58774,58776,58778],{"class":103,"line":21},[101,58769,1021],{"class":111},[101,58771,50624],{"class":51289},[101,58773,51305],{"class":1950},[101,58775,157],{"class":111},[101,58777,51310],{"class":216},[101,58779,51296],{"class":111},[101,58781,58782],{"class":103,"line":1166},[101,58783,2387],{"emptyLinePlaceholder":27},[101,58785,58786,58788,58790],{"class":103,"line":1181},[101,58787,1021],{"class":111},[101,58789,51323],{"class":51289},[101,58791,51296],{"class":111},[101,58793,58794,58796,58798,58800,58802,58804],{"class":103,"line":1187},[101,58795,52133],{"class":111},[101,58797,51333],{"class":51289},[101,58799,51336],{"class":1950},[101,58801,157],{"class":111},[101,58803,51341],{"class":216},[101,58805,51296],{"class":111},[101,58807,58808,58810,58812,58814,58816,58818,58820,58822,58824],{"class":103,"line":1201},[101,58809,52133],{"class":111},[101,58811,51333],{"class":51289},[101,58813,14908],{"class":1950},[101,58815,157],{"class":111},[101,58817,51380],{"class":216},[101,58819,51360],{"class":1950},[101,58821,157],{"class":111},[101,58823,51387],{"class":216},[101,58825,51296],{"class":111},[101,58827,58828,58830,58832,58834,58836],{"class":103,"line":1207},[101,58829,52133],{"class":111},[101,58831,51396],{"class":51289},[101,58833,51399],{"class":111},[101,58835,51396],{"class":51289},[101,58837,51296],{"class":111},[101,58839,58840,58842,58844],{"class":103,"line":1298},[101,58841,51774],{"class":111},[101,58843,51323],{"class":51289},[101,58845,51296],{"class":111},[101,58847,58848],{"class":103,"line":1304},[101,58849,2387],{"emptyLinePlaceholder":27},[101,58851,58852,58854,58856],{"class":103,"line":1316},[101,58853,1021],{"class":111},[101,58855,51789],{"class":51289},[101,58857,51296],{"class":111},[101,58859,58860,58862,58864,58866,58868],{"class":103,"line":1599},[101,58861,52133],{"class":111},[101,58863,53876],{"class":51289},[101,58865,53882],{"class":111},[101,58867,53876],{"class":51289},[101,58869,51296],{"class":111},[101,58871,58872,58874,58876],{"class":103,"line":1604},[101,58873,52133],{"class":111},[101,58875,51802],{"class":51289},[101,58877,51296],{"class":111},[101,58879,58880,58882,58884,58886,58888,58890,58892,58894],{"class":103,"line":1610},[101,58881,11209],{"class":107},[101,58883,54380],{"class":160},[101,58885,13552],{"class":107},[101,58887,54385],{"class":111},[101,58889,54388],{"class":1950},[101,58891,112],{"class":111},[101,58893,58193],{"class":216},[101,58895,118],{"class":111},[101,58897,58898,58900,58903,58905,58908],{"class":103,"line":1615},[101,58899,58200],{"class":111},[101,58901,58902],{"class":1950},"onclick",[101,58904,13552],{"class":107},[101,58906,58907],{"class":107}," function",[101,58909,54441],{"class":111},[101,58911,58912,58915,58917,58919],{"class":103,"line":1629},[101,58913,58914],{"class":1950},"      alert",[101,58916,112],{"class":111},[101,58918,583],{"class":160},[101,58920,118],{"class":111},[101,58922,58923],{"class":103,"line":1634},[101,58924,2174],{"class":111},[101,58926,58927,58929,58931,58933,58935],{"class":103,"line":1640},[101,58928,58200],{"class":111},[101,58930,58902],{"class":1950},[101,58932,13552],{"class":107},[101,58934,58907],{"class":107},[101,58936,54441],{"class":111},[101,58938,58939,58941,58943,58945],{"class":103,"line":1661},[101,58940,58914],{"class":1950},[101,58942,112],{"class":111},[101,58944,861],{"class":160},[101,58946,118],{"class":111},[101,58948,58949],{"class":103,"line":1666},[101,58950,2174],{"class":111},[101,58952,58953,58955,58957],{"class":103,"line":1680},[101,58954,52406],{"class":111},[101,58956,51802],{"class":51289},[101,58958,51296],{"class":111},[101,58960,58961,58963,58965],{"class":103,"line":1685},[101,58962,51774],{"class":111},[101,58964,51789],{"class":51289},[101,58966,51296],{"class":111},[101,58968,58969],{"class":103,"line":1714},[101,58970,2387],{"emptyLinePlaceholder":27},[101,58972,58973,58975,58977],{"class":103,"line":1719},[101,58974,51774],{"class":111},[101,58976,50624],{"class":51289},[101,58978,51296],{"class":111},[10,58980,58981],{},"只要点击就输出结果为22,前边11被覆盖了",[92,58983,58985],{"className":50622,"code":58984,"language":50624,"meta":20,"style":20},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[98,58986,58987,58992,58997,59001,59006,59011],{"__ignoreMap":20},[101,58988,58989],{"class":103,"line":104},[101,58990,58991],{"class":111},"  btn.addEventListener('click', function () {\n",[101,58993,58994],{"class":103,"line":21},[101,58995,58996],{"class":111},"      alert(11)\n",[101,58998,58999],{"class":103,"line":1166},[101,59000,33450],{"class":111},[101,59002,59003],{"class":103,"line":1181},[101,59004,59005],{"class":111},"    btn.addEventListener('click', function () {\n",[101,59007,59008],{"class":103,"line":1187},[101,59009,59010],{"class":111},"      alert(22)\n",[101,59012,59013],{"class":103,"line":1201},[101,59014,33450],{"class":111},[10,59016,59017],{},"点击第一次输出11,第二次点击为22",[72,59019,59021],{"id":59020},"_325-事件类型","3.2.5 事件类型",[10,59023,59024],{},[1449,59025],{"alt":20,"src":59026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21986,59028,59030],{"id":59029},"_3251-鼠标事件","3.2.5.1 鼠标事件",[10,59032,59033],{},"补充知识:",[10,59035,59036],{},"轮播图自动播放模块,可以使用",[10,59038,59039],{},"let timerId = setInterval(function () {",[10,59041,59042],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[10,59044,59045],{},"用js方法模拟进行点击事件,click必须加()",[10,59047,59048],{},"next.click()",[10,59050,59051],{},"}, 1000)",[10,59053,59054],{},[1449,59055],{"alt":20,"src":59056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[92,59058,59060],{"className":53056,"code":59059,"language":53058,"meta":20,"style":20},"\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",[98,59061,59062,59066,59076,59090,59094,59102,59117,59137,59157,59170,59178,59183,59188,59192,59196,59201,59206,59211,59216,59220,59224,59229,59234,59239,59243,59247,59252,59256,59261,59266,59270,59274,59279,59284,59289,59294,59299,59303,59307,59312,59317,59322,59327,59332,59336,59340,59345,59350,59355,59360,59365,59370,59375,59380,59385,59390,59394,59398,59403,59408,59412,59416,59421,59426,59430,59435,59440,59444,59448,59453,59457,59462,59467,59471,59476,59480,59484,59489,59494,59499,59504,59509,59514,59519,59523,59527,59531,59536,59541,59546,59551,59555,59563,59571,59575,59583,59598,59612,59633,59641,59655,59668,59683,59702,59714,59726,59738,59750,59762,59774,59786,59794,59809,59833,59857,59865,59873,59881,59889,59894,59899,59904,59909,59914,59919,59924,59929,59934,59939,59943,59948,59953,59958,59963,59968,59973,59978,59983,59988,59992,59997,60002,60007,60012,60017,60022,60027,60032,60037,60042,60047,60052,60056,60060,60065,60070,60075,60079,60084,60089,60094,60099,60104,60108,60113,60117,60121,60125,60129,60133,60137,60142,60147,60152,60157,60162,60167,60172,60177,60182,60186,60190,60195,60200,60205,60210,60215,60219,60224,60229,60234,60239,60244,60249,60253,60257,60262,60266,60271,60275,60280,60285,60290,60295,60300,60305,60309,60317,60325,60329],{"__ignoreMap":20},[101,59063,59064],{"class":103,"line":104},[101,59065,2387],{"emptyLinePlaceholder":27},[101,59067,59068,59070,59072,59074],{"class":103,"line":21},[101,59069,51286],{"class":111},[101,59071,51290],{"class":107},[101,59073,51293],{"class":160},[101,59075,51296],{"class":111},[101,59077,59078,59080,59082,59084,59086,59088],{"class":103,"line":1166},[101,59079,1021],{"class":111},[101,59081,50624],{"class":51289},[101,59083,51305],{"class":1950},[101,59085,157],{"class":111},[101,59087,51310],{"class":216},[101,59089,51296],{"class":111},[101,59091,59092],{"class":103,"line":1181},[101,59093,2387],{"emptyLinePlaceholder":27},[101,59095,59096,59098,59100],{"class":103,"line":1187},[101,59097,1021],{"class":111},[101,59099,51323],{"class":51289},[101,59101,51296],{"class":111},[101,59103,59104,59106,59108,59110,59112,59114],{"class":103,"line":1201},[101,59105,52133],{"class":111},[101,59107,51333],{"class":51289},[101,59109,51336],{"class":1950},[101,59111,157],{"class":111},[101,59113,51341],{"class":216},[101,59115,59116],{"class":111}," \u002F>\n",[101,59118,59119,59121,59123,59125,59127,59129,59131,59133,59135],{"class":103,"line":1207},[101,59120,52133],{"class":111},[101,59122,51333],{"class":51289},[101,59124,51352],{"class":1950},[101,59126,157],{"class":111},[101,59128,51357],{"class":216},[101,59130,51360],{"class":1950},[101,59132,157],{"class":111},[101,59134,51365],{"class":216},[101,59136,59116],{"class":111},[101,59138,59139,59141,59143,59145,59147,59149,59151,59153,59155],{"class":103,"line":1298},[101,59140,52133],{"class":111},[101,59142,51333],{"class":51289},[101,59144,14908],{"class":1950},[101,59146,157],{"class":111},[101,59148,51380],{"class":216},[101,59150,51360],{"class":1950},[101,59152,157],{"class":111},[101,59154,51387],{"class":216},[101,59156,59116],{"class":111},[101,59158,59159,59161,59163,59166,59168],{"class":103,"line":1304},[101,59160,52133],{"class":111},[101,59162,51396],{"class":51289},[101,59164,59165],{"class":111},">轮播图点击切换\u003C\u002F",[101,59167,51396],{"class":51289},[101,59169,51296],{"class":111},[101,59171,59172,59174,59176],{"class":103,"line":1316},[101,59173,52133],{"class":111},[101,59175,5114],{"class":51289},[101,59177,51296],{"class":111},[101,59179,59180],{"class":103,"line":1599},[101,59181,59182],{"class":111},"    * {\n",[101,59184,59185],{"class":103,"line":1604},[101,59186,59187],{"class":111},"      box-sizing: border-box;\n",[101,59189,59190],{"class":103,"line":1610},[101,59191,2174],{"class":111},[101,59193,59194],{"class":103,"line":1615},[101,59195,2387],{"emptyLinePlaceholder":27},[101,59197,59198],{"class":103,"line":1629},[101,59199,59200],{"class":111},"    .slider {\n",[101,59202,59203],{"class":103,"line":1634},[101,59204,59205],{"class":111},"      width: 560px;\n",[101,59207,59208],{"class":103,"line":1640},[101,59209,59210],{"class":111},"      height: 400px;\n",[101,59212,59213],{"class":103,"line":1661},[101,59214,59215],{"class":111},"      overflow: hidden;\n",[101,59217,59218],{"class":103,"line":1666},[101,59219,2174],{"class":111},[101,59221,59222],{"class":103,"line":1680},[101,59223,2387],{"emptyLinePlaceholder":27},[101,59225,59226],{"class":103,"line":1685},[101,59227,59228],{"class":111},"    .slider-wrapper {\n",[101,59230,59231],{"class":103,"line":1714},[101,59232,59233],{"class":111},"      width: 100%;\n",[101,59235,59236],{"class":103,"line":1719},[101,59237,59238],{"class":111},"      height: 320px;\n",[101,59240,59241],{"class":103,"line":1736},[101,59242,2174],{"class":111},[101,59244,59245],{"class":103,"line":1741},[101,59246,2387],{"emptyLinePlaceholder":27},[101,59248,59249],{"class":103,"line":1746},[101,59250,59251],{"class":111},"    .slider-wrapper img {\n",[101,59253,59254],{"class":103,"line":1751},[101,59255,59233],{"class":111},[101,59257,59258],{"class":103,"line":1765},[101,59259,59260],{"class":111},"      height: 100%;\n",[101,59262,59263],{"class":103,"line":1770},[101,59264,59265],{"class":111},"      display: block;\n",[101,59267,59268],{"class":103,"line":2564},[101,59269,2174],{"class":111},[101,59271,59272],{"class":103,"line":2578},[101,59273,2387],{"emptyLinePlaceholder":27},[101,59275,59276],{"class":103,"line":2586},[101,59277,59278],{"class":111},"    .slider-footer {\n",[101,59280,59281],{"class":103,"line":2591},[101,59282,59283],{"class":111},"      height: 80px;\n",[101,59285,59286],{"class":103,"line":2597},[101,59287,59288],{"class":111},"      background-color: rgb(100, 67, 68);\n",[101,59290,59291],{"class":103,"line":2603},[101,59292,59293],{"class":111},"      padding: 12px 12px 0 12px;\n",[101,59295,59296],{"class":103,"line":2608},[101,59297,59298],{"class":111},"      position: relative;\n",[101,59300,59301],{"class":103,"line":7936},[101,59302,2174],{"class":111},[101,59304,59305],{"class":103,"line":7960},[101,59306,2387],{"emptyLinePlaceholder":27},[101,59308,59309],{"class":103,"line":7965},[101,59310,59311],{"class":111},"    .slider-footer .toggle {\n",[101,59313,59314],{"class":103,"line":7971},[101,59315,59316],{"class":111},"      position: absolute;\n",[101,59318,59319],{"class":103,"line":7998},[101,59320,59321],{"class":111},"      right: 0;\n",[101,59323,59324],{"class":103,"line":8003},[101,59325,59326],{"class":111},"      top: 12px;\n",[101,59328,59329],{"class":103,"line":8009},[101,59330,59331],{"class":111},"      display: flex;\n",[101,59333,59334],{"class":103,"line":8021},[101,59335,2174],{"class":111},[101,59337,59338],{"class":103,"line":8033},[101,59339,2387],{"emptyLinePlaceholder":27},[101,59341,59342],{"class":103,"line":8045},[101,59343,59344],{"class":111},"    .slider-footer .toggle button {\n",[101,59346,59347],{"class":103,"line":9704},[101,59348,59349],{"class":111},"      margin-right: 12px;\n",[101,59351,59352],{"class":103,"line":9729},[101,59353,59354],{"class":111},"      width: 28px;\n",[101,59356,59357],{"class":103,"line":9752},[101,59358,59359],{"class":111},"      height: 28px;\n",[101,59361,59362],{"class":103,"line":9776},[101,59363,59364],{"class":111},"      appearance: none;\n",[101,59366,59367],{"class":103,"line":9781},[101,59368,59369],{"class":111},"      border: none;\n",[101,59371,59372],{"class":103,"line":9786},[101,59373,59374],{"class":111},"      background: rgba(255, 255, 255, 0.1);\n",[101,59376,59377],{"class":103,"line":9791},[101,59378,59379],{"class":111},"      color: #fff;\n",[101,59381,59382],{"class":103,"line":9800},[101,59383,59384],{"class":111},"      border-radius: 4px;\n",[101,59386,59387],{"class":103,"line":9805},[101,59388,59389],{"class":111},"      cursor: pointer;\n",[101,59391,59392],{"class":103,"line":9811},[101,59393,2174],{"class":111},[101,59395,59396],{"class":103,"line":9832},[101,59397,2387],{"emptyLinePlaceholder":27},[101,59399,59400],{"class":103,"line":9838},[101,59401,59402],{"class":111},"    .slider-footer .toggle button:hover {\n",[101,59404,59405],{"class":103,"line":9852},[101,59406,59407],{"class":111},"      background: rgba(255, 255, 255, 0.2);\n",[101,59409,59410],{"class":103,"line":9858},[101,59411,2174],{"class":111},[101,59413,59414],{"class":103,"line":9885},[101,59415,2387],{"emptyLinePlaceholder":27},[101,59417,59418],{"class":103,"line":9894},[101,59419,59420],{"class":111},"    .slider-footer p {\n",[101,59422,59423],{"class":103,"line":9900},[101,59424,59425],{"class":111},"      margin: 0;\n",[101,59427,59428],{"class":103,"line":9908},[101,59429,59379],{"class":111},[101,59431,59432],{"class":103,"line":9913},[101,59433,59434],{"class":111},"      font-size: 18px;\n",[101,59436,59437],{"class":103,"line":16592},[101,59438,59439],{"class":111},"      margin-bottom: 10px;\n",[101,59441,59442],{"class":103,"line":16598},[101,59443,2174],{"class":111},[101,59445,59446],{"class":103,"line":16621},[101,59447,2387],{"emptyLinePlaceholder":27},[101,59449,59450],{"class":103,"line":16627},[101,59451,59452],{"class":111},"    .slider-indicator {\n",[101,59454,59455],{"class":103,"line":16650},[101,59456,59425],{"class":111},[101,59458,59459],{"class":103,"line":16664},[101,59460,59461],{"class":111},"      padding: 0;\n",[101,59463,59464],{"class":103,"line":16684},[101,59465,59466],{"class":111},"      list-style: none;\n",[101,59468,59469],{"class":103,"line":16690},[101,59470,59331],{"class":111},[101,59472,59473],{"class":103,"line":16701},[101,59474,59475],{"class":111},"      align-items: center;\n",[101,59477,59478],{"class":103,"line":16724},[101,59479,2174],{"class":111},[101,59481,59482],{"class":103,"line":16746},[101,59483,2387],{"emptyLinePlaceholder":27},[101,59485,59486],{"class":103,"line":16751},[101,59487,59488],{"class":111},"    .slider-indicator li {\n",[101,59490,59491],{"class":103,"line":16757},[101,59492,59493],{"class":111},"      width: 8px;\n",[101,59495,59496],{"class":103,"line":16771},[101,59497,59498],{"class":111},"      height: 8px;\n",[101,59500,59501],{"class":103,"line":16784},[101,59502,59503],{"class":111},"      margin: 4px;\n",[101,59505,59506],{"class":103,"line":16789},[101,59507,59508],{"class":111},"      border-radius: 50%;\n",[101,59510,59511],{"class":103,"line":16803},[101,59512,59513],{"class":111},"      background: #fff;\n",[101,59515,59516],{"class":103,"line":16808},[101,59517,59518],{"class":111},"      opacity: 0.4;\n",[101,59520,59521],{"class":103,"line":16814},[101,59522,59389],{"class":111},[101,59524,59525],{"class":103,"line":16819},[101,59526,2174],{"class":111},[101,59528,59529],{"class":103,"line":16833},[101,59530,2387],{"emptyLinePlaceholder":27},[101,59532,59533],{"class":103,"line":16838},[101,59534,59535],{"class":111},"    .slider-indicator li.active {\n",[101,59537,59538],{"class":103,"line":16843},[101,59539,59540],{"class":111},"      width: 12px;\n",[101,59542,59543],{"class":103,"line":16857},[101,59544,59545],{"class":111},"      height: 12px;\n",[101,59547,59548],{"class":103,"line":16869},[101,59549,59550],{"class":111},"      opacity: 1;\n",[101,59552,59553],{"class":103,"line":16874},[101,59554,2174],{"class":111},[101,59556,59557,59559,59561],{"class":103,"line":16887},[101,59558,52406],{"class":111},[101,59560,5114],{"class":51289},[101,59562,51296],{"class":111},[101,59564,59565,59567,59569],{"class":103,"line":16892},[101,59566,51774],{"class":111},[101,59568,51323],{"class":51289},[101,59570,51296],{"class":111},[101,59572,59573],{"class":103,"line":16897},[101,59574,2387],{"emptyLinePlaceholder":27},[101,59576,59577,59579,59581],{"class":103,"line":16902},[101,59578,1021],{"class":111},[101,59580,51789],{"class":51289},[101,59582,51296],{"class":111},[101,59584,59585,59587,59589,59591,59593,59596],{"class":103,"line":16915},[101,59586,52133],{"class":111},[101,59588,51600],{"class":51289},[101,59590,53475],{"class":1950},[101,59592,157],{"class":111},[101,59594,59595],{"class":216},"\"slider\"",[101,59597,51296],{"class":111},[101,59599,59600,59602,59604,59606,59608,59610],{"class":103,"line":16920},[101,59601,51330],{"class":111},[101,59603,51600],{"class":51289},[101,59605,53475],{"class":1950},[101,59607,157],{"class":111},[101,59609,55216],{"class":216},[101,59611,51296],{"class":111},[101,59613,59614,59616,59618,59620,59622,59625,59627,59629,59631],{"class":103,"line":32622},[101,59615,55223],{"class":111},[101,59617,1449],{"class":51289},[101,59619,55228],{"class":1950},[101,59621,157],{"class":111},[101,59623,59624],{"class":216},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[101,59626,55236],{"class":1950},[101,59628,157],{"class":111},[101,59630,7640],{"class":216},[101,59632,59116],{"class":111},[101,59634,59635,59637,59639],{"class":103,"line":32628},[101,59636,51765],{"class":111},[101,59638,51600],{"class":51289},[101,59640,51296],{"class":111},[101,59642,59643,59645,59647,59649,59651,59653],{"class":103,"line":32634},[101,59644,51330],{"class":111},[101,59646,51600],{"class":51289},[101,59648,53475],{"class":1950},[101,59650,157],{"class":111},[101,59652,55263],{"class":216},[101,59654,51296],{"class":111},[101,59656,59657,59659,59661,59664,59666],{"class":103,"line":32640},[101,59658,55223],{"class":111},[101,59660,10],{"class":51289},[101,59662,59663],{"class":111},">对人类来说会不会太超前了？\u003C\u002F",[101,59665,10],{"class":51289},[101,59667,51296],{"class":111},[101,59669,59670,59672,59674,59676,59678,59681],{"class":103,"line":32646},[101,59671,55223],{"class":111},[101,59673,1118],{"class":51289},[101,59675,53475],{"class":1950},[101,59677,157],{"class":111},[101,59679,59680],{"class":216},"\"slider-indicator\"",[101,59682,51296],{"class":111},[101,59684,59685,59687,59689,59691,59693,59696,59698,59700],{"class":103,"line":32657},[101,59686,55291],{"class":111},[101,59688,58],{"class":51289},[101,59690,53475],{"class":1950},[101,59692,157],{"class":111},[101,59694,59695],{"class":216},"\"active\"",[101,59697,55303],{"class":111},[101,59699,58],{"class":51289},[101,59701,51296],{"class":111},[101,59703,59704,59706,59708,59710,59712],{"class":103,"line":32663},[101,59705,55291],{"class":111},[101,59707,58],{"class":51289},[101,59709,55303],{"class":111},[101,59711,58],{"class":51289},[101,59713,51296],{"class":111},[101,59715,59716,59718,59720,59722,59724],{"class":103,"line":32683},[101,59717,55291],{"class":111},[101,59719,58],{"class":51289},[101,59721,55303],{"class":111},[101,59723,58],{"class":51289},[101,59725,51296],{"class":111},[101,59727,59728,59730,59732,59734,59736],{"class":103,"line":32689},[101,59729,55291],{"class":111},[101,59731,58],{"class":51289},[101,59733,55303],{"class":111},[101,59735,58],{"class":51289},[101,59737,51296],{"class":111},[101,59739,59740,59742,59744,59746,59748],{"class":103,"line":32700},[101,59741,55291],{"class":111},[101,59743,58],{"class":51289},[101,59745,55303],{"class":111},[101,59747,58],{"class":51289},[101,59749,51296],{"class":111},[101,59751,59752,59754,59756,59758,59760],{"class":103,"line":32706},[101,59753,55291],{"class":111},[101,59755,58],{"class":51289},[101,59757,55303],{"class":111},[101,59759,58],{"class":51289},[101,59761,51296],{"class":111},[101,59763,59764,59766,59768,59770,59772],{"class":103,"line":32712},[101,59765,55291],{"class":111},[101,59767,58],{"class":51289},[101,59769,55303],{"class":111},[101,59771,58],{"class":51289},[101,59773,51296],{"class":111},[101,59775,59776,59778,59780,59782,59784],{"class":103,"line":32718},[101,59777,55291],{"class":111},[101,59779,58],{"class":51289},[101,59781,55303],{"class":111},[101,59783,58],{"class":51289},[101,59785,51296],{"class":111},[101,59787,59788,59790,59792],{"class":103,"line":32724},[101,59789,55396],{"class":111},[101,59791,1118],{"class":51289},[101,59793,51296],{"class":111},[101,59795,59796,59798,59800,59802,59804,59807],{"class":103,"line":32730},[101,59797,55223],{"class":111},[101,59799,51600],{"class":51289},[101,59801,53475],{"class":1950},[101,59803,157],{"class":111},[101,59805,59806],{"class":216},"\"toggle\"",[101,59808,51296],{"class":111},[101,59810,59811,59813,59815,59817,59819,59822,59824,59827,59829,59831],{"class":103,"line":32736},[101,59812,55291],{"class":111},[101,59814,53876],{"class":51289},[101,59816,53475],{"class":1950},[101,59818,157],{"class":111},[101,59820,59821],{"class":216},"\"prev\"",[101,59823,1071],{"class":111},[101,59825,59826],{"class":160},"&lt;",[101,59828,51774],{"class":111},[101,59830,53876],{"class":51289},[101,59832,51296],{"class":111},[101,59834,59835,59837,59839,59841,59843,59846,59848,59851,59853,59855],{"class":103,"line":32742},[101,59836,55291],{"class":111},[101,59838,53876],{"class":51289},[101,59840,53475],{"class":1950},[101,59842,157],{"class":111},[101,59844,59845],{"class":216},"\"next\"",[101,59847,1071],{"class":111},[101,59849,59850],{"class":160},"&gt;",[101,59852,51774],{"class":111},[101,59854,53876],{"class":51289},[101,59856,51296],{"class":111},[101,59858,59859,59861,59863],{"class":103,"line":32762},[101,59860,55396],{"class":111},[101,59862,51600],{"class":51289},[101,59864,51296],{"class":111},[101,59866,59867,59869,59871],{"class":103,"line":32768},[101,59868,51765],{"class":111},[101,59870,51600],{"class":51289},[101,59872,51296],{"class":111},[101,59874,59875,59877,59879],{"class":103,"line":32784},[101,59876,52406],{"class":111},[101,59878,51600],{"class":51289},[101,59880,51296],{"class":111},[101,59882,59883,59885,59887],{"class":103,"line":32790},[101,59884,52133],{"class":111},[101,59886,51802],{"class":51289},[101,59888,51296],{"class":111},[101,59890,59891],{"class":103,"line":32804},[101,59892,59893],{"class":111},"    \u002F\u002F 1. 初始数据\n",[101,59895,59896],{"class":103,"line":32810},[101,59897,59898],{"class":111},"    const data = [\n",[101,59900,59901],{"class":103,"line":32825},[101,59902,59903],{"class":111},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[101,59905,59906],{"class":103,"line":32831},[101,59907,59908],{"class":111},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[101,59910,59911],{"class":103,"line":32840},[101,59912,59913],{"class":111},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[101,59915,59916],{"class":103,"line":32846},[101,59917,59918],{"class":111},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[101,59920,59921],{"class":103,"line":32855},[101,59922,59923],{"class":111},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[101,59925,59926],{"class":103,"line":32861},[101,59927,59928],{"class":111},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[101,59930,59931],{"class":103,"line":32867},[101,59932,59933],{"class":111},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[101,59935,59936],{"class":103,"line":32876},[101,59937,59938],{"class":111},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[101,59940,59941],{"class":103,"line":32882},[101,59942,53098],{"class":111},[101,59944,59945],{"class":103,"line":32893},[101,59946,59947],{"class":111},"    \u002F\u002F 获取元素\n",[101,59949,59950],{"class":103,"line":32899},[101,59951,59952],{"class":111},"    const img = document.querySelector('.slider-wrapper img')\n",[101,59954,59955],{"class":103,"line":32918},[101,59956,59957],{"class":111},"    const p = document.querySelector('.slider-footer p')\n",[101,59959,59960],{"class":103,"line":32924},[101,59961,59962],{"class":111},"    const footer = document.querySelector('.slider-footer')\n",[101,59964,59965],{"class":103,"line":32935},[101,59966,59967],{"class":111},"    \u002F\u002F 1. 右按钮业务\n",[101,59969,59970],{"class":103,"line":32941},[101,59971,59972],{"class":111},"    \u002F\u002F 1.1 获取右侧按钮 \n",[101,59974,59975],{"class":103,"line":32961},[101,59976,59977],{"class":111},"    const next = document.querySelector('.next')\n",[101,59979,59980],{"class":103,"line":32977},[101,59981,59982],{"class":111},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[101,59984,59985],{"class":103,"line":32983},[101,59986,59987],{"class":111},"    \u002F\u002F 1.2 注册点击事件\n",[101,59989,59990],{"class":103,"line":32997},[101,59991,2387],{"emptyLinePlaceholder":27},[101,59993,59994],{"class":103,"line":33003},[101,59995,59996],{"class":111},"    next.addEventListener('click', function () {\n",[101,59998,59999],{"class":103,"line":33009},[101,60000,60001],{"class":111},"      \u002F\u002F console.log(11)\n",[101,60003,60004],{"class":103,"line":33020},[101,60005,60006],{"class":111},"      i++\n",[101,60008,60009],{"class":103,"line":33026},[101,60010,60011],{"class":111},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[101,60013,60014],{"class":103,"line":33032},[101,60015,60016],{"class":111},"      \u002F\u002F if (i >= 8) {\n",[101,60018,60019],{"class":103,"line":33042},[101,60020,60021],{"class":111},"      \u002F\u002F   i = 0\n",[101,60023,60024],{"class":103,"line":33048},[101,60025,60026],{"class":111},"      \u002F\u002F }\n",[101,60028,60029],{"class":103,"line":33059},[101,60030,60031],{"class":111},"      i = i >= data.length ? 0 : i\n",[101,60033,60034],{"class":103,"line":33065},[101,60035,60036],{"class":111},"      \u002F\u002F 1.3 得到对应的对象\n",[101,60038,60039],{"class":103,"line":33075},[101,60040,60041],{"class":111},"      \u002F\u002F console.log(data[i])\n",[101,60043,60044],{"class":103,"line":33080},[101,60045,60046],{"class":111},"      \u002F\u002F 调用函数\n",[101,60048,60049],{"class":103,"line":33086},[101,60050,60051],{"class":111},"      toggle()\n",[101,60053,60054],{"class":103,"line":33135},[101,60055,33450],{"class":111},[101,60057,60058],{"class":103,"line":33182},[101,60059,2387],{"emptyLinePlaceholder":27},[101,60061,60062],{"class":103,"line":33187},[101,60063,60064],{"class":111},"    \u002F\u002F 2. 左侧按钮业务\n",[101,60066,60067],{"class":103,"line":33193},[101,60068,60069],{"class":111},"    \u002F\u002F 2.1 获取左侧按钮 \n",[101,60071,60072],{"class":103,"line":33212},[101,60073,60074],{"class":111},"    const prev = document.querySelector('.prev')\n",[101,60076,60077],{"class":103,"line":33218},[101,60078,59987],{"class":111},[101,60080,60081],{"class":103,"line":33238},[101,60082,60083],{"class":111},"    prev.addEventListener('click', function () {\n",[101,60085,60086],{"class":103,"line":33244},[101,60087,60088],{"class":111},"      i--\n",[101,60090,60091],{"class":103,"line":33250},[101,60092,60093],{"class":111},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[101,60095,60096],{"class":103,"line":33260},[101,60097,60098],{"class":111},"      \u002F\u002F if (i \u003C 0) {\n",[101,60100,60101],{"class":103,"line":33265},[101,60102,60103],{"class":111},"      \u002F\u002F   i = 7\n",[101,60105,60106],{"class":103,"line":33271},[101,60107,60026],{"class":111},[101,60109,60110],{"class":103,"line":33287},[101,60111,60112],{"class":111},"      i = i \u003C 0 ? data.length - 1 : i\n",[101,60114,60115],{"class":103,"line":33332},[101,60116,60036],{"class":111},[101,60118,60119],{"class":103,"line":33338},[101,60120,60041],{"class":111},[101,60122,60123],{"class":103,"line":33344},[101,60124,60046],{"class":111},[101,60126,60127],{"class":103,"line":33350},[101,60128,60051],{"class":111},[101,60130,60131],{"class":103,"line":33361},[101,60132,33450],{"class":111},[101,60134,60135],{"class":103,"line":33367},[101,60136,2387],{"emptyLinePlaceholder":27},[101,60138,60139],{"class":103,"line":33373},[101,60140,60141],{"class":111},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[101,60143,60144],{"class":103,"line":33379},[101,60145,60146],{"class":111},"    function toggle() {\n",[101,60148,60149],{"class":103,"line":33397},[101,60150,60151],{"class":111},"      \u002F\u002F 1.4 渲染对应的数据\n",[101,60153,60154],{"class":103,"line":33411},[101,60155,60156],{"class":111},"      img.src = data[i].url\n",[101,60158,60159],{"class":103,"line":33420},[101,60160,60161],{"class":111},"      p.innerHTML = data[i].title\n",[101,60163,60164],{"class":103,"line":33429},[101,60165,60166],{"class":111},"      footer.style.backgroundColor = data[i].color\n",[101,60168,60169],{"class":103,"line":33438},[101,60170,60171],{"class":111},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[101,60173,60174],{"class":103,"line":33447},[101,60175,60176],{"class":111},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[101,60178,60179],{"class":103,"line":33453},[101,60180,60181],{"class":111},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[101,60183,60184],{"class":103,"line":33459},[101,60185,2174],{"class":111},[101,60187,60188],{"class":103,"line":33467},[101,60189,2387],{"emptyLinePlaceholder":27},[101,60191,60192],{"class":103,"line":33472},[101,60193,60194],{"class":111},"    \u002F\u002F 3. 自动播放模块\n",[101,60196,60197],{"class":103,"line":33478},[101,60198,60199],{"class":111},"    let timerId = setInterval(function () {\n",[101,60201,60202],{"class":103,"line":33489},[101,60203,60204],{"class":111},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[101,60206,60207],{"class":103,"line":33495},[101,60208,60209],{"class":111},"      next.click()\n",[101,60211,60212],{"class":103,"line":33515},[101,60213,60214],{"class":111},"    }, 1000)\n",[101,60216,60217],{"class":103,"line":33521},[101,60218,2387],{"emptyLinePlaceholder":27},[101,60220,60221],{"class":103,"line":33527},[101,60222,60223],{"class":111},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[101,60225,60226],{"class":103,"line":33533},[101,60227,60228],{"class":111},"    const slider = document.querySelector('.slider')\n",[101,60230,60231],{"class":103,"line":33550},[101,60232,60233],{"class":111},"    \u002F\u002F 注册事件\n",[101,60235,60236],{"class":103,"line":33556},[101,60237,60238],{"class":111},"    slider.addEventListener('mouseenter', function () {\n",[101,60240,60241],{"class":103,"line":33562},[101,60242,60243],{"class":111},"      \u002F\u002F 停止定时器\n",[101,60245,60246],{"class":103,"line":33568},[101,60247,60248],{"class":111},"      clearInterval(timerId)\n",[101,60250,60251],{"class":103,"line":33574},[101,60252,33450],{"class":111},[101,60254,60255],{"class":103,"line":33580},[101,60256,2387],{"emptyLinePlaceholder":27},[101,60258,60259],{"class":103,"line":33607},[101,60260,60261],{"class":111},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[101,60263,60264],{"class":103,"line":33631},[101,60265,60233],{"class":111},[101,60267,60268],{"class":103,"line":33637},[101,60269,60270],{"class":111},"    slider.addEventListener('mouseleave', function () {\n",[101,60272,60273],{"class":103,"line":33643},[101,60274,60243],{"class":111},[101,60276,60277],{"class":103,"line":33649},[101,60278,60279],{"class":111},"      if (timerId) clearInterval(timerId)\n",[101,60281,60282],{"class":103,"line":33660},[101,60283,60284],{"class":111},"      \u002F\u002F 开启定时器\n",[101,60286,60287],{"class":103,"line":33671},[101,60288,60289],{"class":111},"      timerId = setInterval(function () {\n",[101,60291,60292],{"class":103,"line":33677},[101,60293,60294],{"class":111},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[101,60296,60297],{"class":103,"line":33694},[101,60298,60299],{"class":111},"        next.click()\n",[101,60301,60302],{"class":103,"line":33717},[101,60303,60304],{"class":111},"      }, 1000)\n",[101,60306,60307],{"class":103,"line":33740},[101,60308,33450],{"class":111},[101,60310,60311,60313,60315],{"class":103,"line":33746},[101,60312,52406],{"class":111},[101,60314,51802],{"class":51289},[101,60316,51296],{"class":111},[101,60318,60319,60321,60323],{"class":103,"line":33751},[101,60320,51774],{"class":111},[101,60322,51789],{"class":51289},[101,60324,51296],{"class":111},[101,60326,60327],{"class":103,"line":33760},[101,60328,2387],{"emptyLinePlaceholder":27},[101,60330,60331,60333,60335],{"class":103,"line":33770},[101,60332,51774],{"class":111},[101,60334,50624],{"class":51289},[101,60336,51296],{"class":111},[21986,60338,60340],{"id":60339},"_3252-焦点事件","3.2.5.2 焦点事件",[10,60342,60343],{},"小米搜索框案例：",[92,60345,60347],{"className":50622,"code":60346,"language":50624,"meta":20,"style":20},"\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",[98,60348,60349,60359,60373,60377,60385,60399,60419,60439,60451,60459,60465,60475,60485,60497,60501,60505,60512,60516,60527,60531,60535,60542,60553,60566,60580,60584,60588,60597,60609,60621,60635,60648,60661,60679,60690,60694,60698,60707,60724,60728,60732,60739,60749,60759,60770,60783,60795,60811,60822,60834,60838,60842,60850,60861,60878,60890,60902,60913,60917,60921,60932,60943,60947,60955,60959,60967,60971,60979,60994,61017,61032,61063,61090,61117,61144,61171,61198,61225,61234,61242,61250,61255,61275,61295,61300,61305,61323,61328,61338,61343,61357,61362,61367,61384,61393,61405,61409,61417,61425,61429],{"__ignoreMap":20},[101,60350,60351,60353,60355,60357],{"class":103,"line":104},[101,60352,51286],{"class":111},[101,60354,51290],{"class":51289},[101,60356,51293],{"class":1950},[101,60358,51296],{"class":111},[101,60360,60361,60363,60365,60367,60369,60371],{"class":103,"line":21},[101,60362,1021],{"class":111},[101,60364,50624],{"class":51289},[101,60366,51305],{"class":1950},[101,60368,157],{"class":111},[101,60370,51310],{"class":216},[101,60372,51296],{"class":111},[101,60374,60375],{"class":103,"line":1166},[101,60376,2387],{"emptyLinePlaceholder":27},[101,60378,60379,60381,60383],{"class":103,"line":1181},[101,60380,1021],{"class":111},[101,60382,51323],{"class":51289},[101,60384,51296],{"class":111},[101,60386,60387,60389,60391,60393,60395,60397],{"class":103,"line":1187},[101,60388,51330],{"class":111},[101,60390,51333],{"class":51289},[101,60392,51336],{"class":1950},[101,60394,157],{"class":111},[101,60396,51341],{"class":216},[101,60398,51296],{"class":111},[101,60400,60401,60403,60405,60407,60409,60411,60413,60415,60417],{"class":103,"line":1201},[101,60402,51330],{"class":111},[101,60404,51333],{"class":51289},[101,60406,51352],{"class":1950},[101,60408,157],{"class":111},[101,60410,51357],{"class":216},[101,60412,51360],{"class":1950},[101,60414,157],{"class":111},[101,60416,51365],{"class":216},[101,60418,51296],{"class":111},[101,60420,60421,60423,60425,60427,60429,60431,60433,60435,60437],{"class":103,"line":1207},[101,60422,51330],{"class":111},[101,60424,51333],{"class":51289},[101,60426,14908],{"class":1950},[101,60428,157],{"class":111},[101,60430,51380],{"class":216},[101,60432,51360],{"class":1950},[101,60434,157],{"class":111},[101,60436,51387],{"class":216},[101,60438,51296],{"class":111},[101,60440,60441,60443,60445,60447,60449],{"class":103,"line":1298},[101,60442,51330],{"class":111},[101,60444,51396],{"class":51289},[101,60446,51399],{"class":111},[101,60448,51396],{"class":51289},[101,60450,51296],{"class":111},[101,60452,60453,60455,60457],{"class":103,"line":1304},[101,60454,51330],{"class":111},[101,60456,5114],{"class":51289},[101,60458,51296],{"class":111},[101,60460,60461,60463],{"class":103,"line":1316},[101,60462,51416],{"class":51289},[101,60464,15560],{"class":111},[101,60466,60467,60469,60471,60473],{"class":103,"line":1599},[101,60468,51423],{"class":160},[101,60470,51426],{"class":111},[101,60472,303],{"class":160},[101,60474,1277],{"class":111},[101,60476,60477,60479,60481,60483],{"class":103,"line":1604},[101,60478,51435],{"class":160},[101,60480,51426],{"class":111},[101,60482,303],{"class":160},[101,60484,1277],{"class":111},[101,60486,60487,60490,60492,60495],{"class":103,"line":1610},[101,60488,60489],{"class":160},"            box-sizing",[101,60491,51426],{"class":111},[101,60493,60494],{"class":160},"border-box",[101,60496,1277],{"class":111},[101,60498,60499],{"class":103,"line":1615},[101,60500,2516],{"class":111},[101,60502,60503],{"class":103,"line":1629},[101,60504,2387],{"emptyLinePlaceholder":27},[101,60506,60507,60510],{"class":103,"line":1634},[101,60508,60509],{"class":51289},"        ul",[101,60511,15560],{"class":111},[101,60513,60514],{"class":103,"line":1640},[101,60515,2387],{"emptyLinePlaceholder":27},[101,60517,60518,60521,60523,60525],{"class":103,"line":1661},[101,60519,60520],{"class":160},"            list-style",[101,60522,51426],{"class":111},[101,60524,54726],{"class":160},[101,60526,1277],{"class":111},[101,60528,60529],{"class":103,"line":1666},[101,60530,2516],{"class":111},[101,60532,60533],{"class":103,"line":1680},[101,60534,2387],{"emptyLinePlaceholder":27},[101,60536,60537,60540],{"class":103,"line":1685},[101,60538,60539],{"class":1950},"        .mi",[101,60541,15560],{"class":111},[101,60543,60544,60547,60549,60551],{"class":103,"line":1714},[101,60545,60546],{"class":160},"            position",[101,60548,51426],{"class":111},[101,60550,54753],{"class":160},[101,60552,1277],{"class":111},[101,60554,60555,60557,60559,60562,60564],{"class":103,"line":1719},[101,60556,51473],{"class":160},[101,60558,51426],{"class":111},[101,60560,60561],{"class":160},"223",[101,60563,51481],{"class":107},[101,60565,1277],{"class":111},[101,60567,60568,60570,60572,60574,60576,60578],{"class":103,"line":1736},[101,60569,51423],{"class":160},[101,60571,51426],{"class":111},[101,60573,422],{"class":160},[101,60575,51481],{"class":107},[101,60577,51545],{"class":160},[101,60579,1277],{"class":111},[101,60581,60582],{"class":103,"line":1741},[101,60583,2516],{"class":111},[101,60585,60586],{"class":103,"line":1746},[101,60587,2387],{"emptyLinePlaceholder":27},[101,60589,60590,60592,60595],{"class":103,"line":1751},[101,60591,60539],{"class":1950},[101,60593,60594],{"class":51289}," input",[101,60596,15560],{"class":111},[101,60598,60599,60601,60603,60605,60607],{"class":103,"line":1765},[101,60600,51473],{"class":160},[101,60602,51426],{"class":111},[101,60604,60561],{"class":160},[101,60606,51481],{"class":107},[101,60608,1277],{"class":111},[101,60610,60611,60613,60615,60617,60619],{"class":103,"line":1770},[101,60612,51488],{"class":160},[101,60614,51426],{"class":111},[101,60616,718],{"class":160},[101,60618,51481],{"class":107},[101,60620,1277],{"class":111},[101,60622,60623,60625,60627,60629,60631,60633],{"class":103,"line":2564},[101,60624,51435],{"class":160},[101,60626,51426],{"class":111},[101,60628,303],{"class":160},[101,60630,2025],{"class":160},[101,60632,51481],{"class":107},[101,60634,1277],{"class":111},[101,60636,60637,60640,60642,60644,60646],{"class":103,"line":2578},[101,60638,60639],{"class":160},"            font-size",[101,60641,51426],{"class":111},[101,60643,660],{"class":160},[101,60645,51481],{"class":107},[101,60647,1277],{"class":111},[101,60649,60650,60653,60655,60657,60659],{"class":103,"line":2586},[101,60651,60652],{"class":160},"            line-height",[101,60654,51426],{"class":111},[101,60656,718],{"class":160},[101,60658,51481],{"class":107},[101,60660,1277],{"class":111},[101,60662,60663,60666,60668,60670,60672,60674,60677],{"class":103,"line":2591},[101,60664,60665],{"class":160},"            border",[101,60667,51426],{"class":111},[101,60669,329],{"class":160},[101,60671,51481],{"class":107},[101,60673,51510],{"class":160},[101,60675,60676],{"class":160}," #e0e0e0",[101,60678,1277],{"class":111},[101,60680,60681,60684,60686,60688],{"class":103,"line":2597},[101,60682,60683],{"class":160},"            outline",[101,60685,51426],{"class":111},[101,60687,54726],{"class":160},[101,60689,1277],{"class":111},[101,60691,60692],{"class":103,"line":2603},[101,60693,2516],{"class":111},[101,60695,60696],{"class":103,"line":2608},[101,60697,2387],{"emptyLinePlaceholder":27},[101,60699,60700,60702,60705],{"class":103,"line":7936},[101,60701,60539],{"class":1950},[101,60703,60704],{"class":1950}," .search",[101,60706,15560],{"class":111},[101,60708,60709,60711,60713,60715,60717,60719,60722],{"class":103,"line":7960},[101,60710,60665],{"class":160},[101,60712,51426],{"class":111},[101,60714,329],{"class":160},[101,60716,51481],{"class":107},[101,60718,51510],{"class":160},[101,60720,60721],{"class":160}," #ff6700",[101,60723,1277],{"class":111},[101,60725,60726],{"class":103,"line":7965},[101,60727,2516],{"class":111},[101,60729,60730],{"class":103,"line":7971},[101,60731,2387],{"emptyLinePlaceholder":27},[101,60733,60734,60737],{"class":103,"line":7998},[101,60735,60736],{"class":1950},"        .result-list",[101,60738,15560],{"class":111},[101,60740,60741,60743,60745,60747],{"class":103,"line":8003},[101,60742,51461],{"class":160},[101,60744,51426],{"class":111},[101,60746,54726],{"class":160},[101,60748,1277],{"class":111},[101,60750,60751,60753,60755,60757],{"class":103,"line":8009},[101,60752,60546],{"class":160},[101,60754,51426],{"class":111},[101,60756,54820],{"class":160},[101,60758,1277],{"class":111},[101,60760,60761,60764,60766,60768],{"class":103,"line":8021},[101,60762,60763],{"class":160},"            left",[101,60765,51426],{"class":111},[101,60767,303],{"class":160},[101,60769,1277],{"class":111},[101,60771,60772,60775,60777,60779,60781],{"class":103,"line":8033},[101,60773,60774],{"class":160},"            top",[101,60776,51426],{"class":111},[101,60778,718],{"class":160},[101,60780,51481],{"class":107},[101,60782,1277],{"class":111},[101,60784,60785,60787,60789,60791,60793],{"class":103,"line":8045},[101,60786,51473],{"class":160},[101,60788,51426],{"class":111},[101,60790,60561],{"class":160},[101,60792,51481],{"class":107},[101,60794,1277],{"class":111},[101,60796,60797,60799,60801,60803,60805,60807,60809],{"class":103,"line":9704},[101,60798,60665],{"class":160},[101,60800,51426],{"class":111},[101,60802,329],{"class":160},[101,60804,51481],{"class":107},[101,60806,51510],{"class":160},[101,60808,60721],{"class":160},[101,60810,1277],{"class":111},[101,60812,60813,60816,60818,60820],{"class":103,"line":9729},[101,60814,60815],{"class":160},"            border-top",[101,60817,51426],{"class":111},[101,60819,303],{"class":160},[101,60821,1277],{"class":111},[101,60823,60824,60827,60829,60832],{"class":103,"line":9752},[101,60825,60826],{"class":160},"            background",[101,60828,51426],{"class":111},[101,60830,60831],{"class":160},"#fff",[101,60833,1277],{"class":111},[101,60835,60836],{"class":103,"line":9776},[101,60837,2516],{"class":111},[101,60839,60840],{"class":103,"line":9781},[101,60841,2387],{"emptyLinePlaceholder":27},[101,60843,60844,60846,60848],{"class":103,"line":9786},[101,60845,60736],{"class":1950},[101,60847,1385],{"class":51289},[101,60849,15560],{"class":111},[101,60851,60852,60854,60856,60859],{"class":103,"line":9791},[101,60853,51461],{"class":160},[101,60855,51426],{"class":111},[101,60857,60858],{"class":160},"block",[101,60860,1277],{"class":111},[101,60862,60863,60865,60867,60869,60871,60874,60876],{"class":103,"line":9800},[101,60864,51435],{"class":160},[101,60866,51426],{"class":111},[101,60868,455],{"class":160},[101,60870,51481],{"class":107},[101,60872,60873],{"class":160}," 15",[101,60875,51481],{"class":107},[101,60877,1277],{"class":111},[101,60879,60880,60882,60884,60886,60888],{"class":103,"line":9805},[101,60881,60639],{"class":160},[101,60883,51426],{"class":111},[101,60885,609],{"class":160},[101,60887,51481],{"class":107},[101,60889,1277],{"class":111},[101,60891,60892,60895,60897,60900],{"class":103,"line":9811},[101,60893,60894],{"class":160},"            color",[101,60896,51426],{"class":111},[101,60898,60899],{"class":160},"#424242",[101,60901,1277],{"class":111},[101,60903,60904,60907,60909,60911],{"class":103,"line":9832},[101,60905,60906],{"class":160},"            text-decoration",[101,60908,51426],{"class":111},[101,60910,54726],{"class":160},[101,60912,1277],{"class":111},[101,60914,60915],{"class":103,"line":9838},[101,60916,2516],{"class":111},[101,60918,60919],{"class":103,"line":9852},[101,60920,2387],{"emptyLinePlaceholder":27},[101,60922,60923,60925,60927,60930],{"class":103,"line":9858},[101,60924,60736],{"class":1950},[101,60926,1385],{"class":51289},[101,60928,60929],{"class":1950},":hover",[101,60931,15560],{"class":111},[101,60933,60934,60936,60938,60941],{"class":103,"line":9885},[101,60935,51629],{"class":160},[101,60937,51426],{"class":111},[101,60939,60940],{"class":160},"#eee",[101,60942,1277],{"class":111},[101,60944,60945],{"class":103,"line":9894},[101,60946,2516],{"class":111},[101,60948,60949,60951,60953],{"class":103,"line":9900},[101,60950,51765],{"class":111},[101,60952,5114],{"class":51289},[101,60954,51296],{"class":111},[101,60956,60957],{"class":103,"line":9908},[101,60958,2387],{"emptyLinePlaceholder":27},[101,60960,60961,60963,60965],{"class":103,"line":9913},[101,60962,51774],{"class":111},[101,60964,51323],{"class":51289},[101,60966,51296],{"class":111},[101,60968,60969],{"class":103,"line":16592},[101,60970,2387],{"emptyLinePlaceholder":27},[101,60972,60973,60975,60977],{"class":103,"line":16598},[101,60974,1021],{"class":111},[101,60976,51789],{"class":51289},[101,60978,51296],{"class":111},[101,60980,60981,60983,60985,60987,60989,60992],{"class":103,"line":16621},[101,60982,51330],{"class":111},[101,60984,51600],{"class":51289},[101,60986,53475],{"class":1950},[101,60988,157],{"class":111},[101,60990,60991],{"class":216},"\"mi\"",[101,60993,51296],{"class":111},[101,60995,60996,60998,61000,61002,61004,61007,61010,61012,61015],{"class":103,"line":16627},[101,60997,55291],{"class":111},[101,60999,53810],{"class":51289},[101,61001,53813],{"class":1950},[101,61003,157],{"class":111},[101,61005,61006],{"class":216},"\"search\"",[101,61008,61009],{"class":1950}," placeholder",[101,61011,157],{"class":111},[101,61013,61014],{"class":216},"\"小米笔记本\"",[101,61016,51296],{"class":111},[101,61018,61019,61021,61023,61025,61027,61030],{"class":103,"line":16650},[101,61020,55291],{"class":111},[101,61022,1118],{"class":51289},[101,61024,53475],{"class":1950},[101,61026,157],{"class":111},[101,61028,61029],{"class":216},"\"result-list\"",[101,61031,51296],{"class":111},[101,61033,61034,61037,61039,61042,61044,61047,61049,61052,61055,61057,61059,61061],{"class":103,"line":16664},[101,61035,61036],{"class":111},"            \u003C",[101,61038,58],{"class":51289},[101,61040,61041],{"class":111},">\u003C",[101,61043,14],{"class":51289},[101,61045,61046],{"class":1950}," href",[101,61048,157],{"class":111},[101,61050,61051],{"class":216},"\"#\"",[101,61053,61054],{"class":111},">全部商品\u003C\u002F",[101,61056,14],{"class":51289},[101,61058,55303],{"class":111},[101,61060,58],{"class":51289},[101,61062,51296],{"class":111},[101,61064,61065,61067,61069,61071,61073,61075,61077,61079,61082,61084,61086,61088],{"class":103,"line":16684},[101,61066,61036],{"class":111},[101,61068,58],{"class":51289},[101,61070,61041],{"class":111},[101,61072,14],{"class":51289},[101,61074,61046],{"class":1950},[101,61076,157],{"class":111},[101,61078,61051],{"class":216},[101,61080,61081],{"class":111},">小米11\u003C\u002F",[101,61083,14],{"class":51289},[101,61085,55303],{"class":111},[101,61087,58],{"class":51289},[101,61089,51296],{"class":111},[101,61091,61092,61094,61096,61098,61100,61102,61104,61106,61109,61111,61113,61115],{"class":103,"line":16690},[101,61093,61036],{"class":111},[101,61095,58],{"class":51289},[101,61097,61041],{"class":111},[101,61099,14],{"class":51289},[101,61101,61046],{"class":1950},[101,61103,157],{"class":111},[101,61105,61051],{"class":216},[101,61107,61108],{"class":111},">小米10S\u003C\u002F",[101,61110,14],{"class":51289},[101,61112,55303],{"class":111},[101,61114,58],{"class":51289},[101,61116,51296],{"class":111},[101,61118,61119,61121,61123,61125,61127,61129,61131,61133,61136,61138,61140,61142],{"class":103,"line":16701},[101,61120,61036],{"class":111},[101,61122,58],{"class":51289},[101,61124,61041],{"class":111},[101,61126,14],{"class":51289},[101,61128,61046],{"class":1950},[101,61130,157],{"class":111},[101,61132,61051],{"class":216},[101,61134,61135],{"class":111},">小米笔记本\u003C\u002F",[101,61137,14],{"class":51289},[101,61139,55303],{"class":111},[101,61141,58],{"class":51289},[101,61143,51296],{"class":111},[101,61145,61146,61148,61150,61152,61154,61156,61158,61160,61163,61165,61167,61169],{"class":103,"line":16724},[101,61147,61036],{"class":111},[101,61149,58],{"class":51289},[101,61151,61041],{"class":111},[101,61153,14],{"class":51289},[101,61155,61046],{"class":1950},[101,61157,157],{"class":111},[101,61159,61051],{"class":216},[101,61161,61162],{"class":111},">小米手机\u003C\u002F",[101,61164,14],{"class":51289},[101,61166,55303],{"class":111},[101,61168,58],{"class":51289},[101,61170,51296],{"class":111},[101,61172,61173,61175,61177,61179,61181,61183,61185,61187,61190,61192,61194,61196],{"class":103,"line":16746},[101,61174,61036],{"class":111},[101,61176,58],{"class":51289},[101,61178,61041],{"class":111},[101,61180,14],{"class":51289},[101,61182,61046],{"class":1950},[101,61184,157],{"class":111},[101,61186,61051],{"class":216},[101,61188,61189],{"class":111},">黑鲨4\u003C\u002F",[101,61191,14],{"class":51289},[101,61193,55303],{"class":111},[101,61195,58],{"class":51289},[101,61197,51296],{"class":111},[101,61199,61200,61202,61204,61206,61208,61210,61212,61214,61217,61219,61221,61223],{"class":103,"line":16751},[101,61201,61036],{"class":111},[101,61203,58],{"class":51289},[101,61205,61041],{"class":111},[101,61207,14],{"class":51289},[101,61209,61046],{"class":1950},[101,61211,157],{"class":111},[101,61213,61051],{"class":216},[101,61215,61216],{"class":111},">空调\u003C\u002F",[101,61218,14],{"class":51289},[101,61220,55303],{"class":111},[101,61222,58],{"class":51289},[101,61224,51296],{"class":111},[101,61226,61227,61230,61232],{"class":103,"line":16757},[101,61228,61229],{"class":111},"        \u003C\u002F",[101,61231,1118],{"class":51289},[101,61233,51296],{"class":111},[101,61235,61236,61238,61240],{"class":103,"line":16771},[101,61237,51765],{"class":111},[101,61239,51600],{"class":51289},[101,61241,51296],{"class":111},[101,61243,61244,61246,61248],{"class":103,"line":16784},[101,61245,51330],{"class":111},[101,61247,51802],{"class":51289},[101,61249,51296],{"class":111},[101,61251,61252],{"class":103,"line":16789},[101,61253,61254],{"class":170},"        \u002F\u002F 1. 获取元素\n",[101,61256,61257,61260,61262,61264,61266,61268,61270,61273],{"class":103,"line":16803},[101,61258,61259],{"class":107},"        const",[101,61261,60594],{"class":160},[101,61263,13552],{"class":107},[101,61265,54385],{"class":111},[101,61267,54388],{"class":1950},[101,61269,112],{"class":111},[101,61271,61272],{"class":216},"'[type=search]'",[101,61274,118],{"class":111},[101,61276,61277,61279,61282,61284,61286,61288,61290,61293],{"class":103,"line":16808},[101,61278,61259],{"class":107},[101,61280,61281],{"class":160}," ul",[101,61283,13552],{"class":107},[101,61285,54385],{"class":111},[101,61287,54388],{"class":1950},[101,61289,112],{"class":111},[101,61291,61292],{"class":216},"'.result-list'",[101,61294,118],{"class":111},[101,61296,61297],{"class":103,"line":16814},[101,61298,61299],{"class":170},"        \u002F\u002F console.log(input)\n",[101,61301,61302],{"class":103,"line":16819},[101,61303,61304],{"class":170},"        \u002F\u002F 2. 监听事件 获得焦点\n",[101,61306,61307,61310,61312,61314,61317,61319,61321],{"class":103,"line":16833},[101,61308,61309],{"class":111},"        input.",[101,61311,57802],{"class":1950},[101,61313,112],{"class":111},[101,61315,61316],{"class":216},"'focus'",[101,61318,12423],{"class":111},[101,61320,54438],{"class":107},[101,61322,54441],{"class":111},[101,61324,61325],{"class":103,"line":16838},[101,61326,61327],{"class":170},"            \u002F\u002F ul显示\n",[101,61329,61330,61333,61335],{"class":103,"line":16843},[101,61331,61332],{"class":111},"            ul.style.display ",[101,61334,157],{"class":107},[101,61336,61337],{"class":216}," 'block'\n",[101,61339,61340],{"class":103,"line":16857},[101,61341,61342],{"class":170},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[101,61344,61345,61348,61350,61352,61355],{"class":103,"line":16869},[101,61346,61347],{"class":111},"            input.classList.",[101,61349,5322],{"class":1950},[101,61351,112],{"class":111},[101,61353,61354],{"class":216},"'search'",[101,61356,118],{"class":111},[101,61358,61359],{"class":103,"line":16874},[101,61360,61361],{"class":111},"        })\n",[101,61363,61364],{"class":103,"line":16887},[101,61365,61366],{"class":170},"        \u002F\u002F 3. 监听事件 失去焦点\n",[101,61368,61369,61371,61373,61375,61378,61380,61382],{"class":103,"line":16892},[101,61370,61309],{"class":111},[101,61372,57802],{"class":1950},[101,61374,112],{"class":111},[101,61376,61377],{"class":216},"'blur'",[101,61379,12423],{"class":111},[101,61381,54438],{"class":107},[101,61383,54441],{"class":111},[101,61385,61386,61388,61390],{"class":103,"line":16897},[101,61387,61332],{"class":111},[101,61389,157],{"class":107},[101,61391,61392],{"class":216}," 'none'\n",[101,61394,61395,61397,61399,61401,61403],{"class":103,"line":16902},[101,61396,61347],{"class":111},[101,61398,56995],{"class":1950},[101,61400,112],{"class":111},[101,61402,61354],{"class":216},[101,61404,118],{"class":111},[101,61406,61407],{"class":103,"line":16915},[101,61408,61361],{"class":111},[101,61410,61411,61413,61415],{"class":103,"line":16920},[101,61412,51765],{"class":111},[101,61414,51802],{"class":51289},[101,61416,51296],{"class":111},[101,61418,61419,61421,61423],{"class":103,"line":32622},[101,61420,51774],{"class":111},[101,61422,51789],{"class":51289},[101,61424,51296],{"class":111},[101,61426,61427],{"class":103,"line":32628},[101,61428,2387],{"emptyLinePlaceholder":27},[101,61430,61431,61433,61435],{"class":103,"line":32634},[101,61432,51774],{"class":111},[101,61434,50624],{"class":51289},[101,61436,51296],{"class":111},[21986,61438,61440],{"id":61439},"_3253-键盘事件","3.2.5.3 键盘事件",[10,61442,61443],{},"评论字数统计案例",[10,61445,61446],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[10,61448,61449],{},"牢记focus伪类选择器",[51333,61451],{"charSet":61452},"UTF-8",[51333,61454],{"name":61455,"content":61456},"viewport","width=device-width, initial-scale=1.0",[51396,61458,61459],{},"Document",[5114,61461,61462],{},"\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",[53810,61464],{"type":5175},[1118,61466,61467,61470],{},[58,61468,61469],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[58,61471,61472],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[92,61474,61476],{"className":50622,"code":61475,"language":50624,"meta":20,"style":20},"\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",[98,61477,61478,61488,61502,61506,61514,61528,61548,61568,61581,61589,61596,61609,61623,61633,61643,61647,61651,61658,61670,61682,61694,61706,61735,61748,61752,61756,61765,61776,61788,61799,61810,61822,61833,61845,61861,61873,61877,61881,61892,61903,61913,61925,61929,61933,61941,61952,61962,61973,61985,61998,62010,62022,62026,62030,62039,62051,62062,62075,62086,62100,62104,62108,62115,62127,62139,62149,62153,62157,62166,62178,62188,62192,62196,62207,62217,62236,62249,62253,62257,62267,62277,62281,62285,62296,62307,62319,62331,62335,62339,62350,62361,62375,62379,62383,62394,62404,62416,62420,62428,62436,62440,62448,62463,62482,62522,62535,62543,62557,62577,62585,62600,62623,62641,62656,62676,62696,62716,62724,62732,62740,62748,62768,62788,62793,62810,62819,62823,62828,62844,62852,62856,62861,62878,62883,62908,62912,62916,62921,62926,62934,62942,62946],{"__ignoreMap":20},[101,61479,61480,61482,61484,61486],{"class":103,"line":104},[101,61481,51286],{"class":111},[101,61483,51290],{"class":51289},[101,61485,51293],{"class":1950},[101,61487,51296],{"class":111},[101,61489,61490,61492,61494,61496,61498,61500],{"class":103,"line":21},[101,61491,1021],{"class":111},[101,61493,50624],{"class":51289},[101,61495,51305],{"class":1950},[101,61497,157],{"class":111},[101,61499,51310],{"class":216},[101,61501,51296],{"class":111},[101,61503,61504],{"class":103,"line":1166},[101,61505,2387],{"emptyLinePlaceholder":27},[101,61507,61508,61510,61512],{"class":103,"line":1181},[101,61509,1021],{"class":111},[101,61511,51323],{"class":51289},[101,61513,51296],{"class":111},[101,61515,61516,61518,61520,61522,61524,61526],{"class":103,"line":1187},[101,61517,52133],{"class":111},[101,61519,51333],{"class":51289},[101,61521,51336],{"class":1950},[101,61523,157],{"class":111},[101,61525,51341],{"class":216},[101,61527,51296],{"class":111},[101,61529,61530,61532,61534,61536,61538,61540,61542,61544,61546],{"class":103,"line":1201},[101,61531,52133],{"class":111},[101,61533,51333],{"class":51289},[101,61535,51352],{"class":1950},[101,61537,157],{"class":111},[101,61539,51357],{"class":216},[101,61541,51360],{"class":1950},[101,61543,157],{"class":111},[101,61545,51365],{"class":216},[101,61547,51296],{"class":111},[101,61549,61550,61552,61554,61556,61558,61560,61562,61564,61566],{"class":103,"line":1207},[101,61551,52133],{"class":111},[101,61553,51333],{"class":51289},[101,61555,14908],{"class":1950},[101,61557,157],{"class":111},[101,61559,51380],{"class":216},[101,61561,51360],{"class":1950},[101,61563,157],{"class":111},[101,61565,51387],{"class":216},[101,61567,51296],{"class":111},[101,61569,61570,61572,61574,61577,61579],{"class":103,"line":1298},[101,61571,52133],{"class":111},[101,61573,51396],{"class":51289},[101,61575,61576],{"class":111},">评论回车发布\u003C\u002F",[101,61578,51396],{"class":51289},[101,61580,51296],{"class":111},[101,61582,61583,61585,61587],{"class":103,"line":1304},[101,61584,52133],{"class":111},[101,61586,5114],{"class":51289},[101,61588,51296],{"class":111},[101,61590,61591,61594],{"class":103,"line":1316},[101,61592,61593],{"class":1950},"    .wrapper",[101,61595,15560],{"class":111},[101,61597,61598,61601,61603,61605,61607],{"class":103,"line":1599},[101,61599,61600],{"class":160},"      min-width",[101,61602,51426],{"class":111},[101,61604,3974],{"class":160},[101,61606,51481],{"class":107},[101,61608,1277],{"class":111},[101,61610,61611,61614,61616,61619,61621],{"class":103,"line":1604},[101,61612,61613],{"class":160},"      max-width",[101,61615,51426],{"class":111},[101,61617,61618],{"class":160},"800",[101,61620,51481],{"class":107},[101,61622,1277],{"class":111},[101,61624,61625,61627,61629,61631],{"class":103,"line":1610},[101,61626,54998],{"class":160},[101,61628,51426],{"class":111},[101,61630,51466],{"class":160},[101,61632,1277],{"class":111},[101,61634,61635,61637,61639,61641],{"class":103,"line":1615},[101,61636,55009],{"class":160},[101,61638,51426],{"class":111},[101,61640,51569],{"class":160},[101,61642,1277],{"class":111},[101,61644,61645],{"class":103,"line":1629},[101,61646,2174],{"class":111},[101,61648,61649],{"class":103,"line":1634},[101,61650,2387],{"emptyLinePlaceholder":27},[101,61652,61653,61656],{"class":103,"line":1640},[101,61654,61655],{"class":1950},"    .avatar",[101,61657,15560],{"class":111},[101,61659,61660,61662,61664,61666,61668],{"class":103,"line":1661},[101,61661,54760],{"class":160},[101,61663,51426],{"class":111},[101,61665,718],{"class":160},[101,61667,51481],{"class":107},[101,61669,1277],{"class":111},[101,61671,61672,61674,61676,61678,61680],{"class":103,"line":1666},[101,61673,54774],{"class":160},[101,61675,51426],{"class":111},[101,61677,718],{"class":160},[101,61679,51481],{"class":107},[101,61681,1277],{"class":111},[101,61683,61684,61686,61688,61690,61692],{"class":103,"line":1680},[101,61685,55123],{"class":160},[101,61687,51426],{"class":111},[101,61689,767],{"class":160},[101,61691,439],{"class":107},[101,61693,1277],{"class":111},[101,61695,61696,61699,61701,61704],{"class":103,"line":1685},[101,61697,61698],{"class":160},"      overflow",[101,61700,51426],{"class":111},[101,61702,61703],{"class":160},"hidden",[101,61705,1277],{"class":111},[101,61707,61708,61711,61713,61716,61718,61721,61723,61726,61728,61730,61733],{"class":103,"line":1714},[101,61709,61710],{"class":160},"      background",[101,61712,51426],{"class":111},[101,61714,61715],{"class":160},"url",[101,61717,112],{"class":111},[101,61719,61720],{"class":5204},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[101,61722,13702],{"class":111},[101,61724,61725],{"class":160},"no-repeat",[101,61727,17132],{"class":160},[101,61729,24967],{"class":111},[101,61731,61732],{"class":160},"cover",[101,61734,1277],{"class":111},[101,61736,61737,61740,61742,61744,61746],{"class":103,"line":1719},[101,61738,61739],{"class":160},"      margin-right",[101,61741,51426],{"class":111},[101,61743,811],{"class":160},[101,61745,51481],{"class":107},[101,61747,1277],{"class":111},[101,61749,61750],{"class":103,"line":1736},[101,61751,2174],{"class":111},[101,61753,61754],{"class":103,"line":1741},[101,61755,2387],{"emptyLinePlaceholder":27},[101,61757,61758,61760,61763],{"class":103,"line":1746},[101,61759,61593],{"class":1950},[101,61761,61762],{"class":51289}," textarea",[101,61764,15560],{"class":111},[101,61766,61767,61770,61772,61774],{"class":103,"line":1751},[101,61768,61769],{"class":160},"      outline",[101,61771,51426],{"class":111},[101,61773,54726],{"class":160},[101,61775,1277],{"class":111},[101,61777,61778,61781,61783,61786],{"class":103,"line":1765},[101,61779,61780],{"class":160},"      border-color",[101,61782,51426],{"class":111},[101,61784,61785],{"class":160},"transparent",[101,61787,1277],{"class":111},[101,61789,61790,61793,61795,61797],{"class":103,"line":1770},[101,61791,61792],{"class":160},"      resize",[101,61794,51426],{"class":111},[101,61796,54726],{"class":160},[101,61798,1277],{"class":111},[101,61800,61801,61803,61805,61808],{"class":103,"line":2564},[101,61802,61710],{"class":160},[101,61804,51426],{"class":111},[101,61806,61807],{"class":160},"#f5f5f5",[101,61809,1277],{"class":111},[101,61811,61812,61814,61816,61818,61820],{"class":103,"line":2578},[101,61813,55123],{"class":160},[101,61815,51426],{"class":111},[101,61817,404],{"class":160},[101,61819,51481],{"class":107},[101,61821,1277],{"class":111},[101,61823,61824,61827,61829,61831],{"class":103,"line":2586},[101,61825,61826],{"class":160},"      flex",[101,61828,51426],{"class":111},[101,61830,329],{"class":160},[101,61832,1277],{"class":111},[101,61834,61835,61837,61839,61841,61843],{"class":103,"line":2591},[101,61836,54684],{"class":160},[101,61838,51426],{"class":111},[101,61840,557],{"class":160},[101,61842,51481],{"class":107},[101,61844,1277],{"class":111},[101,61846,61847,61850,61852,61854,61857,61859],{"class":103,"line":2597},[101,61848,61849],{"class":160},"      transition",[101,61851,51426],{"class":111},[101,61853,28110],{"class":160},[101,61855,61856],{"class":160}," 0.5",[101,61858,806],{"class":107},[101,61860,1277],{"class":111},[101,61862,61863,61865,61867,61869,61871],{"class":103,"line":2603},[101,61864,54774],{"class":160},[101,61866,51426],{"class":111},[101,61868,1062],{"class":160},[101,61870,51481],{"class":107},[101,61872,1277],{"class":111},[101,61874,61875],{"class":103,"line":2608},[101,61876,2174],{"class":111},[101,61878,61879],{"class":103,"line":7936},[101,61880,2387],{"emptyLinePlaceholder":27},[101,61882,61883,61885,61887,61890],{"class":103,"line":7960},[101,61884,61593],{"class":1950},[101,61886,61762],{"class":51289},[101,61888,61889],{"class":1950},":focus",[101,61891,15560],{"class":111},[101,61893,61894,61896,61898,61901],{"class":103,"line":7965},[101,61895,61780],{"class":160},[101,61897,51426],{"class":111},[101,61899,61900],{"class":160},"#e4e4e4",[101,61902,1277],{"class":111},[101,61904,61905,61907,61909,61911],{"class":103,"line":7971},[101,61906,61710],{"class":160},[101,61908,51426],{"class":111},[101,61910,60831],{"class":160},[101,61912,1277],{"class":111},[101,61914,61915,61917,61919,61921,61923],{"class":103,"line":7998},[101,61916,54774],{"class":160},[101,61918,51426],{"class":111},[101,61920,767],{"class":160},[101,61922,51481],{"class":107},[101,61924,1277],{"class":111},[101,61926,61927],{"class":103,"line":8003},[101,61928,2174],{"class":111},[101,61930,61931],{"class":103,"line":8009},[101,61932,2387],{"emptyLinePlaceholder":27},[101,61934,61935,61937,61939],{"class":103,"line":8021},[101,61936,61593],{"class":1950},[101,61938,57456],{"class":51289},[101,61940,15560],{"class":111},[101,61942,61943,61945,61947,61950],{"class":103,"line":8033},[101,61944,61710],{"class":160},[101,61946,51426],{"class":111},[101,61948,61949],{"class":160},"#00aeec",[101,61951,1277],{"class":111},[101,61953,61954,61956,61958,61960],{"class":103,"line":8045},[101,61955,57405],{"class":160},[101,61957,51426],{"class":111},[101,61959,60831],{"class":160},[101,61961,1277],{"class":111},[101,61963,61964,61967,61969,61971],{"class":103,"line":9704},[101,61965,61966],{"class":160},"      border",[101,61968,51426],{"class":111},[101,61970,54726],{"class":160},[101,61972,1277],{"class":111},[101,61974,61975,61977,61979,61981,61983],{"class":103,"line":9729},[101,61976,55123],{"class":160},[101,61978,51426],{"class":111},[101,61980,404],{"class":160},[101,61982,51481],{"class":107},[101,61984,1277],{"class":111},[101,61986,61987,61990,61992,61994,61996],{"class":103,"line":9752},[101,61988,61989],{"class":160},"      margin-left",[101,61991,51426],{"class":111},[101,61993,557],{"class":160},[101,61995,51481],{"class":107},[101,61997,1277],{"class":111},[101,61999,62000,62002,62004,62006,62008],{"class":103,"line":9776},[101,62001,54760],{"class":160},[101,62003,51426],{"class":111},[101,62005,467],{"class":160},[101,62007,51481],{"class":107},[101,62009,1277],{"class":111},[101,62011,62012,62015,62017,62020],{"class":103,"line":9781},[101,62013,62014],{"class":160},"      cursor",[101,62016,51426],{"class":111},[101,62018,62019],{"class":160},"pointer",[101,62021,1277],{"class":111},[101,62023,62024],{"class":103,"line":9786},[101,62025,2174],{"class":111},[101,62027,62028],{"class":103,"line":9791},[101,62029,2387],{"emptyLinePlaceholder":27},[101,62031,62032,62034,62037],{"class":103,"line":9800},[101,62033,61593],{"class":1950},[101,62035,62036],{"class":1950}," .total",[101,62038,15560],{"class":111},[101,62040,62041,62043,62045,62047,62049],{"class":103,"line":9805},[101,62042,61739],{"class":160},[101,62044,51426],{"class":111},[101,62046,723],{"class":160},[101,62048,51481],{"class":107},[101,62050,1277],{"class":111},[101,62052,62053,62055,62057,62060],{"class":103,"line":9811},[101,62054,57405],{"class":160},[101,62056,51426],{"class":111},[101,62058,62059],{"class":160},"#999",[101,62061,1277],{"class":111},[101,62063,62064,62067,62069,62071,62073],{"class":103,"line":9832},[101,62065,62066],{"class":160},"      margin-top",[101,62068,51426],{"class":111},[101,62070,430],{"class":160},[101,62072,51481],{"class":107},[101,62074,1277],{"class":111},[101,62076,62077,62080,62082,62084],{"class":103,"line":9838},[101,62078,62079],{"class":160},"      opacity",[101,62081,51426],{"class":111},[101,62083,303],{"class":160},[101,62085,1277],{"class":111},[101,62087,62088,62090,62092,62094,62096,62098],{"class":103,"line":9852},[101,62089,61849],{"class":160},[101,62091,51426],{"class":111},[101,62093,28110],{"class":160},[101,62095,61856],{"class":160},[101,62097,806],{"class":107},[101,62099,1277],{"class":111},[101,62101,62102],{"class":103,"line":9858},[101,62103,2174],{"class":111},[101,62105,62106],{"class":103,"line":9885},[101,62107,2387],{"emptyLinePlaceholder":27},[101,62109,62110,62113],{"class":103,"line":9894},[101,62111,62112],{"class":1950},"    .list",[101,62114,15560],{"class":111},[101,62116,62117,62119,62121,62123,62125],{"class":103,"line":9900},[101,62118,61600],{"class":160},[101,62120,51426],{"class":111},[101,62122,3974],{"class":160},[101,62124,51481],{"class":107},[101,62126,1277],{"class":111},[101,62128,62129,62131,62133,62135,62137],{"class":103,"line":9908},[101,62130,61613],{"class":160},[101,62132,51426],{"class":111},[101,62134,61618],{"class":160},[101,62136,51481],{"class":107},[101,62138,1277],{"class":111},[101,62140,62141,62143,62145,62147],{"class":103,"line":9913},[101,62142,54998],{"class":160},[101,62144,51426],{"class":111},[101,62146,51466],{"class":160},[101,62148,1277],{"class":111},[101,62150,62151],{"class":103,"line":16592},[101,62152,2174],{"class":111},[101,62154,62155],{"class":103,"line":16598},[101,62156,2387],{"emptyLinePlaceholder":27},[101,62158,62159,62161,62164],{"class":103,"line":16621},[101,62160,62112],{"class":1950},[101,62162,62163],{"class":1950}," .item",[101,62165,15560],{"class":111},[101,62167,62168,62170,62172,62174,62176],{"class":103,"line":16627},[101,62169,54760],{"class":160},[101,62171,51426],{"class":111},[101,62173,422],{"class":160},[101,62175,439],{"class":107},[101,62177,1277],{"class":111},[101,62179,62180,62182,62184,62186],{"class":103,"line":16650},[101,62181,54998],{"class":160},[101,62183,51426],{"class":111},[101,62185,51466],{"class":160},[101,62187,1277],{"class":111},[101,62189,62190],{"class":103,"line":16664},[101,62191,2174],{"class":111},[101,62193,62194],{"class":103,"line":16684},[101,62195,2387],{"emptyLinePlaceholder":27},[101,62197,62198,62200,62202,62205],{"class":103,"line":16690},[101,62199,62112],{"class":1950},[101,62201,62163],{"class":1950},[101,62203,62204],{"class":1950}," .info",[101,62206,15560],{"class":111},[101,62208,62209,62211,62213,62215],{"class":103,"line":16701},[101,62210,61826],{"class":160},[101,62212,51426],{"class":111},[101,62214,329],{"class":160},[101,62216,1277],{"class":111},[101,62218,62219,62222,62224,62226,62228,62231,62234],{"class":103,"line":16724},[101,62220,62221],{"class":160},"      border-bottom",[101,62223,51426],{"class":111},[101,62225,329],{"class":160},[101,62227,51481],{"class":107},[101,62229,62230],{"class":160}," dashed",[101,62232,62233],{"class":160}," #e4e4e4",[101,62235,1277],{"class":111},[101,62237,62238,62241,62243,62245,62247],{"class":103,"line":16746},[101,62239,62240],{"class":160},"      padding-bottom",[101,62242,51426],{"class":111},[101,62244,557],{"class":160},[101,62246,51481],{"class":107},[101,62248,1277],{"class":111},[101,62250,62251],{"class":103,"line":16751},[101,62252,2174],{"class":111},[101,62254,62255],{"class":103,"line":16757},[101,62256,2387],{"emptyLinePlaceholder":27},[101,62258,62259,62261,62263,62265],{"class":103,"line":16771},[101,62260,62112],{"class":1950},[101,62262,62163],{"class":1950},[101,62264,6813],{"class":51289},[101,62266,15560],{"class":111},[101,62268,62269,62271,62273,62275],{"class":103,"line":16784},[101,62270,54695],{"class":160},[101,62272,51426],{"class":111},[101,62274,303],{"class":160},[101,62276,1277],{"class":111},[101,62278,62279],{"class":103,"line":16789},[101,62280,2174],{"class":111},[101,62282,62283],{"class":103,"line":16803},[101,62284,2387],{"emptyLinePlaceholder":27},[101,62286,62287,62289,62291,62294],{"class":103,"line":16808},[101,62288,62112],{"class":1950},[101,62290,62163],{"class":1950},[101,62292,62293],{"class":1950}," .name",[101,62295,15560],{"class":111},[101,62297,62298,62300,62302,62305],{"class":103,"line":16814},[101,62299,57405],{"class":160},[101,62301,51426],{"class":111},[101,62303,62304],{"class":160},"#FB7299",[101,62306,1277],{"class":111},[101,62308,62309,62311,62313,62315,62317],{"class":103,"line":16819},[101,62310,54911],{"class":160},[101,62312,51426],{"class":111},[101,62314,660],{"class":160},[101,62316,51481],{"class":107},[101,62318,1277],{"class":111},[101,62320,62321,62324,62326,62329],{"class":103,"line":16833},[101,62322,62323],{"class":160},"      font-weight",[101,62325,51426],{"class":111},[101,62327,62328],{"class":160},"bold",[101,62330,1277],{"class":111},[101,62332,62333],{"class":103,"line":16838},[101,62334,2174],{"class":111},[101,62336,62337],{"class":103,"line":16843},[101,62338,2387],{"emptyLinePlaceholder":27},[101,62340,62341,62343,62345,62348],{"class":103,"line":16857},[101,62342,62112],{"class":1950},[101,62344,62163],{"class":1950},[101,62346,62347],{"class":1950}," .text",[101,62349,15560],{"class":111},[101,62351,62352,62354,62356,62359],{"class":103,"line":16869},[101,62353,57405],{"class":160},[101,62355,51426],{"class":111},[101,62357,62358],{"class":160},"#333",[101,62360,1277],{"class":111},[101,62362,62363,62365,62367,62369,62371,62373],{"class":103,"line":16874},[101,62364,54684],{"class":160},[101,62366,51426],{"class":111},[101,62368,557],{"class":160},[101,62370,51481],{"class":107},[101,62372,4080],{"class":160},[101,62374,1277],{"class":111},[101,62376,62377],{"class":103,"line":16887},[101,62378,2174],{"class":111},[101,62380,62381],{"class":103,"line":16892},[101,62382,2387],{"emptyLinePlaceholder":27},[101,62384,62385,62387,62389,62392],{"class":103,"line":16897},[101,62386,62112],{"class":1950},[101,62388,62163],{"class":1950},[101,62390,62391],{"class":1950}," .time",[101,62393,15560],{"class":111},[101,62395,62396,62398,62400,62402],{"class":103,"line":16902},[101,62397,57405],{"class":160},[101,62399,51426],{"class":111},[101,62401,62059],{"class":160},[101,62403,1277],{"class":111},[101,62405,62406,62408,62410,62412,62414],{"class":103,"line":16915},[101,62407,54911],{"class":160},[101,62409,51426],{"class":111},[101,62411,609],{"class":160},[101,62413,51481],{"class":107},[101,62415,1277],{"class":111},[101,62417,62418],{"class":103,"line":16920},[101,62419,2174],{"class":111},[101,62421,62422,62424,62426],{"class":103,"line":32622},[101,62423,52406],{"class":111},[101,62425,5114],{"class":51289},[101,62427,51296],{"class":111},[101,62429,62430,62432,62434],{"class":103,"line":32628},[101,62431,51774],{"class":111},[101,62433,51323],{"class":51289},[101,62435,51296],{"class":111},[101,62437,62438],{"class":103,"line":32634},[101,62439,2387],{"emptyLinePlaceholder":27},[101,62441,62442,62444,62446],{"class":103,"line":32640},[101,62443,1021],{"class":111},[101,62445,51789],{"class":51289},[101,62447,51296],{"class":111},[101,62449,62450,62452,62454,62456,62458,62461],{"class":103,"line":32646},[101,62451,52133],{"class":111},[101,62453,51600],{"class":51289},[101,62455,53475],{"class":1950},[101,62457,157],{"class":111},[101,62459,62460],{"class":216},"\"wrapper\"",[101,62462,51296],{"class":111},[101,62464,62465,62467,62469,62471,62473,62476,62478,62480],{"class":103,"line":32657},[101,62466,51330],{"class":111},[101,62468,552],{"class":51289},[101,62470,53475],{"class":1950},[101,62472,157],{"class":111},[101,62474,62475],{"class":216},"\"avatar\"",[101,62477,55303],{"class":111},[101,62479,552],{"class":51289},[101,62481,51296],{"class":111},[101,62483,62484,62486,62488,62490,62492,62495,62497,62499,62502,62504,62506,62508,62511,62513,62516,62518,62520],{"class":103,"line":32663},[101,62485,51330],{"class":111},[101,62487,54277],{"class":51289},[101,62489,14947],{"class":1950},[101,62491,157],{"class":111},[101,62493,62494],{"class":216},"\"tx\"",[101,62496,61009],{"class":1950},[101,62498,157],{"class":111},[101,62500,62501],{"class":216},"\"发一条友善的评论\"",[101,62503,54300],{"class":1950},[101,62505,157],{"class":111},[101,62507,3688],{"class":216},[101,62509,62510],{"class":1950}," maxlength",[101,62512,157],{"class":111},[101,62514,62515],{"class":216},"\"200\"",[101,62517,55303],{"class":111},[101,62519,54277],{"class":51289},[101,62521,51296],{"class":111},[101,62523,62524,62526,62528,62531,62533],{"class":103,"line":32683},[101,62525,51330],{"class":111},[101,62527,53876],{"class":51289},[101,62529,62530],{"class":111},">发布\u003C\u002F",[101,62532,53876],{"class":51289},[101,62534,51296],{"class":111},[101,62536,62537,62539,62541],{"class":103,"line":32689},[101,62538,52406],{"class":111},[101,62540,51600],{"class":51289},[101,62542,51296],{"class":111},[101,62544,62545,62547,62549,62551,62553,62555],{"class":103,"line":32700},[101,62546,52133],{"class":111},[101,62548,51600],{"class":51289},[101,62550,53475],{"class":1950},[101,62552,157],{"class":111},[101,62554,62460],{"class":216},[101,62556,51296],{"class":111},[101,62558,62559,62561,62563,62565,62567,62570,62573,62575],{"class":103,"line":32706},[101,62560,51330],{"class":111},[101,62562,101],{"class":51289},[101,62564,53475],{"class":1950},[101,62566,157],{"class":111},[101,62568,62569],{"class":216},"\"total\"",[101,62571,62572],{"class":111},">0\u002F200字\u003C\u002F",[101,62574,101],{"class":51289},[101,62576,51296],{"class":111},[101,62578,62579,62581,62583],{"class":103,"line":32712},[101,62580,52406],{"class":111},[101,62582,51600],{"class":51289},[101,62584,51296],{"class":111},[101,62586,62587,62589,62591,62593,62595,62598],{"class":103,"line":32718},[101,62588,52133],{"class":111},[101,62590,51600],{"class":51289},[101,62592,53475],{"class":1950},[101,62594,157],{"class":111},[101,62596,62597],{"class":216},"\"list\"",[101,62599,51296],{"class":111},[101,62601,62602,62604,62606,62608,62610,62613,62616,62618,62621],{"class":103,"line":32724},[101,62603,51330],{"class":111},[101,62605,51600],{"class":51289},[101,62607,53475],{"class":1950},[101,62609,157],{"class":111},[101,62611,62612],{"class":216},"\"item\"",[101,62614,62615],{"class":1950}," style",[101,62617,157],{"class":111},[101,62619,62620],{"class":216},"\"display: none;\"",[101,62622,51296],{"class":111},[101,62624,62625,62627,62629,62631,62633,62635,62637,62639],{"class":103,"line":32730},[101,62626,55223],{"class":111},[101,62628,552],{"class":51289},[101,62630,53475],{"class":1950},[101,62632,157],{"class":111},[101,62634,62475],{"class":216},[101,62636,55303],{"class":111},[101,62638,552],{"class":51289},[101,62640,51296],{"class":111},[101,62642,62643,62645,62647,62649,62651,62654],{"class":103,"line":32736},[101,62644,55223],{"class":111},[101,62646,51600],{"class":51289},[101,62648,53475],{"class":1950},[101,62650,157],{"class":111},[101,62652,62653],{"class":216},"\"info\"",[101,62655,51296],{"class":111},[101,62657,62658,62660,62662,62664,62666,62669,62672,62674],{"class":103,"line":32742},[101,62659,55291],{"class":111},[101,62661,10],{"class":51289},[101,62663,53475],{"class":1950},[101,62665,157],{"class":111},[101,62667,62668],{"class":216},"\"name\"",[101,62670,62671],{"class":111},">清风徐来\u003C\u002F",[101,62673,10],{"class":51289},[101,62675,51296],{"class":111},[101,62677,62678,62680,62682,62684,62686,62689,62692,62694],{"class":103,"line":32762},[101,62679,55291],{"class":111},[101,62681,10],{"class":51289},[101,62683,53475],{"class":1950},[101,62685,157],{"class":111},[101,62687,62688],{"class":216},"\"text\"",[101,62690,62691],{"class":111},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[101,62693,10],{"class":51289},[101,62695,51296],{"class":111},[101,62697,62698,62700,62702,62704,62706,62709,62712,62714],{"class":103,"line":32768},[101,62699,55291],{"class":111},[101,62701,10],{"class":51289},[101,62703,53475],{"class":1950},[101,62705,157],{"class":111},[101,62707,62708],{"class":216},"\"time\"",[101,62710,62711],{"class":111},">2022-10-10 20:29:21\u003C\u002F",[101,62713,10],{"class":51289},[101,62715,51296],{"class":111},[101,62717,62718,62720,62722],{"class":103,"line":32784},[101,62719,55396],{"class":111},[101,62721,51600],{"class":51289},[101,62723,51296],{"class":111},[101,62725,62726,62728,62730],{"class":103,"line":32790},[101,62727,51765],{"class":111},[101,62729,51600],{"class":51289},[101,62731,51296],{"class":111},[101,62733,62734,62736,62738],{"class":103,"line":32804},[101,62735,52406],{"class":111},[101,62737,51600],{"class":51289},[101,62739,51296],{"class":111},[101,62741,62742,62744,62746],{"class":103,"line":32810},[101,62743,52133],{"class":111},[101,62745,51802],{"class":51289},[101,62747,51296],{"class":111},[101,62749,62750,62752,62755,62757,62759,62761,62763,62766],{"class":103,"line":32825},[101,62751,11209],{"class":107},[101,62753,62754],{"class":160}," tx",[101,62756,13552],{"class":107},[101,62758,54385],{"class":111},[101,62760,54388],{"class":1950},[101,62762,112],{"class":111},[101,62764,62765],{"class":216},"'#tx'",[101,62767,118],{"class":111},[101,62769,62770,62772,62775,62777,62779,62781,62783,62786],{"class":103,"line":32831},[101,62771,11209],{"class":107},[101,62773,62774],{"class":160}," total",[101,62776,13552],{"class":107},[101,62778,54385],{"class":111},[101,62780,54388],{"class":1950},[101,62782,112],{"class":111},[101,62784,62785],{"class":216},"'.total'",[101,62787,118],{"class":111},[101,62789,62790],{"class":103,"line":32840},[101,62791,62792],{"class":170},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[101,62794,62795,62798,62800,62802,62804,62806,62808],{"class":103,"line":32846},[101,62796,62797],{"class":111},"    tx.",[101,62799,57802],{"class":1950},[101,62801,112],{"class":111},[101,62803,61316],{"class":216},[101,62805,12423],{"class":111},[101,62807,54438],{"class":107},[101,62809,54441],{"class":111},[101,62811,62812,62815,62817],{"class":103,"line":32855},[101,62813,62814],{"class":111},"      total.style.opacity ",[101,62816,157],{"class":107},[101,62818,55688],{"class":160},[101,62820,62821],{"class":103,"line":32861},[101,62822,33450],{"class":111},[101,62824,62825],{"class":103,"line":32867},[101,62826,62827],{"class":170},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[101,62829,62830,62832,62834,62836,62838,62840,62842],{"class":103,"line":32876},[101,62831,62797],{"class":111},[101,62833,57802],{"class":1950},[101,62835,112],{"class":111},[101,62837,61377],{"class":216},[101,62839,12423],{"class":111},[101,62841,54438],{"class":107},[101,62843,54441],{"class":111},[101,62845,62846,62848,62850],{"class":103,"line":32882},[101,62847,62814],{"class":111},[101,62849,157],{"class":107},[101,62851,47322],{"class":160},[101,62853,62854],{"class":103,"line":32893},[101,62855,33450],{"class":111},[101,62857,62858],{"class":103,"line":32899},[101,62859,62860],{"class":170},"    \u002F\u002F 3. 检测用户输入\n",[101,62862,62863,62865,62867,62869,62872,62874,62876],{"class":103,"line":32918},[101,62864,62797],{"class":111},[101,62866,57802],{"class":1950},[101,62868,112],{"class":111},[101,62870,62871],{"class":216},"'input'",[101,62873,12423],{"class":111},[101,62875,54438],{"class":107},[101,62877,54441],{"class":111},[101,62879,62880],{"class":103,"line":32924},[101,62881,62882],{"class":170},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[101,62884,62885,62888,62890,62893,62896,62898,62901,62903,62905],{"class":103,"line":32935},[101,62886,62887],{"class":111},"      total.innerHTML ",[101,62889,157],{"class":107},[101,62891,62892],{"class":216}," `${",[101,62894,62895],{"class":111},"tx",[101,62897,669],{"class":216},[101,62899,62900],{"class":111},"value",[101,62902,669],{"class":216},[101,62904,51957],{"class":160},[101,62906,62907],{"class":216},"}\u002F200字`\n",[101,62909,62910],{"class":103,"line":32941},[101,62911,33450],{"class":111},[101,62913,62914],{"class":103,"line":32961},[101,62915,2387],{"emptyLinePlaceholder":27},[101,62917,62918],{"class":103,"line":32977},[101,62919,62920],{"class":170},"    \u002F\u002F const str = 'andy'\n",[101,62922,62923],{"class":103,"line":32983},[101,62924,62925],{"class":170},"    \u002F\u002F console.log(str.length)\n",[101,62927,62928,62930,62932],{"class":103,"line":32997},[101,62929,52406],{"class":111},[101,62931,51802],{"class":51289},[101,62933,51296],{"class":111},[101,62935,62936,62938,62940],{"class":103,"line":33003},[101,62937,51774],{"class":111},[101,62939,51789],{"class":51289},[101,62941,51296],{"class":111},[101,62943,62944],{"class":103,"line":33009},[101,62945,2387],{"emptyLinePlaceholder":27},[101,62947,62948,62950,62952],{"class":103,"line":33020},[101,62949,51774],{"class":111},[101,62951,50624],{"class":51289},[101,62953,51296],{"class":111},[21986,62955,62957],{"id":62956},"_3254-change事件","3.2.5.4 change事件",[10,62959,62960],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[10,62962,62963],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[10,62965,62966],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[92,62968,62970],{"className":50622,"code":62969,"language":50624,"meta":20,"style":20},"\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",[98,62971,62972,62982,62996,63000,63008,63022,63042,63054,63062,63066,63074,63088,63096,63114,63132,63144,63148,63156,63164,63168],{"__ignoreMap":20},[101,62973,62974,62976,62978,62980],{"class":103,"line":104},[101,62975,51286],{"class":111},[101,62977,51290],{"class":51289},[101,62979,51293],{"class":1950},[101,62981,51296],{"class":111},[101,62983,62984,62986,62988,62990,62992,62994],{"class":103,"line":21},[101,62985,1021],{"class":111},[101,62987,50624],{"class":51289},[101,62989,51305],{"class":1950},[101,62991,157],{"class":111},[101,62993,51310],{"class":216},[101,62995,51296],{"class":111},[101,62997,62998],{"class":103,"line":1166},[101,62999,2387],{"emptyLinePlaceholder":27},[101,63001,63002,63004,63006],{"class":103,"line":1181},[101,63003,1021],{"class":111},[101,63005,51323],{"class":51289},[101,63007,51296],{"class":111},[101,63009,63010,63012,63014,63016,63018,63020],{"class":103,"line":1187},[101,63011,52133],{"class":111},[101,63013,51333],{"class":51289},[101,63015,51336],{"class":1950},[101,63017,157],{"class":111},[101,63019,51341],{"class":216},[101,63021,51296],{"class":111},[101,63023,63024,63026,63028,63030,63032,63034,63036,63038,63040],{"class":103,"line":1201},[101,63025,52133],{"class":111},[101,63027,51333],{"class":51289},[101,63029,14908],{"class":1950},[101,63031,157],{"class":111},[101,63033,51380],{"class":216},[101,63035,51360],{"class":1950},[101,63037,157],{"class":111},[101,63039,51387],{"class":216},[101,63041,51296],{"class":111},[101,63043,63044,63046,63048,63050,63052],{"class":103,"line":1207},[101,63045,52133],{"class":111},[101,63047,51396],{"class":51289},[101,63049,51399],{"class":111},[101,63051,51396],{"class":51289},[101,63053,51296],{"class":111},[101,63055,63056,63058,63060],{"class":103,"line":1298},[101,63057,51774],{"class":111},[101,63059,51323],{"class":51289},[101,63061,51296],{"class":111},[101,63063,63064],{"class":103,"line":1304},[101,63065,2387],{"emptyLinePlaceholder":27},[101,63067,63068,63070,63072],{"class":103,"line":1316},[101,63069,1021],{"class":111},[101,63071,51789],{"class":51289},[101,63073,51296],{"class":111},[101,63075,63076,63078,63080,63082,63084,63086],{"class":103,"line":1599},[101,63077,52133],{"class":111},[101,63079,53810],{"class":51289},[101,63081,53813],{"class":1950},[101,63083,157],{"class":111},[101,63085,62688],{"class":216},[101,63087,51296],{"class":111},[101,63089,63090,63092,63094],{"class":103,"line":1604},[101,63091,52133],{"class":111},[101,63093,51802],{"class":51289},[101,63095,51296],{"class":111},[101,63097,63098,63100,63102,63104,63106,63108,63110,63112],{"class":103,"line":1610},[101,63099,11209],{"class":107},[101,63101,60594],{"class":160},[101,63103,13552],{"class":107},[101,63105,54385],{"class":111},[101,63107,54388],{"class":1950},[101,63109,112],{"class":111},[101,63111,62871],{"class":216},[101,63113,118],{"class":111},[101,63115,63116,63119,63121,63123,63126,63128,63130],{"class":103,"line":1615},[101,63117,63118],{"class":111},"    input.",[101,63120,57802],{"class":1950},[101,63122,112],{"class":111},[101,63124,63125],{"class":216},"'change'",[101,63127,12423],{"class":111},[101,63129,54438],{"class":107},[101,63131,54441],{"class":111},[101,63133,63134,63136,63138,63140,63142],{"class":103,"line":1629},[101,63135,58233],{"class":111},[101,63137,58236],{"class":1950},[101,63139,112],{"class":111},[101,63141,704],{"class":160},[101,63143,118],{"class":111},[101,63145,63146],{"class":103,"line":1634},[101,63147,33450],{"class":111},[101,63149,63150,63152,63154],{"class":103,"line":1640},[101,63151,52406],{"class":111},[101,63153,51802],{"class":51289},[101,63155,51296],{"class":111},[101,63157,63158,63160,63162],{"class":103,"line":1661},[101,63159,51774],{"class":111},[101,63161,51789],{"class":51289},[101,63163,51296],{"class":111},[101,63165,63166],{"class":103,"line":1666},[101,63167,2387],{"emptyLinePlaceholder":27},[101,63169,63170,63172,63174],{"class":103,"line":1680},[101,63171,51774],{"class":111},[101,63173,50624],{"class":51289},[101,63175,51296],{"class":111},[10,63177,63178],{},"总结：内容发生改变才回去触发",[72,63180,63182],{"id":63181},"_326-事件对象","3.2.6 事件对象",[21986,63184,63186],{"id":63185},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[10,63188,63189],{},[1449,63190],{"alt":20,"src":63191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[10,63193,63194],{},[1449,63195],{"alt":20,"src":63196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[10,63198,63199],{},"点击一次，就输出了事件对象，它是个对象",[10,63201,63202],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[10,63204,63205],{},[1449,63206],{"alt":20,"src":63207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21986,63209,63211],{"id":63210},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[10,63213,63214],{},[1449,63215],{"alt":20,"src":63216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[10,63218,63219],{},"实现按特殊字符才是实现打印输出效果：",[92,63221,63223],{"className":53056,"code":63222,"language":53058,"meta":20,"style":20},"\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",[98,63224,63225,63233,63238,63252,63260,63265,63270,63275,63280,63285,63290,63295,63300,63305,63309,63313,63321],{"__ignoreMap":20},[101,63226,63227,63229,63231],{"class":103,"line":104},[101,63228,1021],{"class":111},[101,63230,51789],{"class":51289},[101,63232,51296],{"class":111},[101,63234,63235],{"class":103,"line":21},[101,63236,63237],{"class":170},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[101,63239,63240,63242,63244,63246,63248,63250],{"class":103,"line":1166},[101,63241,52133],{"class":111},[101,63243,53810],{"class":51289},[101,63245,53813],{"class":1950},[101,63247,157],{"class":111},[101,63249,62688],{"class":216},[101,63251,51296],{"class":111},[101,63253,63254,63256,63258],{"class":103,"line":1181},[101,63255,52133],{"class":111},[101,63257,51802],{"class":51289},[101,63259,51296],{"class":111},[101,63261,63262],{"class":103,"line":1187},[101,63263,63264],{"class":111},"    \u002F\u002F const btn = document.querySelector('button')\n",[101,63266,63267],{"class":103,"line":1201},[101,63268,63269],{"class":111},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[101,63271,63272],{"class":103,"line":1207},[101,63273,63274],{"class":111},"    \u002F\u002F   console.log(e);\n",[101,63276,63277],{"class":103,"line":1298},[101,63278,63279],{"class":111},"    \u002F\u002F })\n",[101,63281,63282],{"class":103,"line":1304},[101,63283,63284],{"class":111},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[101,63286,63287],{"class":103,"line":1316},[101,63288,63289],{"class":111},"    const input = document.querySelector('input')\n",[101,63291,63292],{"class":103,"line":1599},[101,63293,63294],{"class":111},"    input.addEventListener('keyup', function (e) {\n",[101,63296,63297],{"class":103,"line":1604},[101,63298,63299],{"class":111},"      if (e.key === 'Enter') {\n",[101,63301,63302],{"class":103,"line":1610},[101,63303,63304],{"class":111},"        console.log('我按下了回车键')\n",[101,63306,63307],{"class":103,"line":1615},[101,63308,52387],{"class":111},[101,63310,63311],{"class":103,"line":1629},[101,63312,33450],{"class":111},[101,63314,63315,63317,63319],{"class":103,"line":1634},[101,63316,52406],{"class":111},[101,63318,51802],{"class":51289},[101,63320,51296],{"class":111},[101,63322,63323,63325,63327],{"class":103,"line":1640},[101,63324,51774],{"class":111},[101,63326,51789],{"class":51289},[101,63328,51296],{"class":111},[21986,63330,63332],{"id":63331},"_3263-trim方法","3.2.6.3 trim方法",[10,63334,63335],{},[1449,63336],{"alt":20,"src":63337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[10,63339,63340],{},[1449,63341],{"alt":20,"src":63342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[10,63344,63345],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[10,63347,63348],{},"str.trim()",[72,63350,63352],{"id":63351},"_327-环境对象","3.2.7 环境对象",[10,63354,63355],{},[1449,63356],{"alt":20,"src":63357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[10,63359,63360],{},[1449,63361],{"alt":20,"src":63362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[10,63364,63365],{},[1449,63366],{"alt":20,"src":63367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[10,63369,63370],{},"实际函数调用是window.fn()",[10,63372,63373],{},"普通函数里面this指向的是window",[1118,63375,63376,63379,63382],{},[58,63377,63378],{},"在普通函数下，this指向的是window",[58,63380,63381],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[58,63383,63384],{},"箭头函数没有this",[10,63386,63387],{},"粗略记法就是：谁调用，this就指向谁",[10,63389,63390],{},[1449,63391],{"alt":20,"src":63392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[10,63394,63395],{},[1449,63396],{"alt":20,"src":63397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[10,63399,63400],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[10,63402,63403],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[92,63405,63407],{"className":53056,"code":63406,"language":53058,"meta":20,"style":20},"\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",[98,63408,63409,63417,63429,63437,63442,63447,63452,63457,63461,63469],{"__ignoreMap":20},[101,63410,63411,63413,63415],{"class":103,"line":104},[101,63412,1021],{"class":111},[101,63414,51789],{"class":51289},[101,63416,51296],{"class":111},[101,63418,63419,63421,63423,63425,63427],{"class":103,"line":21},[101,63420,52133],{"class":111},[101,63422,53876],{"class":51289},[101,63424,53882],{"class":111},[101,63426,53876],{"class":51289},[101,63428,51296],{"class":111},[101,63430,63431,63433,63435],{"class":103,"line":1166},[101,63432,52133],{"class":111},[101,63434,51802],{"class":51289},[101,63436,51296],{"class":111},[101,63438,63439],{"class":103,"line":1181},[101,63440,63441],{"class":111},"    const button = document.querySelector('button')\n",[101,63443,63444],{"class":103,"line":1187},[101,63445,63446],{"class":111},"    button.addEventListener('click', function () {\n",[101,63448,63449],{"class":103,"line":1201},[101,63450,63451],{"class":111},"      \u002F\u002F console.log(this);\n",[101,63453,63454],{"class":103,"line":1207},[101,63455,63456],{"class":111},"      this.style.color = 'pink'\n",[101,63458,63459],{"class":103,"line":1298},[101,63460,33450],{"class":111},[101,63462,63463,63465,63467],{"class":103,"line":1304},[101,63464,52406],{"class":111},[101,63466,51802],{"class":51289},[101,63468,51296],{"class":111},[101,63470,63471,63473,63475],{"class":103,"line":1316},[101,63472,51774],{"class":111},[101,63474,51789],{"class":51289},[101,63476,51296],{"class":111},[72,63478,63480],{"id":63479},"_328-回调函数","3.2.8 回调函数",[10,63482,63483],{},[1449,63484],{"alt":20,"src":63485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[10,63487,63488],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[10,63490,11320],{},[1118,63492,63493,63496,63499],{},[58,63494,63495],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[58,63497,63498],{},"回调函数本质还是函数，只不过把它当成参数使用",[58,63500,63501],{},"使用匿名函数做为回调函数比较常见",[72,63503,63505],{"id":63504},"_329-tab栏切换","3.2.9 tab栏切换",[10,63507,63508],{},[1449,63509],{"alt":20,"src":63510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[92,63512,63514],{"className":50622,"code":63513,"language":50624,"meta":20,"style":20},"\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",[98,63515,63516,63526,63540,63544,63552,63566,63586,63606,63619,63627,63633,63643,63653,63657,63661,63668,63681,63694,63706,63722,63726,63730,63737,63749,63761,63773,63783,63793,63797,63801,63810,63822,63833,63845,63849,63853,63861,63871,63881,63891,63895,63899,63909,63923,63935,63939,63943,63955,63966,63983,63993,63997,64001,64016,64027,64037,64041,64045,64052,64067,64071,64075,64083,64093,64097,64101,64110,64120,64124,64132,64140,64144,64152,64167,64182,64195,64203,64237,64264,64291,64318,64345,64353,64361,64376,64413,64448,64483,64518,64553,64561,64569,64577,64582,64587,64607,64612,64641,64646,64651,64669,64674,64679,64684,64706,64711,64727,64731,64736,64741,64762,64767,64796,64800,64805,64809,64817,64825,64829],{"__ignoreMap":20},[101,63517,63518,63520,63522,63524],{"class":103,"line":104},[101,63519,51286],{"class":111},[101,63521,51290],{"class":51289},[101,63523,51293],{"class":1950},[101,63525,51296],{"class":111},[101,63527,63528,63530,63532,63534,63536,63538],{"class":103,"line":21},[101,63529,1021],{"class":111},[101,63531,50624],{"class":51289},[101,63533,51305],{"class":1950},[101,63535,157],{"class":111},[101,63537,51310],{"class":216},[101,63539,51296],{"class":111},[101,63541,63542],{"class":103,"line":1166},[101,63543,2387],{"emptyLinePlaceholder":27},[101,63545,63546,63548,63550],{"class":103,"line":1181},[101,63547,1021],{"class":111},[101,63549,51323],{"class":51289},[101,63551,51296],{"class":111},[101,63553,63554,63556,63558,63560,63562,63564],{"class":103,"line":1187},[101,63555,52133],{"class":111},[101,63557,51333],{"class":51289},[101,63559,51336],{"class":1950},[101,63561,157],{"class":111},[101,63563,51341],{"class":216},[101,63565,59116],{"class":111},[101,63567,63568,63570,63572,63574,63576,63578,63580,63582,63584],{"class":103,"line":1201},[101,63569,52133],{"class":111},[101,63571,51333],{"class":51289},[101,63573,51352],{"class":1950},[101,63575,157],{"class":111},[101,63577,51357],{"class":216},[101,63579,51360],{"class":1950},[101,63581,157],{"class":111},[101,63583,51365],{"class":216},[101,63585,59116],{"class":111},[101,63587,63588,63590,63592,63594,63596,63598,63600,63602,63604],{"class":103,"line":1207},[101,63589,52133],{"class":111},[101,63591,51333],{"class":51289},[101,63593,14908],{"class":1950},[101,63595,157],{"class":111},[101,63597,51380],{"class":216},[101,63599,51360],{"class":1950},[101,63601,157],{"class":111},[101,63603,51387],{"class":216},[101,63605,59116],{"class":111},[101,63607,63608,63610,63612,63615,63617],{"class":103,"line":1298},[101,63609,52133],{"class":111},[101,63611,51396],{"class":51289},[101,63613,63614],{"class":111},">tab栏切换\u003C\u002F",[101,63616,51396],{"class":51289},[101,63618,51296],{"class":111},[101,63620,63621,63623,63625],{"class":103,"line":1304},[101,63622,52133],{"class":111},[101,63624,5114],{"class":51289},[101,63626,51296],{"class":111},[101,63628,63629,63631],{"class":103,"line":1316},[101,63630,6391],{"class":51289},[101,63632,15560],{"class":111},[101,63634,63635,63637,63639,63641],{"class":103,"line":1599},[101,63636,54695],{"class":160},[101,63638,51426],{"class":111},[101,63640,303],{"class":160},[101,63642,1277],{"class":111},[101,63644,63645,63647,63649,63651],{"class":103,"line":1604},[101,63646,54684],{"class":160},[101,63648,51426],{"class":111},[101,63650,303],{"class":160},[101,63652,1277],{"class":111},[101,63654,63655],{"class":103,"line":1610},[101,63656,2174],{"class":111},[101,63658,63659],{"class":103,"line":1615},[101,63660,2387],{"emptyLinePlaceholder":27},[101,63662,63663,63666],{"class":103,"line":1629},[101,63664,63665],{"class":1950},"    .tab",[101,63667,15560],{"class":111},[101,63669,63670,63672,63674,63677,63679],{"class":103,"line":1634},[101,63671,54760],{"class":160},[101,63673,51426],{"class":111},[101,63675,63676],{"class":160},"590",[101,63678,51481],{"class":107},[101,63680,1277],{"class":111},[101,63682,63683,63685,63687,63690,63692],{"class":103,"line":1640},[101,63684,54774],{"class":160},[101,63686,51426],{"class":111},[101,63688,63689],{"class":160},"340",[101,63691,51481],{"class":107},[101,63693,1277],{"class":111},[101,63695,63696,63698,63700,63702,63704],{"class":103,"line":1661},[101,63697,54695],{"class":160},[101,63699,51426],{"class":111},[101,63701,811],{"class":160},[101,63703,51481],{"class":107},[101,63705,1277],{"class":111},[101,63707,63708,63710,63712,63714,63716,63718,63720],{"class":103,"line":1666},[101,63709,61966],{"class":160},[101,63711,51426],{"class":111},[101,63713,329],{"class":160},[101,63715,51481],{"class":107},[101,63717,51510],{"class":160},[101,63719,62233],{"class":160},[101,63721,1277],{"class":111},[101,63723,63724],{"class":103,"line":1680},[101,63725,2174],{"class":111},[101,63727,63728],{"class":103,"line":1685},[101,63729,2387],{"emptyLinePlaceholder":27},[101,63731,63732,63735],{"class":103,"line":1714},[101,63733,63734],{"class":1950},"    .tab-nav",[101,63736,15560],{"class":111},[101,63738,63739,63741,63743,63745,63747],{"class":103,"line":1719},[101,63740,54760],{"class":160},[101,63742,51426],{"class":111},[101,63744,422],{"class":160},[101,63746,439],{"class":107},[101,63748,1277],{"class":111},[101,63750,63751,63753,63755,63757,63759],{"class":103,"line":1736},[101,63752,54774],{"class":160},[101,63754,51426],{"class":111},[101,63756,1018],{"class":160},[101,63758,51481],{"class":107},[101,63760,1277],{"class":111},[101,63762,63763,63765,63767,63769,63771],{"class":103,"line":1741},[101,63764,57348],{"class":160},[101,63766,51426],{"class":111},[101,63768,1018],{"class":160},[101,63770,51481],{"class":107},[101,63772,1277],{"class":111},[101,63774,63775,63777,63779,63781],{"class":103,"line":1746},[101,63776,54998],{"class":160},[101,63778,51426],{"class":111},[101,63780,51466],{"class":160},[101,63782,1277],{"class":111},[101,63784,63785,63787,63789,63791],{"class":103,"line":1751},[101,63786,55009],{"class":160},[101,63788,51426],{"class":111},[101,63790,51657],{"class":160},[101,63792,1277],{"class":111},[101,63794,63795],{"class":103,"line":1765},[101,63796,2174],{"class":111},[101,63798,63799],{"class":103,"line":1770},[101,63800,2387],{"emptyLinePlaceholder":27},[101,63802,63803,63805,63808],{"class":103,"line":2564},[101,63804,63734],{"class":1950},[101,63806,63807],{"class":51289}," h3",[101,63809,15560],{"class":111},[101,63811,63812,63814,63816,63818,63820],{"class":103,"line":2578},[101,63813,54911],{"class":160},[101,63815,51426],{"class":111},[101,63817,911],{"class":160},[101,63819,51481],{"class":107},[101,63821,1277],{"class":111},[101,63823,63824,63826,63828,63831],{"class":103,"line":2586},[101,63825,62323],{"class":160},[101,63827,51426],{"class":111},[101,63829,63830],{"class":160},"normal",[101,63832,1277],{"class":111},[101,63834,63835,63837,63839,63841,63843],{"class":103,"line":2591},[101,63836,61989],{"class":160},[101,63838,51426],{"class":111},[101,63840,811],{"class":160},[101,63842,51481],{"class":107},[101,63844,1277],{"class":111},[101,63846,63847],{"class":103,"line":2597},[101,63848,2174],{"class":111},[101,63850,63851],{"class":103,"line":2603},[101,63852,2387],{"emptyLinePlaceholder":27},[101,63854,63855,63857,63859],{"class":103,"line":2608},[101,63856,63734],{"class":1950},[101,63858,61281],{"class":51289},[101,63860,15560],{"class":111},[101,63862,63863,63865,63867,63869],{"class":103,"line":7936},[101,63864,54721],{"class":160},[101,63866,51426],{"class":111},[101,63868,54726],{"class":160},[101,63870,1277],{"class":111},[101,63872,63873,63875,63877,63879],{"class":103,"line":7960},[101,63874,54998],{"class":160},[101,63876,51426],{"class":111},[101,63878,51466],{"class":160},[101,63880,1277],{"class":111},[101,63882,63883,63885,63887,63889],{"class":103,"line":7965},[101,63884,55009],{"class":160},[101,63886,51426],{"class":111},[101,63888,51569],{"class":160},[101,63890,1277],{"class":111},[101,63892,63893],{"class":103,"line":7971},[101,63894,2174],{"class":111},[101,63896,63897],{"class":103,"line":7998},[101,63898,2387],{"emptyLinePlaceholder":27},[101,63900,63901,63903,63905,63907],{"class":103,"line":8003},[101,63902,63734],{"class":1950},[101,63904,61281],{"class":51289},[101,63906,55064],{"class":51289},[101,63908,15560],{"class":111},[101,63910,63911,63913,63915,63917,63919,63921],{"class":103,"line":8009},[101,63912,54695],{"class":160},[101,63914,51426],{"class":111},[101,63916,303],{"class":160},[101,63918,8938],{"class":160},[101,63920,51481],{"class":107},[101,63922,1277],{"class":111},[101,63924,63925,63927,63929,63931,63933],{"class":103,"line":8021},[101,63926,54911],{"class":160},[101,63928,51426],{"class":111},[101,63930,660],{"class":160},[101,63932,51481],{"class":107},[101,63934,1277],{"class":111},[101,63936,63937],{"class":103,"line":8033},[101,63938,2174],{"class":111},[101,63940,63941],{"class":103,"line":8045},[101,63942,2387],{"emptyLinePlaceholder":27},[101,63944,63945,63947,63949,63951,63953],{"class":103,"line":9704},[101,63946,63734],{"class":1950},[101,63948,61281],{"class":51289},[101,63950,55064],{"class":51289},[101,63952,1385],{"class":51289},[101,63954,15560],{"class":111},[101,63956,63957,63960,63962,63964],{"class":103,"line":9729},[101,63958,63959],{"class":160},"      text-decoration",[101,63961,51426],{"class":111},[101,63963,54726],{"class":160},[101,63965,1277],{"class":111},[101,63967,63968,63970,63972,63974,63976,63978,63981],{"class":103,"line":9752},[101,63969,62221],{"class":160},[101,63971,51426],{"class":111},[101,63973,189],{"class":160},[101,63975,51481],{"class":107},[101,63977,51510],{"class":160},[101,63979,63980],{"class":160}," transparent",[101,63982,1277],{"class":111},[101,63984,63985,63987,63989,63991],{"class":103,"line":9776},[101,63986,57405],{"class":160},[101,63988,51426],{"class":111},[101,63990,62358],{"class":160},[101,63992,1277],{"class":111},[101,63994,63995],{"class":103,"line":9781},[101,63996,2174],{"class":111},[101,63998,63999],{"class":103,"line":9786},[101,64000,2387],{"emptyLinePlaceholder":27},[101,64002,64003,64005,64007,64009,64011,64014],{"class":103,"line":9791},[101,64004,63734],{"class":1950},[101,64006,61281],{"class":51289},[101,64008,55064],{"class":51289},[101,64010,1385],{"class":51289},[101,64012,64013],{"class":1950},".active",[101,64015,15560],{"class":111},[101,64017,64018,64020,64022,64025],{"class":103,"line":9800},[101,64019,61780],{"class":160},[101,64021,51426],{"class":111},[101,64023,64024],{"class":160},"#e1251b",[101,64026,1277],{"class":111},[101,64028,64029,64031,64033,64035],{"class":103,"line":9805},[101,64030,57405],{"class":160},[101,64032,51426],{"class":111},[101,64034,64024],{"class":160},[101,64036,1277],{"class":111},[101,64038,64039],{"class":103,"line":9811},[101,64040,2174],{"class":111},[101,64042,64043],{"class":103,"line":9832},[101,64044,2387],{"emptyLinePlaceholder":27},[101,64046,64047,64050],{"class":103,"line":9838},[101,64048,64049],{"class":1950},"    .tab-content",[101,64051,15560],{"class":111},[101,64053,64054,64056,64058,64060,64063,64065],{"class":103,"line":9852},[101,64055,54684],{"class":160},[101,64057,51426],{"class":111},[101,64059,303],{"class":160},[101,64061,64062],{"class":160}," 16",[101,64064,51481],{"class":107},[101,64066,1277],{"class":111},[101,64068,64069],{"class":103,"line":9858},[101,64070,2174],{"class":111},[101,64072,64073],{"class":103,"line":9885},[101,64074,2387],{"emptyLinePlaceholder":27},[101,64076,64077,64079,64081],{"class":103,"line":9894},[101,64078,64049],{"class":1950},[101,64080,62163],{"class":1950},[101,64082,15560],{"class":111},[101,64084,64085,64087,64089,64091],{"class":103,"line":9900},[101,64086,54998],{"class":160},[101,64088,51426],{"class":111},[101,64090,54726],{"class":160},[101,64092,1277],{"class":111},[101,64094,64095],{"class":103,"line":9908},[101,64096,2174],{"class":111},[101,64098,64099],{"class":103,"line":9913},[101,64100,2387],{"emptyLinePlaceholder":27},[101,64102,64103,64105,64108],{"class":103,"line":16592},[101,64104,64049],{"class":1950},[101,64106,64107],{"class":1950}," .item.active",[101,64109,15560],{"class":111},[101,64111,64112,64114,64116,64118],{"class":103,"line":16598},[101,64113,54998],{"class":160},[101,64115,51426],{"class":111},[101,64117,60858],{"class":160},[101,64119,1277],{"class":111},[101,64121,64122],{"class":103,"line":16621},[101,64123,2174],{"class":111},[101,64125,64126,64128,64130],{"class":103,"line":16627},[101,64127,52406],{"class":111},[101,64129,5114],{"class":51289},[101,64131,51296],{"class":111},[101,64133,64134,64136,64138],{"class":103,"line":16650},[101,64135,51774],{"class":111},[101,64137,51323],{"class":51289},[101,64139,51296],{"class":111},[101,64141,64142],{"class":103,"line":16664},[101,64143,2387],{"emptyLinePlaceholder":27},[101,64145,64146,64148,64150],{"class":103,"line":16684},[101,64147,1021],{"class":111},[101,64149,51789],{"class":51289},[101,64151,51296],{"class":111},[101,64153,64154,64156,64158,64160,64162,64165],{"class":103,"line":16690},[101,64155,52133],{"class":111},[101,64157,51600],{"class":51289},[101,64159,53475],{"class":1950},[101,64161,157],{"class":111},[101,64163,64164],{"class":216},"\"tab\"",[101,64166,51296],{"class":111},[101,64168,64169,64171,64173,64175,64177,64180],{"class":103,"line":16701},[101,64170,51330],{"class":111},[101,64172,51600],{"class":51289},[101,64174,53475],{"class":1950},[101,64176,157],{"class":111},[101,64178,64179],{"class":216},"\"tab-nav\"",[101,64181,51296],{"class":111},[101,64183,64184,64186,64188,64191,64193],{"class":103,"line":16724},[101,64185,55223],{"class":111},[101,64187,72],{"class":51289},[101,64189,64190],{"class":111},">每日特价\u003C\u002F",[101,64192,72],{"class":51289},[101,64194,51296],{"class":111},[101,64196,64197,64199,64201],{"class":103,"line":16746},[101,64198,55223],{"class":111},[101,64200,1118],{"class":51289},[101,64202,51296],{"class":111},[101,64204,64205,64207,64209,64211,64213,64215,64217,64219,64221,64223,64226,64229,64231,64233,64235],{"class":103,"line":16751},[101,64206,55291],{"class":111},[101,64208,58],{"class":51289},[101,64210,61041],{"class":111},[101,64212,14],{"class":51289},[101,64214,53475],{"class":1950},[101,64216,157],{"class":111},[101,64218,59695],{"class":216},[101,64220,61046],{"class":1950},[101,64222,157],{"class":111},[101,64224,64225],{"class":216},"\"javascript:;\"",[101,64227,64228],{"class":111},">精选\u003C\u002F",[101,64230,14],{"class":51289},[101,64232,55303],{"class":111},[101,64234,58],{"class":51289},[101,64236,51296],{"class":111},[101,64238,64239,64241,64243,64245,64247,64249,64251,64253,64256,64258,64260,64262],{"class":103,"line":16757},[101,64240,55291],{"class":111},[101,64242,58],{"class":51289},[101,64244,61041],{"class":111},[101,64246,14],{"class":51289},[101,64248,61046],{"class":1950},[101,64250,157],{"class":111},[101,64252,64225],{"class":216},[101,64254,64255],{"class":111},">美食\u003C\u002F",[101,64257,14],{"class":51289},[101,64259,55303],{"class":111},[101,64261,58],{"class":51289},[101,64263,51296],{"class":111},[101,64265,64266,64268,64270,64272,64274,64276,64278,64280,64283,64285,64287,64289],{"class":103,"line":16771},[101,64267,55291],{"class":111},[101,64269,58],{"class":51289},[101,64271,61041],{"class":111},[101,64273,14],{"class":51289},[101,64275,61046],{"class":1950},[101,64277,157],{"class":111},[101,64279,64225],{"class":216},[101,64281,64282],{"class":111},">百货\u003C\u002F",[101,64284,14],{"class":51289},[101,64286,55303],{"class":111},[101,64288,58],{"class":51289},[101,64290,51296],{"class":111},[101,64292,64293,64295,64297,64299,64301,64303,64305,64307,64310,64312,64314,64316],{"class":103,"line":16784},[101,64294,55291],{"class":111},[101,64296,58],{"class":51289},[101,64298,61041],{"class":111},[101,64300,14],{"class":51289},[101,64302,61046],{"class":1950},[101,64304,157],{"class":111},[101,64306,64225],{"class":216},[101,64308,64309],{"class":111},">个护\u003C\u002F",[101,64311,14],{"class":51289},[101,64313,55303],{"class":111},[101,64315,58],{"class":51289},[101,64317,51296],{"class":111},[101,64319,64320,64322,64324,64326,64328,64330,64332,64334,64337,64339,64341,64343],{"class":103,"line":16789},[101,64321,55291],{"class":111},[101,64323,58],{"class":51289},[101,64325,61041],{"class":111},[101,64327,14],{"class":51289},[101,64329,61046],{"class":1950},[101,64331,157],{"class":111},[101,64333,64225],{"class":216},[101,64335,64336],{"class":111},">预告\u003C\u002F",[101,64338,14],{"class":51289},[101,64340,55303],{"class":111},[101,64342,58],{"class":51289},[101,64344,51296],{"class":111},[101,64346,64347,64349,64351],{"class":103,"line":16803},[101,64348,55396],{"class":111},[101,64350,1118],{"class":51289},[101,64352,51296],{"class":111},[101,64354,64355,64357,64359],{"class":103,"line":16808},[101,64356,51765],{"class":111},[101,64358,51600],{"class":51289},[101,64360,51296],{"class":111},[101,64362,64363,64365,64367,64369,64371,64374],{"class":103,"line":16814},[101,64364,51330],{"class":111},[101,64366,51600],{"class":51289},[101,64368,53475],{"class":1950},[101,64370,157],{"class":111},[101,64372,64373],{"class":216},"\"tab-content\"",[101,64375,51296],{"class":111},[101,64377,64378,64380,64382,64384,64386,64389,64391,64393,64395,64397,64400,64402,64404,64406,64409,64411],{"class":103,"line":16819},[101,64379,55223],{"class":111},[101,64381,51600],{"class":51289},[101,64383,53475],{"class":1950},[101,64385,157],{"class":111},[101,64387,64388],{"class":216},"\"item active\"",[101,64390,61041],{"class":111},[101,64392,1449],{"class":51289},[101,64394,55228],{"class":1950},[101,64396,157],{"class":111},[101,64398,64399],{"class":216},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[101,64401,55236],{"class":1950},[101,64403,157],{"class":111},[101,64405,7640],{"class":216},[101,64407,64408],{"class":111}," \u002F>\u003C\u002F",[101,64410,51600],{"class":51289},[101,64412,51296],{"class":111},[101,64414,64415,64417,64419,64421,64423,64425,64427,64429,64431,64433,64436,64438,64440,64442,64444,64446],{"class":103,"line":16833},[101,64416,55223],{"class":111},[101,64418,51600],{"class":51289},[101,64420,53475],{"class":1950},[101,64422,157],{"class":111},[101,64424,62612],{"class":216},[101,64426,61041],{"class":111},[101,64428,1449],{"class":51289},[101,64430,55228],{"class":1950},[101,64432,157],{"class":111},[101,64434,64435],{"class":216},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[101,64437,55236],{"class":1950},[101,64439,157],{"class":111},[101,64441,7640],{"class":216},[101,64443,64408],{"class":111},[101,64445,51600],{"class":51289},[101,64447,51296],{"class":111},[101,64449,64450,64452,64454,64456,64458,64460,64462,64464,64466,64468,64471,64473,64475,64477,64479,64481],{"class":103,"line":16838},[101,64451,55223],{"class":111},[101,64453,51600],{"class":51289},[101,64455,53475],{"class":1950},[101,64457,157],{"class":111},[101,64459,62612],{"class":216},[101,64461,61041],{"class":111},[101,64463,1449],{"class":51289},[101,64465,55228],{"class":1950},[101,64467,157],{"class":111},[101,64469,64470],{"class":216},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[101,64472,55236],{"class":1950},[101,64474,157],{"class":111},[101,64476,7640],{"class":216},[101,64478,64408],{"class":111},[101,64480,51600],{"class":51289},[101,64482,51296],{"class":111},[101,64484,64485,64487,64489,64491,64493,64495,64497,64499,64501,64503,64506,64508,64510,64512,64514,64516],{"class":103,"line":16843},[101,64486,55223],{"class":111},[101,64488,51600],{"class":51289},[101,64490,53475],{"class":1950},[101,64492,157],{"class":111},[101,64494,62612],{"class":216},[101,64496,61041],{"class":111},[101,64498,1449],{"class":51289},[101,64500,55228],{"class":1950},[101,64502,157],{"class":111},[101,64504,64505],{"class":216},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[101,64507,55236],{"class":1950},[101,64509,157],{"class":111},[101,64511,7640],{"class":216},[101,64513,64408],{"class":111},[101,64515,51600],{"class":51289},[101,64517,51296],{"class":111},[101,64519,64520,64522,64524,64526,64528,64530,64532,64534,64536,64538,64541,64543,64545,64547,64549,64551],{"class":103,"line":16857},[101,64521,55223],{"class":111},[101,64523,51600],{"class":51289},[101,64525,53475],{"class":1950},[101,64527,157],{"class":111},[101,64529,62612],{"class":216},[101,64531,61041],{"class":111},[101,64533,1449],{"class":51289},[101,64535,55228],{"class":1950},[101,64537,157],{"class":111},[101,64539,64540],{"class":216},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[101,64542,55236],{"class":1950},[101,64544,157],{"class":111},[101,64546,7640],{"class":216},[101,64548,64408],{"class":111},[101,64550,51600],{"class":51289},[101,64552,51296],{"class":111},[101,64554,64555,64557,64559],{"class":103,"line":16869},[101,64556,51765],{"class":111},[101,64558,51600],{"class":51289},[101,64560,51296],{"class":111},[101,64562,64563,64565,64567],{"class":103,"line":16874},[101,64564,52406],{"class":111},[101,64566,51600],{"class":51289},[101,64568,51296],{"class":111},[101,64570,64571,64573,64575],{"class":103,"line":16887},[101,64572,52133],{"class":111},[101,64574,51802],{"class":51289},[101,64576,51296],{"class":111},[101,64578,64579],{"class":103,"line":16892},[101,64580,64581],{"class":170},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[101,64583,64584],{"class":103,"line":16897},[101,64585,64586],{"class":170},"    \u002F\u002F 1.1 获取 a 元素 \n",[101,64588,64589,64591,64594,64596,64598,64600,64602,64605],{"class":103,"line":16902},[101,64590,11209],{"class":107},[101,64592,64593],{"class":160}," as",[101,64595,13552],{"class":107},[101,64597,54385],{"class":111},[101,64599,55670],{"class":1950},[101,64601,112],{"class":111},[101,64603,64604],{"class":216},"'.tab-nav a'",[101,64606,118],{"class":111},[101,64608,64609],{"class":103,"line":16915},[101,64610,64611],{"class":170},"    \u002F\u002F console.log(as) \n",[101,64613,64614,64616,64618,64620,64622,64624,64626,64628,64630,64633,64635,64637,64639],{"class":103,"line":16920},[101,64615,3188],{"class":107},[101,64617,1645],{"class":111},[101,64619,51836],{"class":107},[101,64621,9426],{"class":111},[101,64623,157],{"class":107},[101,64625,4080],{"class":160},[101,64627,9433],{"class":111},[101,64629,1021],{"class":107},[101,64631,64632],{"class":111}," as.",[101,64634,51957],{"class":160},[101,64636,3201],{"class":111},[101,64638,2279],{"class":107},[101,64640,12430],{"class":111},[101,64642,64643],{"class":103,"line":32622},[101,64644,64645],{"class":170},"      \u002F\u002F console.log(as[i])\n",[101,64647,64648],{"class":103,"line":32628},[101,64649,64650],{"class":170},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[101,64652,64653,64656,64658,64660,64663,64665,64667],{"class":103,"line":32634},[101,64654,64655],{"class":111},"      as[i].",[101,64657,57802],{"class":1950},[101,64659,112],{"class":111},[101,64661,64662],{"class":216},"'mouseenter'",[101,64664,12423],{"class":111},[101,64666,54438],{"class":107},[101,64668,54441],{"class":111},[101,64670,64671],{"class":103,"line":32640},[101,64672,64673],{"class":170},"        \u002F\u002F console.log('鼠标经过')\n",[101,64675,64676],{"class":103,"line":32646},[101,64677,64678],{"class":170},"        \u002F\u002F 排他思想  \n",[101,64680,64681],{"class":103,"line":32657},[101,64682,64683],{"class":170},"        \u002F\u002F 干掉别人 移除类active\n",[101,64685,64686,64688,64690,64692,64695,64697,64699,64701,64704],{"class":103,"line":32663},[101,64687,51914],{"class":111},[101,64689,54388],{"class":1950},[101,64691,112],{"class":111},[101,64693,64694],{"class":216},"'.tab-nav .active'",[101,64696,56992],{"class":111},[101,64698,56995],{"class":1950},[101,64700,112],{"class":111},[101,64702,64703],{"class":216},"'active'",[101,64705,118],{"class":111},[101,64707,64708],{"class":103,"line":32683},[101,64709,64710],{"class":170},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[101,64712,64713,64716,64719,64721,64723,64725],{"class":103,"line":32689},[101,64714,64715],{"class":160},"        this",[101,64717,64718],{"class":111},".classList.",[101,64720,5322],{"class":1950},[101,64722,112],{"class":111},[101,64724,64703],{"class":216},[101,64726,118],{"class":111},[101,64728,64729],{"class":103,"line":32700},[101,64730,2387],{"emptyLinePlaceholder":27},[101,64732,64733],{"class":103,"line":32706},[101,64734,64735],{"class":170},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[101,64737,64738],{"class":103,"line":32712},[101,64739,64740],{"class":170},"        \u002F\u002F 干掉别人\n",[101,64742,64743,64745,64747,64749,64752,64754,64756,64758,64760],{"class":103,"line":32718},[101,64744,51914],{"class":111},[101,64746,54388],{"class":1950},[101,64748,112],{"class":111},[101,64750,64751],{"class":216},"'.tab-content .active'",[101,64753,56992],{"class":111},[101,64755,56995],{"class":1950},[101,64757,112],{"class":111},[101,64759,64703],{"class":216},[101,64761,118],{"class":111},[101,64763,64764],{"class":103,"line":32724},[101,64765,64766],{"class":170},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[101,64768,64769,64771,64773,64775,64778,64780,64782,64784,64786,64788,64790,64792,64794],{"class":103,"line":32730},[101,64770,51914],{"class":111},[101,64772,54388],{"class":1950},[101,64774,112],{"class":111},[101,64776,64777],{"class":216},"`.tab-content .item:nth-child(${",[101,64779,552],{"class":111},[101,64781,45555],{"class":107},[101,64783,25107],{"class":160},[101,64785,57021],{"class":216},[101,64787,56992],{"class":111},[101,64789,5322],{"class":1950},[101,64791,112],{"class":111},[101,64793,64703],{"class":216},[101,64795,118],{"class":111},[101,64797,64798],{"class":103,"line":32736},[101,64799,2387],{"emptyLinePlaceholder":27},[101,64801,64802],{"class":103,"line":32742},[101,64803,64804],{"class":111},"      })\n",[101,64806,64807],{"class":103,"line":32762},[101,64808,2174],{"class":111},[101,64810,64811,64813,64815],{"class":103,"line":32768},[101,64812,52406],{"class":111},[101,64814,51802],{"class":51289},[101,64816,51296],{"class":111},[101,64818,64819,64821,64823],{"class":103,"line":32784},[101,64820,51774],{"class":111},[101,64822,51789],{"class":51289},[101,64824,51296],{"class":111},[101,64826,64827],{"class":103,"line":32790},[101,64828,2387],{"emptyLinePlaceholder":27},[101,64830,64831,64833,64835],{"class":103,"line":32804},[101,64832,51774],{"class":111},[101,64834,50624],{"class":51289},[101,64836,51296],{"class":111},[10,64838,64839],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[10,64841,64842],{},"在监听事件中，this指向的就是他的调用者",[10,64844,64845],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[10,64847,53709],{},[10,64849,64850],{},"(function () {",[10,64852,64853],{},"const list = document.querySelector('.xtx-elevator-list')",[10,64855,64856],{},"list.addEventListener('click', function (e) {",[10,64858,64859],{},"if (e.target.tagName === 'A') {",[10,64861,64862],{},"\u002F\u002F 排他思想",[10,64864,64865],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[10,64867,64868],{},"const old = document.querySelector('.xtx-elevator-list .active')",[10,64870,64871],{},"\u002F\u002F console.log(old);",[10,64873,64874],{},"\u002F\u002F 判断",[10,64876,64877],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[10,64879,64880],{},"if (old) old.classList.remove('active')",[10,64882,64883],{},"e.target.classList.add('active')",[10,64885,1057],{},[10,64887,52453],{},[10,64889,64890],{},"})();",[72,64892,64894],{"id":64893},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[92,64896,64898],{"className":50622,"code":64897,"language":50624,"meta":20,"style":20},"\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",[98,64899,64900,64910,64914,64922,64926,64940,64954,64966,64974,64980,64990,65000,65004,65008,65015,65027,65038,65055,65068,65082,65092,65096,65100,65107,65118,65136,65146,65158,65162,65166,65173,65190,65201,65213,65217,65221,65228,65240,65244,65252,65260,65264,65272,65280,65288,65303,65347,65355,65368,65381,65394,65402,65410,65418,65446,65454,65466,65479,65492,65500,65508,65516,65542,65550,65563,65575,65588,65596,65604,65612,65638,65646,65659,65671,65684,65692,65700,65708,65713,65733,65738,65758,65763,65780,65785,65793,65798,65827,65840,65844,65848,65853,65857,65885,65890,65907,65912,65917,65922,65927,65953,65957,65961,65969,65977,65981],{"__ignoreMap":20},[101,64901,64902,64904,64906,64908],{"class":103,"line":104},[101,64903,51286],{"class":111},[101,64905,51290],{"class":51289},[101,64907,51293],{"class":1950},[101,64909,51296],{"class":111},[101,64911,64912],{"class":103,"line":21},[101,64913,2387],{"emptyLinePlaceholder":27},[101,64915,64916,64918,64920],{"class":103,"line":1166},[101,64917,1021],{"class":111},[101,64919,50624],{"class":51289},[101,64921,51296],{"class":111},[101,64923,64924],{"class":103,"line":1181},[101,64925,2387],{"emptyLinePlaceholder":27},[101,64927,64928,64930,64932,64934,64936,64938],{"class":103,"line":1187},[101,64929,1021],{"class":111},[101,64931,51323],{"class":51289},[101,64933,51305],{"class":1950},[101,64935,157],{"class":111},[101,64937,51310],{"class":216},[101,64939,51296],{"class":111},[101,64941,64942,64944,64946,64948,64950,64952],{"class":103,"line":1201},[101,64943,52133],{"class":111},[101,64945,51333],{"class":51289},[101,64947,51336],{"class":1950},[101,64949,157],{"class":111},[101,64951,51341],{"class":216},[101,64953,51296],{"class":111},[101,64955,64956,64958,64960,64962,64964],{"class":103,"line":1207},[101,64957,52133],{"class":111},[101,64959,51396],{"class":51289},[101,64961,55303],{"class":111},[101,64963,51396],{"class":51289},[101,64965,51296],{"class":111},[101,64967,64968,64970,64972],{"class":103,"line":1298},[101,64969,52133],{"class":111},[101,64971,5114],{"class":51289},[101,64973,51296],{"class":111},[101,64975,64976,64978],{"class":103,"line":1304},[101,64977,6391],{"class":51289},[101,64979,15560],{"class":111},[101,64981,64982,64984,64986,64988],{"class":103,"line":1316},[101,64983,54695],{"class":160},[101,64985,51426],{"class":111},[101,64987,303],{"class":160},[101,64989,1277],{"class":111},[101,64991,64992,64994,64996,64998],{"class":103,"line":1599},[101,64993,54684],{"class":160},[101,64995,51426],{"class":111},[101,64997,303],{"class":160},[101,64999,1277],{"class":111},[101,65001,65002],{"class":103,"line":1604},[101,65003,2174],{"class":111},[101,65005,65006],{"class":103,"line":1610},[101,65007,2387],{"emptyLinePlaceholder":27},[101,65009,65010,65013],{"class":103,"line":1615},[101,65011,65012],{"class":51289},"    table",[101,65014,15560],{"class":111},[101,65016,65017,65020,65022,65025],{"class":103,"line":1629},[101,65018,65019],{"class":160},"      border-collapse",[101,65021,51426],{"class":111},[101,65023,65024],{"class":160},"collapse",[101,65026,1277],{"class":111},[101,65028,65029,65032,65034,65036],{"class":103,"line":1634},[101,65030,65031],{"class":160},"      border-spacing",[101,65033,51426],{"class":111},[101,65035,303],{"class":160},[101,65037,1277],{"class":111},[101,65039,65040,65042,65044,65046,65048,65050,65053],{"class":103,"line":1640},[101,65041,61966],{"class":160},[101,65043,51426],{"class":111},[101,65045,329],{"class":160},[101,65047,51481],{"class":107},[101,65049,51510],{"class":160},[101,65051,65052],{"class":160}," #c0c0c0",[101,65054,1277],{"class":111},[101,65056,65057,65059,65061,65064,65066],{"class":103,"line":1661},[101,65058,54760],{"class":160},[101,65060,51426],{"class":111},[101,65062,65063],{"class":160},"500",[101,65065,51481],{"class":107},[101,65067,1277],{"class":111},[101,65069,65070,65072,65074,65076,65078,65080],{"class":103,"line":1666},[101,65071,54695],{"class":160},[101,65073,51426],{"class":111},[101,65075,422],{"class":160},[101,65077,51481],{"class":107},[101,65079,51545],{"class":160},[101,65081,1277],{"class":111},[101,65083,65084,65086,65088,65090],{"class":103,"line":1680},[101,65085,57275],{"class":160},[101,65087,51426],{"class":111},[101,65089,51581],{"class":160},[101,65091,1277],{"class":111},[101,65093,65094],{"class":103,"line":1685},[101,65095,2174],{"class":111},[101,65097,65098],{"class":103,"line":1714},[101,65099,2387],{"emptyLinePlaceholder":27},[101,65101,65102,65105],{"class":103,"line":1719},[101,65103,65104],{"class":51289},"    th",[101,65106,15560],{"class":111},[101,65108,65109,65111,65113,65116],{"class":103,"line":1736},[101,65110,54873],{"class":160},[101,65112,51426],{"class":111},[101,65114,65115],{"class":160},"#09c",[101,65117,1277],{"class":111},[101,65119,65120,65123,65125,65127,65129,65131,65134],{"class":103,"line":1741},[101,65121,65122],{"class":160},"      font",[101,65124,51426],{"class":111},[101,65126,62328],{"class":160},[101,65128,64062],{"class":160},[101,65130,51481],{"class":107},[101,65132,65133],{"class":216}," \"微软雅黑\"",[101,65135,1277],{"class":111},[101,65137,65138,65140,65142,65144],{"class":103,"line":1746},[101,65139,57405],{"class":160},[101,65141,51426],{"class":111},[101,65143,60831],{"class":160},[101,65145,1277],{"class":111},[101,65147,65148,65150,65152,65154,65156],{"class":103,"line":1751},[101,65149,54774],{"class":160},[101,65151,51426],{"class":111},[101,65153,911],{"class":160},[101,65155,51481],{"class":107},[101,65157,1277],{"class":111},[101,65159,65160],{"class":103,"line":1765},[101,65161,2174],{"class":111},[101,65163,65164],{"class":103,"line":1770},[101,65165,2387],{"emptyLinePlaceholder":27},[101,65167,65168,65171],{"class":103,"line":2564},[101,65169,65170],{"class":51289},"    td",[101,65172,15560],{"class":111},[101,65174,65175,65177,65179,65181,65183,65185,65188],{"class":103,"line":2578},[101,65176,61966],{"class":160},[101,65178,51426],{"class":111},[101,65180,329],{"class":160},[101,65182,51481],{"class":107},[101,65184,51510],{"class":160},[101,65186,65187],{"class":160}," #d0d0d0",[101,65189,1277],{"class":111},[101,65191,65192,65194,65196,65199],{"class":103,"line":2586},[101,65193,57405],{"class":160},[101,65195,51426],{"class":111},[101,65197,65198],{"class":160},"#404060",[101,65200,1277],{"class":111},[101,65202,65203,65205,65207,65209,65211],{"class":103,"line":2591},[101,65204,54684],{"class":160},[101,65206,51426],{"class":111},[101,65208,557],{"class":160},[101,65210,51481],{"class":107},[101,65212,1277],{"class":111},[101,65214,65215],{"class":103,"line":2597},[101,65216,2174],{"class":111},[101,65218,65219],{"class":103,"line":2603},[101,65220,2387],{"emptyLinePlaceholder":27},[101,65222,65223,65226],{"class":103,"line":2608},[101,65224,65225],{"class":1950},"    .allCheck",[101,65227,15560],{"class":111},[101,65229,65230,65232,65234,65236,65238],{"class":103,"line":7936},[101,65231,54760],{"class":160},[101,65233,51426],{"class":111},[101,65235,723],{"class":160},[101,65237,51481],{"class":107},[101,65239,1277],{"class":111},[101,65241,65242],{"class":103,"line":7960},[101,65243,2174],{"class":111},[101,65245,65246,65248,65250],{"class":103,"line":7965},[101,65247,52406],{"class":111},[101,65249,5114],{"class":51289},[101,65251,51296],{"class":111},[101,65253,65254,65256,65258],{"class":103,"line":7971},[101,65255,51774],{"class":111},[101,65257,51323],{"class":51289},[101,65259,51296],{"class":111},[101,65261,65262],{"class":103,"line":7998},[101,65263,2387],{"emptyLinePlaceholder":27},[101,65265,65266,65268,65270],{"class":103,"line":8003},[101,65267,1021],{"class":111},[101,65269,51789],{"class":51289},[101,65271,51296],{"class":111},[101,65273,65274,65276,65278],{"class":103,"line":8009},[101,65275,52133],{"class":111},[101,65277,249],{"class":51289},[101,65279,51296],{"class":111},[101,65281,65282,65284,65286],{"class":103,"line":8021},[101,65283,51330],{"class":111},[101,65285,255],{"class":51289},[101,65287,51296],{"class":111},[101,65289,65290,65292,65294,65296,65298,65301],{"class":103,"line":8033},[101,65291,55223],{"class":111},[101,65293,258],{"class":51289},[101,65295,53475],{"class":1950},[101,65297,157],{"class":111},[101,65299,65300],{"class":216},"\"allCheck\"",[101,65302,51296],{"class":111},[101,65304,65305,65307,65309,65311,65313,65315,65317,65319,65321,65323,65325,65328,65331,65333,65335,65337,65340,65343,65345],{"class":103,"line":8045},[101,65306,55291],{"class":111},[101,65308,53810],{"class":51289},[101,65310,53813],{"class":1950},[101,65312,157],{"class":111},[101,65314,53818],{"class":216},[101,65316,14908],{"class":1950},[101,65318,157],{"class":111},[101,65320,7640],{"class":216},[101,65322,14947],{"class":1950},[101,65324,157],{"class":111},[101,65326,65327],{"class":216},"\"checkAll\"",[101,65329,65330],{"class":111},"> \u003C",[101,65332,101],{"class":51289},[101,65334,53475],{"class":1950},[101,65336,157],{"class":111},[101,65338,65339],{"class":216},"\"all\"",[101,65341,65342],{"class":111},">全选\u003C\u002F",[101,65344,101],{"class":51289},[101,65346,51296],{"class":111},[101,65348,65349,65351,65353],{"class":103,"line":9704},[101,65350,55396],{"class":111},[101,65352,258],{"class":51289},[101,65354,51296],{"class":111},[101,65356,65357,65359,65361,65364,65366],{"class":103,"line":9729},[101,65358,55223],{"class":111},[101,65360,258],{"class":51289},[101,65362,65363],{"class":111},">商品\u003C\u002F",[101,65365,258],{"class":51289},[101,65367,51296],{"class":111},[101,65369,65370,65372,65374,65377,65379],{"class":103,"line":9752},[101,65371,55223],{"class":111},[101,65373,258],{"class":51289},[101,65375,65376],{"class":111},">商家\u003C\u002F",[101,65378,258],{"class":51289},[101,65380,51296],{"class":111},[101,65382,65383,65385,65387,65390,65392],{"class":103,"line":9776},[101,65384,55223],{"class":111},[101,65386,258],{"class":51289},[101,65388,65389],{"class":111},">价格\u003C\u002F",[101,65391,258],{"class":51289},[101,65393,51296],{"class":111},[101,65395,65396,65398,65400],{"class":103,"line":9781},[101,65397,51765],{"class":111},[101,65399,255],{"class":51289},[101,65401,51296],{"class":111},[101,65403,65404,65406,65408],{"class":103,"line":9786},[101,65405,51330],{"class":111},[101,65407,255],{"class":51289},[101,65409,51296],{"class":111},[101,65411,65412,65414,65416],{"class":103,"line":9791},[101,65413,55223],{"class":111},[101,65415,301],{"class":51289},[101,65417,51296],{"class":111},[101,65419,65420,65422,65424,65426,65428,65430,65432,65434,65437,65439,65441,65444],{"class":103,"line":9800},[101,65421,55291],{"class":111},[101,65423,53810],{"class":51289},[101,65425,53813],{"class":1950},[101,65427,157],{"class":111},[101,65429,53818],{"class":216},[101,65431,14908],{"class":1950},[101,65433,157],{"class":111},[101,65435,65436],{"class":216},"\"check\"",[101,65438,53475],{"class":1950},[101,65440,157],{"class":111},[101,65442,65443],{"class":216},"\"ck\"",[101,65445,51296],{"class":111},[101,65447,65448,65450,65452],{"class":103,"line":9805},[101,65449,55396],{"class":111},[101,65451,301],{"class":51289},[101,65453,51296],{"class":111},[101,65455,65456,65458,65460,65462,65464],{"class":103,"line":9811},[101,65457,55223],{"class":111},[101,65459,301],{"class":51289},[101,65461,61162],{"class":111},[101,65463,301],{"class":51289},[101,65465,51296],{"class":111},[101,65467,65468,65470,65472,65475,65477],{"class":103,"line":9832},[101,65469,55223],{"class":111},[101,65471,301],{"class":51289},[101,65473,65474],{"class":111},">小米\u003C\u002F",[101,65476,301],{"class":51289},[101,65478,51296],{"class":111},[101,65480,65481,65483,65485,65488,65490],{"class":103,"line":9838},[101,65482,55223],{"class":111},[101,65484,301],{"class":51289},[101,65486,65487],{"class":111},">￥1999\u003C\u002F",[101,65489,301],{"class":51289},[101,65491,51296],{"class":111},[101,65493,65494,65496,65498],{"class":103,"line":9852},[101,65495,51765],{"class":111},[101,65497,255],{"class":51289},[101,65499,51296],{"class":111},[101,65501,65502,65504,65506],{"class":103,"line":9858},[101,65503,51330],{"class":111},[101,65505,255],{"class":51289},[101,65507,51296],{"class":111},[101,65509,65510,65512,65514],{"class":103,"line":9885},[101,65511,55223],{"class":111},[101,65513,301],{"class":51289},[101,65515,51296],{"class":111},[101,65517,65518,65520,65522,65524,65526,65528,65530,65532,65534,65536,65538,65540],{"class":103,"line":9894},[101,65519,55291],{"class":111},[101,65521,53810],{"class":51289},[101,65523,53813],{"class":1950},[101,65525,157],{"class":111},[101,65527,53818],{"class":216},[101,65529,14908],{"class":1950},[101,65531,157],{"class":111},[101,65533,65436],{"class":216},[101,65535,53475],{"class":1950},[101,65537,157],{"class":111},[101,65539,65443],{"class":216},[101,65541,51296],{"class":111},[101,65543,65544,65546,65548],{"class":103,"line":9900},[101,65545,55396],{"class":111},[101,65547,301],{"class":51289},[101,65549,51296],{"class":111},[101,65551,65552,65554,65556,65559,65561],{"class":103,"line":9908},[101,65553,55223],{"class":111},[101,65555,301],{"class":51289},[101,65557,65558],{"class":111},">小米净水器\u003C\u002F",[101,65560,301],{"class":51289},[101,65562,51296],{"class":111},[101,65564,65565,65567,65569,65571,65573],{"class":103,"line":9913},[101,65566,55223],{"class":111},[101,65568,301],{"class":51289},[101,65570,65474],{"class":111},[101,65572,301],{"class":51289},[101,65574,51296],{"class":111},[101,65576,65577,65579,65581,65584,65586],{"class":103,"line":16592},[101,65578,55223],{"class":111},[101,65580,301],{"class":51289},[101,65582,65583],{"class":111},">￥4999\u003C\u002F",[101,65585,301],{"class":51289},[101,65587,51296],{"class":111},[101,65589,65590,65592,65594],{"class":103,"line":16598},[101,65591,51765],{"class":111},[101,65593,255],{"class":51289},[101,65595,51296],{"class":111},[101,65597,65598,65600,65602],{"class":103,"line":16621},[101,65599,51330],{"class":111},[101,65601,255],{"class":51289},[101,65603,51296],{"class":111},[101,65605,65606,65608,65610],{"class":103,"line":16627},[101,65607,55223],{"class":111},[101,65609,301],{"class":51289},[101,65611,51296],{"class":111},[101,65613,65614,65616,65618,65620,65622,65624,65626,65628,65630,65632,65634,65636],{"class":103,"line":16650},[101,65615,55291],{"class":111},[101,65617,53810],{"class":51289},[101,65619,53813],{"class":1950},[101,65621,157],{"class":111},[101,65623,53818],{"class":216},[101,65625,14908],{"class":1950},[101,65627,157],{"class":111},[101,65629,65436],{"class":216},[101,65631,53475],{"class":1950},[101,65633,157],{"class":111},[101,65635,65443],{"class":216},[101,65637,51296],{"class":111},[101,65639,65640,65642,65644],{"class":103,"line":16664},[101,65641,55396],{"class":111},[101,65643,301],{"class":51289},[101,65645,51296],{"class":111},[101,65647,65648,65650,65652,65655,65657],{"class":103,"line":16684},[101,65649,55223],{"class":111},[101,65651,301],{"class":51289},[101,65653,65654],{"class":111},">小米电视\u003C\u002F",[101,65656,301],{"class":51289},[101,65658,51296],{"class":111},[101,65660,65661,65663,65665,65667,65669],{"class":103,"line":16690},[101,65662,55223],{"class":111},[101,65664,301],{"class":51289},[101,65666,65474],{"class":111},[101,65668,301],{"class":51289},[101,65670,51296],{"class":111},[101,65672,65673,65675,65677,65680,65682],{"class":103,"line":16701},[101,65674,55223],{"class":111},[101,65676,301],{"class":51289},[101,65678,65679],{"class":111},">￥5999\u003C\u002F",[101,65681,301],{"class":51289},[101,65683,51296],{"class":111},[101,65685,65686,65688,65690],{"class":103,"line":16724},[101,65687,51765],{"class":111},[101,65689,255],{"class":51289},[101,65691,51296],{"class":111},[101,65693,65694,65696,65698],{"class":103,"line":16746},[101,65695,52406],{"class":111},[101,65697,249],{"class":51289},[101,65699,51296],{"class":111},[101,65701,65702,65704,65706],{"class":103,"line":16751},[101,65703,52133],{"class":111},[101,65705,51802],{"class":51289},[101,65707,51296],{"class":111},[101,65709,65710],{"class":103,"line":16757},[101,65711,65712],{"class":170},"    \u002F\u002F 1. 获取大复选框\n",[101,65714,65715,65717,65720,65722,65724,65726,65728,65731],{"class":103,"line":16771},[101,65716,11209],{"class":107},[101,65718,65719],{"class":160}," checkAll",[101,65721,13552],{"class":107},[101,65723,54385],{"class":111},[101,65725,54388],{"class":1950},[101,65727,112],{"class":111},[101,65729,65730],{"class":216},"'#checkAll'",[101,65732,118],{"class":111},[101,65734,65735],{"class":103,"line":16784},[101,65736,65737],{"class":170},"    \u002F\u002F 2. 获取所有的小复选框\n",[101,65739,65740,65742,65745,65747,65749,65751,65753,65756],{"class":103,"line":16789},[101,65741,11209],{"class":107},[101,65743,65744],{"class":160}," cks",[101,65746,13552],{"class":107},[101,65748,54385],{"class":111},[101,65750,55670],{"class":1950},[101,65752,112],{"class":111},[101,65754,65755],{"class":216},"'.ck'",[101,65757,118],{"class":111},[101,65759,65760],{"class":103,"line":16803},[101,65761,65762],{"class":170},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[101,65764,65765,65768,65770,65772,65774,65776,65778],{"class":103,"line":16808},[101,65766,65767],{"class":111},"    checkAll.",[101,65769,57802],{"class":1950},[101,65771,112],{"class":111},[101,65773,57807],{"class":216},[101,65775,12423],{"class":111},[101,65777,54438],{"class":107},[101,65779,54441],{"class":111},[101,65781,65782],{"class":103,"line":16814},[101,65783,65784],{"class":170},"      \u002F\u002F 得到当前大复选框的选中状态\n",[101,65786,65787,65790],{"class":103,"line":16819},[101,65788,65789],{"class":170},"      \u002F\u002F console.log(checkAll.checked)",[101,65791,65792],{"class":170},"  \u002F\u002F 得到 是 true 或者是 false\n",[101,65794,65795],{"class":103,"line":16833},[101,65796,65797],{"class":170},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[101,65799,65800,65802,65804,65806,65808,65810,65812,65814,65816,65819,65821,65823,65825],{"class":103,"line":16838},[101,65801,52273],{"class":107},[101,65803,1645],{"class":111},[101,65805,51836],{"class":107},[101,65807,9426],{"class":111},[101,65809,157],{"class":107},[101,65811,4080],{"class":160},[101,65813,9433],{"class":111},[101,65815,1021],{"class":107},[101,65817,65818],{"class":111}," cks.",[101,65820,51957],{"class":160},[101,65822,3201],{"class":111},[101,65824,2279],{"class":107},[101,65826,12430],{"class":111},[101,65828,65829,65832,65834,65837],{"class":103,"line":16843},[101,65830,65831],{"class":111},"        cks[i].checked ",[101,65833,157],{"class":107},[101,65835,65836],{"class":160}," this",[101,65838,65839],{"class":111},".checked\n",[101,65841,65842],{"class":103,"line":16857},[101,65843,52387],{"class":111},[101,65845,65846],{"class":103,"line":16869},[101,65847,33450],{"class":111},[101,65849,65850],{"class":103,"line":16874},[101,65851,65852],{"class":170},"    \u002F\u002F 5. 小复选框控制大复选框\n",[101,65854,65855],{"class":103,"line":16887},[101,65856,2387],{"emptyLinePlaceholder":27},[101,65858,65859,65861,65863,65865,65867,65869,65871,65873,65875,65877,65879,65881,65883],{"class":103,"line":16892},[101,65860,3188],{"class":107},[101,65862,1645],{"class":111},[101,65864,51836],{"class":107},[101,65866,9426],{"class":111},[101,65868,157],{"class":107},[101,65870,4080],{"class":160},[101,65872,9433],{"class":111},[101,65874,1021],{"class":107},[101,65876,65818],{"class":111},[101,65878,51957],{"class":160},[101,65880,3201],{"class":111},[101,65882,2279],{"class":107},[101,65884,12430],{"class":111},[101,65886,65887],{"class":103,"line":16897},[101,65888,65889],{"class":170},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[101,65891,65892,65895,65897,65899,65901,65903,65905],{"class":103,"line":16902},[101,65893,65894],{"class":111},"      cks[i].",[101,65896,57802],{"class":1950},[101,65898,112],{"class":111},[101,65900,57807],{"class":216},[101,65902,12423],{"class":111},[101,65904,54438],{"class":107},[101,65906,54441],{"class":111},[101,65908,65909],{"class":103,"line":16915},[101,65910,65911],{"class":170},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[101,65913,65914],{"class":103,"line":16920},[101,65915,65916],{"class":170},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[101,65918,65919],{"class":103,"line":32622},[101,65920,65921],{"class":170},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[101,65923,65924],{"class":103,"line":32628},[101,65925,65926],{"class":170},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[101,65928,65929,65932,65934,65936,65938,65940,65943,65945,65947,65949,65951],{"class":103,"line":32634},[101,65930,65931],{"class":111},"        checkAll.checked ",[101,65933,157],{"class":107},[101,65935,54385],{"class":111},[101,65937,55670],{"class":1950},[101,65939,112],{"class":111},[101,65941,65942],{"class":216},"'.ck:checked'",[101,65944,30815],{"class":111},[101,65946,51957],{"class":160},[101,65948,57895],{"class":107},[101,65950,65818],{"class":111},[101,65952,55820],{"class":160},[101,65954,65955],{"class":103,"line":32640},[101,65956,64804],{"class":111},[101,65958,65959],{"class":103,"line":32646},[101,65960,2174],{"class":111},[101,65962,65963,65965,65967],{"class":103,"line":32657},[101,65964,52406],{"class":111},[101,65966,51802],{"class":51289},[101,65968,51296],{"class":111},[101,65970,65971,65973,65975],{"class":103,"line":32663},[101,65972,51774],{"class":111},[101,65974,51789],{"class":51289},[101,65976,51296],{"class":111},[101,65978,65979],{"class":103,"line":32683},[101,65980,2387],{"emptyLinePlaceholder":27},[101,65982,65983,65985,65987],{"class":103,"line":32689},[101,65984,51774],{"class":111},[101,65986,50624],{"class":51289},[101,65988,51296],{"class":111},[10,65990,65991],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[10,65993,65994],{},"用好之间比较得到的布尔值！！！",[10,65996,65997,65998,66001,66002,1645,66005,695,66007,66010],{},"在 JS 里访问的时候，",[98,65999,66000],{},"checkbox.checked"," 是一个 ",[261,66003,66004],{},"布尔值",[98,66006,1349],{},[98,66008,66009],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[10,66012,66013,66014,66017,66018],{},"HTML 的 ",[98,66015,66016],{},"checked=\"checked\""," 只是 ",[261,66019,66020,66021,66024],{},"初始值；JS 的 ",[98,66022,66023],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[10,66026,66027],{},"：checked是一个伪类选择器",[10,66029,66030],{},[1449,66031],{"alt":20,"src":66032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[10,66034,66035,66038],{},[66036,66037],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[10,66040,66041],{},[1449,66042],{"alt":20,"src":66043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[43,66045,66047],{"id":66046},"_33-dom事件进阶","3.3 DOM事件进阶",[72,66049,66051],{"id":66050},"_331-事件流","3.3.1 事件流",[10,66053,66054],{},[1449,66055],{"alt":20,"src":66056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21986,66058,66060],{"id":66059},"_3311-事件捕获","3.3.1.1 事件捕获",[10,66062,66063],{},[1449,66064],{"alt":20,"src":66065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[92,66067,66069],{"className":50622,"code":66068,"language":50624,"meta":20,"style":20},"\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",[98,66070,66071,66081,66095,66099,66107,66121,66141,66153,66161,66168,66180,66192,66202,66206,66210,66217,66229,66241,66251,66255,66263,66271,66275,66283,66298,66317,66325,66333,66353,66373,66389,66400,66408,66425,66436,66444,66461,66472,66480,66488,66496,66500],{"__ignoreMap":20},[101,66072,66073,66075,66077,66079],{"class":103,"line":104},[101,66074,51286],{"class":111},[101,66076,51290],{"class":51289},[101,66078,51293],{"class":1950},[101,66080,51296],{"class":111},[101,66082,66083,66085,66087,66089,66091,66093],{"class":103,"line":21},[101,66084,1021],{"class":111},[101,66086,50624],{"class":51289},[101,66088,51305],{"class":1950},[101,66090,157],{"class":111},[101,66092,51310],{"class":216},[101,66094,51296],{"class":111},[101,66096,66097],{"class":103,"line":1166},[101,66098,2387],{"emptyLinePlaceholder":27},[101,66100,66101,66103,66105],{"class":103,"line":1181},[101,66102,1021],{"class":111},[101,66104,51323],{"class":51289},[101,66106,51296],{"class":111},[101,66108,66109,66111,66113,66115,66117,66119],{"class":103,"line":1187},[101,66110,52133],{"class":111},[101,66112,51333],{"class":51289},[101,66114,51336],{"class":1950},[101,66116,157],{"class":111},[101,66118,51341],{"class":216},[101,66120,51296],{"class":111},[101,66122,66123,66125,66127,66129,66131,66133,66135,66137,66139],{"class":103,"line":1201},[101,66124,52133],{"class":111},[101,66126,51333],{"class":51289},[101,66128,14908],{"class":1950},[101,66130,157],{"class":111},[101,66132,51380],{"class":216},[101,66134,51360],{"class":1950},[101,66136,157],{"class":111},[101,66138,51387],{"class":216},[101,66140,51296],{"class":111},[101,66142,66143,66145,66147,66149,66151],{"class":103,"line":1207},[101,66144,52133],{"class":111},[101,66146,51396],{"class":51289},[101,66148,51399],{"class":111},[101,66150,51396],{"class":51289},[101,66152,51296],{"class":111},[101,66154,66155,66157,66159],{"class":103,"line":1298},[101,66156,52133],{"class":111},[101,66158,5114],{"class":51289},[101,66160,51296],{"class":111},[101,66162,66163,66166],{"class":103,"line":1304},[101,66164,66165],{"class":1950},"    .father",[101,66167,15560],{"class":111},[101,66169,66170,66172,66174,66176,66178],{"class":103,"line":1316},[101,66171,54760],{"class":160},[101,66173,51426],{"class":111},[101,66175,65063],{"class":160},[101,66177,51481],{"class":107},[101,66179,1277],{"class":111},[101,66181,66182,66184,66186,66188,66190],{"class":103,"line":1599},[101,66183,54774],{"class":160},[101,66185,51426],{"class":111},[101,66187,65063],{"class":160},[101,66189,51481],{"class":107},[101,66191,1277],{"class":111},[101,66193,66194,66196,66198,66200],{"class":103,"line":1604},[101,66195,54873],{"class":160},[101,66197,51426],{"class":111},[101,66199,51634],{"class":160},[101,66201,1277],{"class":111},[101,66203,66204],{"class":103,"line":1610},[101,66205,2174],{"class":111},[101,66207,66208],{"class":103,"line":1615},[101,66209,2387],{"emptyLinePlaceholder":27},[101,66211,66212,66215],{"class":103,"line":1629},[101,66213,66214],{"class":1950},"    .son",[101,66216,15560],{"class":111},[101,66218,66219,66221,66223,66225,66227],{"class":103,"line":1634},[101,66220,54760],{"class":160},[101,66222,51426],{"class":111},[101,66224,1709],{"class":160},[101,66226,51481],{"class":107},[101,66228,1277],{"class":111},[101,66230,66231,66233,66235,66237,66239],{"class":103,"line":1640},[101,66232,54774],{"class":160},[101,66234,51426],{"class":111},[101,66236,1709],{"class":160},[101,66238,51481],{"class":107},[101,66240,1277],{"class":111},[101,66242,66243,66245,66247,66249],{"class":103,"line":1661},[101,66244,54873],{"class":160},[101,66246,51426],{"class":111},[101,66248,54878],{"class":160},[101,66250,1277],{"class":111},[101,66252,66253],{"class":103,"line":1666},[101,66254,2174],{"class":111},[101,66256,66257,66259,66261],{"class":103,"line":1680},[101,66258,52406],{"class":111},[101,66260,5114],{"class":51289},[101,66262,51296],{"class":111},[101,66264,66265,66267,66269],{"class":103,"line":1685},[101,66266,51774],{"class":111},[101,66268,51323],{"class":51289},[101,66270,51296],{"class":111},[101,66272,66273],{"class":103,"line":1714},[101,66274,2387],{"emptyLinePlaceholder":27},[101,66276,66277,66279,66281],{"class":103,"line":1719},[101,66278,1021],{"class":111},[101,66280,51789],{"class":51289},[101,66282,51296],{"class":111},[101,66284,66285,66287,66289,66291,66293,66296],{"class":103,"line":1736},[101,66286,52133],{"class":111},[101,66288,51600],{"class":51289},[101,66290,53475],{"class":1950},[101,66292,157],{"class":111},[101,66294,66295],{"class":216},"\"father\"",[101,66297,51296],{"class":111},[101,66299,66300,66302,66304,66306,66308,66311,66313,66315],{"class":103,"line":1741},[101,66301,51330],{"class":111},[101,66303,51600],{"class":51289},[101,66305,53475],{"class":1950},[101,66307,157],{"class":111},[101,66309,66310],{"class":216},"\"son\"",[101,66312,55303],{"class":111},[101,66314,51600],{"class":51289},[101,66316,51296],{"class":111},[101,66318,66319,66321,66323],{"class":103,"line":1746},[101,66320,52406],{"class":111},[101,66322,51600],{"class":51289},[101,66324,51296],{"class":111},[101,66326,66327,66329,66331],{"class":103,"line":1751},[101,66328,52133],{"class":111},[101,66330,51802],{"class":51289},[101,66332,51296],{"class":111},[101,66334,66335,66337,66340,66342,66344,66346,66348,66351],{"class":103,"line":1765},[101,66336,11209],{"class":107},[101,66338,66339],{"class":160}," fa",[101,66341,13552],{"class":107},[101,66343,54385],{"class":111},[101,66345,54388],{"class":1950},[101,66347,112],{"class":111},[101,66349,66350],{"class":216},"'.father'",[101,66352,118],{"class":111},[101,66354,66355,66357,66360,66362,66364,66366,66368,66371],{"class":103,"line":1770},[101,66356,11209],{"class":107},[101,66358,66359],{"class":160}," son",[101,66361,13552],{"class":107},[101,66363,54385],{"class":111},[101,66365,54388],{"class":1950},[101,66367,112],{"class":111},[101,66369,66370],{"class":216},"'.son'",[101,66372,118],{"class":111},[101,66374,66375,66377,66379,66381,66383,66385,66387],{"class":103,"line":2564},[101,66376,52396],{"class":111},[101,66378,57802],{"class":1950},[101,66380,112],{"class":111},[101,66382,57807],{"class":216},[101,66384,12423],{"class":111},[101,66386,54438],{"class":107},[101,66388,54441],{"class":111},[101,66390,66391,66393,66395,66398],{"class":103,"line":2578},[101,66392,58914],{"class":1950},[101,66394,112],{"class":111},[101,66396,66397],{"class":216},"'woshiu1'",[101,66399,118],{"class":111},[101,66401,66402,66404,66406],{"class":103,"line":2586},[101,66403,54524],{"class":111},[101,66405,1349],{"class":160},[101,66407,118],{"class":111},[101,66409,66410,66413,66415,66417,66419,66421,66423],{"class":103,"line":2591},[101,66411,66412],{"class":111},"    fa.",[101,66414,57802],{"class":1950},[101,66416,112],{"class":111},[101,66418,57807],{"class":216},[101,66420,12423],{"class":111},[101,66422,54438],{"class":107},[101,66424,54441],{"class":111},[101,66426,66427,66429,66431,66434],{"class":103,"line":2597},[101,66428,58914],{"class":1950},[101,66430,112],{"class":111},[101,66432,66433],{"class":216},"'1'",[101,66435,118],{"class":111},[101,66437,66438,66440,66442],{"class":103,"line":2603},[101,66439,54524],{"class":111},[101,66441,1349],{"class":160},[101,66443,118],{"class":111},[101,66445,66446,66449,66451,66453,66455,66457,66459],{"class":103,"line":2608},[101,66447,66448],{"class":111},"    son.",[101,66450,57802],{"class":1950},[101,66452,112],{"class":111},[101,66454,57807],{"class":216},[101,66456,12423],{"class":111},[101,66458,54438],{"class":107},[101,66460,54441],{"class":111},[101,66462,66463,66465,66467,66470],{"class":103,"line":7936},[101,66464,58914],{"class":1950},[101,66466,112],{"class":111},[101,66468,66469],{"class":216},"'2'",[101,66471,118],{"class":111},[101,66473,66474,66476,66478],{"class":103,"line":7960},[101,66475,54524],{"class":111},[101,66477,1349],{"class":160},[101,66479,118],{"class":111},[101,66481,66482,66484,66486],{"class":103,"line":7965},[101,66483,52406],{"class":111},[101,66485,51802],{"class":51289},[101,66487,51296],{"class":111},[101,66489,66490,66492,66494],{"class":103,"line":7971},[101,66491,51774],{"class":111},[101,66493,51789],{"class":51289},[101,66495,51296],{"class":111},[101,66497,66498],{"class":103,"line":7998},[101,66499,2387],{"emptyLinePlaceholder":27},[101,66501,66502,66504,66506],{"class":103,"line":8003},[101,66503,51774],{"class":111},[101,66505,50624],{"class":51289},[101,66507,51296],{"class":111},[10,66509,66510],{},[1449,66511],{"alt":20,"src":66512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[10,66514,66515],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21986,66517,66519],{"id":66518},"_3312-事件冒泡","3.3.1.2 事件冒泡",[10,66521,66522],{},[1449,66523],{"alt":20,"src":66524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[10,66526,66527],{},"反着来",[10,66529,66530],{},"注意是同名事件，比如都是‘click’",[21986,66532,66534],{"id":66533},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[10,66536,66537],{},[1449,66538],{"alt":20,"src":66539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21986,66541,66543],{"id":66542},"_3314-解绑事件","3.3.1.4 解绑事件",[10,66545,66546],{},[1449,66547],{"alt":20,"src":66548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[10,66550,66551],{},[1449,66552],{"alt":20,"src":66553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21986,66555,66557],{"id":66556},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[55,66559,66560],{},[58,66561,66562],{},"事件类型的区别",[10,66564,66565],{},[1449,66566],{"alt":20,"src":66567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[10,66569,66570],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[55,66572,66573],{"start":21},[58,66574,66575],{},"注册事件的区别",[10,66577,66578],{},[1449,66579],{"alt":20,"src":66580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21986,66582,66584],{"id":66583},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[10,66586,66587],{},[1449,66588],{"alt":20,"src":66589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[10,66591,66592],{},[1449,66593],{"alt":20,"src":66594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[92,66596,66598],{"className":53056,"code":66597,"language":53058,"meta":20,"style":20},"\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",[98,66599,66600,66608,66625,66648,66656,66661,66666,66671,66675,66683,66691],{"__ignoreMap":20},[101,66601,66602,66604,66606],{"class":103,"line":104},[101,66603,1021],{"class":111},[101,66605,51789],{"class":51289},[101,66607,51296],{"class":111},[101,66609,66610,66612,66615,66618,66620,66623],{"class":103,"line":21},[101,66611,52133],{"class":111},[101,66613,66614],{"class":51289},"form",[101,66616,66617],{"class":1950}," action",[101,66619,157],{"class":111},[101,66621,66622],{"class":216},"\"http:\u002F\u002Fwww.itcast.cn\"",[101,66624,51296],{"class":111},[101,66626,66627,66629,66631,66633,66635,66638,66641,66643,66646],{"class":103,"line":1166},[101,66628,51330],{"class":111},[101,66630,53810],{"class":51289},[101,66632,53813],{"class":1950},[101,66634,157],{"class":111},[101,66636,66637],{"class":216},"\"submit\"",[101,66639,66640],{"class":1950}," value",[101,66642,157],{"class":111},[101,66644,66645],{"class":216},"\"免费注册\"",[101,66647,51296],{"class":111},[101,66649,66650,66652,66654],{"class":103,"line":1181},[101,66651,51330],{"class":111},[101,66653,51802],{"class":51289},[101,66655,51296],{"class":111},[101,66657,66658],{"class":103,"line":1187},[101,66659,66660],{"class":111},"      const form = document.querySelector('form')\n",[101,66662,66663],{"class":103,"line":1201},[101,66664,66665],{"class":111},"      form.addEventListener('submit', function (e) {\n",[101,66667,66668],{"class":103,"line":1207},[101,66669,66670],{"class":111},"        e.preventDefault()\n",[101,66672,66673],{"class":103,"line":1298},[101,66674,64804],{"class":111},[101,66676,66677,66679,66681],{"class":103,"line":1304},[101,66678,51765],{"class":111},[101,66680,51802],{"class":51289},[101,66682,51296],{"class":111},[101,66684,66685,66687,66689],{"class":103,"line":1316},[101,66686,52406],{"class":111},[101,66688,66614],{"class":51289},[101,66690,51296],{"class":111},[101,66692,66693,66695,66697],{"class":103,"line":1599},[101,66694,51774],{"class":111},[101,66696,51789],{"class":51289},[101,66698,51296],{"class":111},[10,66700,66701],{},"点击不在跳转！！！",[72,66703,66705],{"id":66704},"_332-事件委托","3.3.2 事件委托",[10,66707,66708],{},[1449,66709],{"alt":20,"src":66710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[92,66712,66714],{"className":50622,"code":66713,"language":50624,"meta":20,"style":20},"\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",[98,66715,66716,66726,66740,66744,66752,66766,66786,66798,66806,66810,66818,66826,66838,66850,66862,66874,66886,66899,66907,66915,66920,66939,66960,66965,66970,66975,66980,66989,66993,67003,67007,67012,67017,67031,67041,67045,67049,67057,67065,67069],{"__ignoreMap":20},[101,66717,66718,66720,66722,66724],{"class":103,"line":104},[101,66719,51286],{"class":111},[101,66721,51290],{"class":51289},[101,66723,51293],{"class":1950},[101,66725,51296],{"class":111},[101,66727,66728,66730,66732,66734,66736,66738],{"class":103,"line":21},[101,66729,1021],{"class":111},[101,66731,50624],{"class":51289},[101,66733,51305],{"class":1950},[101,66735,157],{"class":111},[101,66737,51310],{"class":216},[101,66739,51296],{"class":111},[101,66741,66742],{"class":103,"line":1166},[101,66743,2387],{"emptyLinePlaceholder":27},[101,66745,66746,66748,66750],{"class":103,"line":1181},[101,66747,1021],{"class":111},[101,66749,51323],{"class":51289},[101,66751,51296],{"class":111},[101,66753,66754,66756,66758,66760,66762,66764],{"class":103,"line":1187},[101,66755,52133],{"class":111},[101,66757,51333],{"class":51289},[101,66759,51336],{"class":1950},[101,66761,157],{"class":111},[101,66763,51341],{"class":216},[101,66765,51296],{"class":111},[101,66767,66768,66770,66772,66774,66776,66778,66780,66782,66784],{"class":103,"line":1201},[101,66769,52133],{"class":111},[101,66771,51333],{"class":51289},[101,66773,14908],{"class":1950},[101,66775,157],{"class":111},[101,66777,51380],{"class":216},[101,66779,51360],{"class":1950},[101,66781,157],{"class":111},[101,66783,51387],{"class":216},[101,66785,51296],{"class":111},[101,66787,66788,66790,66792,66794,66796],{"class":103,"line":1207},[101,66789,52133],{"class":111},[101,66791,51396],{"class":51289},[101,66793,51399],{"class":111},[101,66795,51396],{"class":51289},[101,66797,51296],{"class":111},[101,66799,66800,66802,66804],{"class":103,"line":1298},[101,66801,51774],{"class":111},[101,66803,51323],{"class":51289},[101,66805,51296],{"class":111},[101,66807,66808],{"class":103,"line":1304},[101,66809,2387],{"emptyLinePlaceholder":27},[101,66811,66812,66814,66816],{"class":103,"line":1316},[101,66813,1021],{"class":111},[101,66815,51789],{"class":51289},[101,66817,51296],{"class":111},[101,66819,66820,66822,66824],{"class":103,"line":1599},[101,66821,52133],{"class":111},[101,66823,1118],{"class":51289},[101,66825,51296],{"class":111},[101,66827,66828,66830,66832,66834,66836],{"class":103,"line":1604},[101,66829,51330],{"class":111},[101,66831,58],{"class":51289},[101,66833,53955],{"class":111},[101,66835,58],{"class":51289},[101,66837,51296],{"class":111},[101,66839,66840,66842,66844,66846,66848],{"class":103,"line":1610},[101,66841,51330],{"class":111},[101,66843,58],{"class":51289},[101,66845,53974],{"class":111},[101,66847,58],{"class":51289},[101,66849,51296],{"class":111},[101,66851,66852,66854,66856,66858,66860],{"class":103,"line":1615},[101,66853,51330],{"class":111},[101,66855,58],{"class":51289},[101,66857,53993],{"class":111},[101,66859,58],{"class":51289},[101,66861,51296],{"class":111},[101,66863,66864,66866,66868,66870,66872],{"class":103,"line":1629},[101,66865,51330],{"class":111},[101,66867,58],{"class":51289},[101,66869,54012],{"class":111},[101,66871,58],{"class":51289},[101,66873,51296],{"class":111},[101,66875,66876,66878,66880,66882,66884],{"class":103,"line":1634},[101,66877,51330],{"class":111},[101,66879,58],{"class":51289},[101,66881,54031],{"class":111},[101,66883,58],{"class":51289},[101,66885,51296],{"class":111},[101,66887,66888,66890,66892,66895,66897],{"class":103,"line":1640},[101,66889,51330],{"class":111},[101,66891,10],{"class":51289},[101,66893,66894],{"class":111},">我不需要变色\u003C\u002F",[101,66896,10],{"class":51289},[101,66898,51296],{"class":111},[101,66900,66901,66903,66905],{"class":103,"line":1661},[101,66902,52406],{"class":111},[101,66904,1118],{"class":51289},[101,66906,51296],{"class":111},[101,66908,66909,66911,66913],{"class":103,"line":1666},[101,66910,52133],{"class":111},[101,66912,51802],{"class":51289},[101,66914,51296],{"class":111},[101,66916,66917],{"class":103,"line":1680},[101,66918,66919],{"class":170},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[101,66921,66922,66924,66926,66928,66930,66932,66934,66937],{"class":103,"line":1685},[101,66923,11209],{"class":107},[101,66925,61281],{"class":160},[101,66927,13552],{"class":107},[101,66929,54385],{"class":111},[101,66931,54388],{"class":1950},[101,66933,112],{"class":111},[101,66935,66936],{"class":216},"'ul'",[101,66938,118],{"class":111},[101,66940,66941,66944,66946,66948,66950,66952,66954,66956,66958],{"class":103,"line":1714},[101,66942,66943],{"class":111},"    ul.",[101,66945,57802],{"class":1950},[101,66947,112],{"class":111},[101,66949,57807],{"class":216},[101,66951,12423],{"class":111},[101,66953,54438],{"class":107},[101,66955,1645],{"class":111},[101,66957,186],{"class":5204},[101,66959,12430],{"class":111},[101,66961,66962],{"class":103,"line":1719},[101,66963,66964],{"class":170},"      \u002F\u002F alert(1)\n",[101,66966,66967],{"class":103,"line":1736},[101,66968,66969],{"class":170},"      \u002F\u002F e.target就是我们点击的对象\n",[101,66971,66972],{"class":103,"line":1741},[101,66973,66974],{"class":170},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[101,66976,66977],{"class":103,"line":1746},[101,66978,66979],{"class":170},"      \u002F\u002F e.target.style.color = 'red'\n",[101,66981,66982,66984,66986],{"class":103,"line":1751},[101,66983,58233],{"class":111},[101,66985,58236],{"class":1950},[101,66987,66988],{"class":111},"(e)\n",[101,66990,66991],{"class":103,"line":1765},[101,66992,2387],{"emptyLinePlaceholder":27},[101,66994,66995,66997,67000],{"class":103,"line":1770},[101,66996,58233],{"class":111},[101,66998,66999],{"class":1950},"dir",[101,67001,67002],{"class":111},"(e.target)\n",[101,67004,67005],{"class":103,"line":2564},[101,67006,2387],{"emptyLinePlaceholder":27},[101,67008,67009],{"class":103,"line":2578},[101,67010,67011],{"class":170},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[101,67013,67014],{"class":103,"line":2586},[101,67015,67016],{"class":170},"      \u002F\u002F 通过tagName来进行判断\n",[101,67018,67019,67021,67024,67026,67029],{"class":103,"line":2591},[101,67020,54469],{"class":107},[101,67022,67023],{"class":111}," (e.target.tagName ",[101,67025,54475],{"class":107},[101,67027,67028],{"class":216}," 'LI'",[101,67030,12430],{"class":111},[101,67032,67033,67036,67038],{"class":103,"line":2597},[101,67034,67035],{"class":111},"        e.target.style.color ",[101,67037,157],{"class":107},[101,67039,67040],{"class":216}," 'red'\n",[101,67042,67043],{"class":103,"line":2603},[101,67044,52387],{"class":111},[101,67046,67047],{"class":103,"line":2608},[101,67048,33450],{"class":111},[101,67050,67051,67053,67055],{"class":103,"line":7936},[101,67052,52406],{"class":111},[101,67054,51802],{"class":51289},[101,67056,51296],{"class":111},[101,67058,67059,67061,67063],{"class":103,"line":7960},[101,67060,51774],{"class":111},[101,67062,51789],{"class":51289},[101,67064,51296],{"class":111},[101,67066,67067],{"class":103,"line":7965},[101,67068,2387],{"emptyLinePlaceholder":27},[101,67070,67071,67073,67075],{"class":103,"line":7971},[101,67072,51774],{"class":111},[101,67074,50624],{"class":51289},[101,67076,51296],{"class":111},[10,67078,67079],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[10,67081,67082],{},"if(e.target.ragName==='P') {}",[10,67084,67085],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[10,67087,67088],{},"通过事件委托的方式实现tab栏切换改造：",[10,67090,67091],{},"一定要记住自定义属性！！！！！！",[10,67093,67094],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[10,67096,67097],{},"id是自定义的属性名",[10,67099,67100],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[92,67102,67104],{"className":50622,"code":67103,"language":50624,"meta":20,"style":20},"\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",[98,67105,67106,67116,67130,67134,67142,67156,67176,67196,67208,67216,67222,67232,67242,67246,67250,67256,67268,67280,67292,67308,67312,67316,67322,67334,67346,67358,67368,67378,67382,67386,67394,67406,67416,67428,67432,67436,67444,67454,67464,67474,67478,67482,67492,67506,67518,67522,67526,67538,67548,67564,67574,67578,67582,67596,67606,67616,67620,67624,67630,67644,67648,67652,67660,67670,67674,67678,67687,67697,67701,67709,67717,67721,67729,67743,67757,67769,67777,67816,67848,67880,67912,67944,67952,67960,67974,68008,68042,68076,68110,68144,68152,68160,68168,68173,68178,68197,68202,68222,68230,68235,68248,68269,68282,68286,68291,68296,68309,68329,68357,68361,68365,68369,68377,68385,68389],{"__ignoreMap":20},[101,67107,67108,67110,67112,67114],{"class":103,"line":104},[101,67109,51286],{"class":111},[101,67111,51290],{"class":51289},[101,67113,51293],{"class":1950},[101,67115,51296],{"class":111},[101,67117,67118,67120,67122,67124,67126,67128],{"class":103,"line":21},[101,67119,1021],{"class":111},[101,67121,50624],{"class":51289},[101,67123,51305],{"class":1950},[101,67125,157],{"class":111},[101,67127,51310],{"class":216},[101,67129,51296],{"class":111},[101,67131,67132],{"class":103,"line":1166},[101,67133,2387],{"emptyLinePlaceholder":27},[101,67135,67136,67138,67140],{"class":103,"line":1181},[101,67137,1021],{"class":111},[101,67139,51323],{"class":51289},[101,67141,51296],{"class":111},[101,67143,67144,67146,67148,67150,67152,67154],{"class":103,"line":1187},[101,67145,52133],{"class":111},[101,67147,51333],{"class":51289},[101,67149,51336],{"class":1950},[101,67151,157],{"class":111},[101,67153,51341],{"class":216},[101,67155,59116],{"class":111},[101,67157,67158,67160,67162,67164,67166,67168,67170,67172,67174],{"class":103,"line":1201},[101,67159,52133],{"class":111},[101,67161,51333],{"class":51289},[101,67163,51352],{"class":1950},[101,67165,157],{"class":111},[101,67167,51357],{"class":216},[101,67169,51360],{"class":1950},[101,67171,157],{"class":111},[101,67173,51365],{"class":216},[101,67175,59116],{"class":111},[101,67177,67178,67180,67182,67184,67186,67188,67190,67192,67194],{"class":103,"line":1207},[101,67179,52133],{"class":111},[101,67181,51333],{"class":51289},[101,67183,14908],{"class":1950},[101,67185,157],{"class":111},[101,67187,51380],{"class":216},[101,67189,51360],{"class":1950},[101,67191,157],{"class":111},[101,67193,51387],{"class":216},[101,67195,59116],{"class":111},[101,67197,67198,67200,67202,67204,67206],{"class":103,"line":1298},[101,67199,52133],{"class":111},[101,67201,51396],{"class":51289},[101,67203,63614],{"class":111},[101,67205,51396],{"class":51289},[101,67207,51296],{"class":111},[101,67209,67210,67212,67214],{"class":103,"line":1304},[101,67211,52133],{"class":111},[101,67213,5114],{"class":51289},[101,67215,51296],{"class":111},[101,67217,67218,67220],{"class":103,"line":1316},[101,67219,6391],{"class":51289},[101,67221,15560],{"class":111},[101,67223,67224,67226,67228,67230],{"class":103,"line":1599},[101,67225,54695],{"class":160},[101,67227,51426],{"class":111},[101,67229,303],{"class":160},[101,67231,1277],{"class":111},[101,67233,67234,67236,67238,67240],{"class":103,"line":1604},[101,67235,54684],{"class":160},[101,67237,51426],{"class":111},[101,67239,303],{"class":160},[101,67241,1277],{"class":111},[101,67243,67244],{"class":103,"line":1610},[101,67245,2174],{"class":111},[101,67247,67248],{"class":103,"line":1615},[101,67249,2387],{"emptyLinePlaceholder":27},[101,67251,67252,67254],{"class":103,"line":1629},[101,67253,63665],{"class":1950},[101,67255,15560],{"class":111},[101,67257,67258,67260,67262,67264,67266],{"class":103,"line":1634},[101,67259,54760],{"class":160},[101,67261,51426],{"class":111},[101,67263,63676],{"class":160},[101,67265,51481],{"class":107},[101,67267,1277],{"class":111},[101,67269,67270,67272,67274,67276,67278],{"class":103,"line":1640},[101,67271,54774],{"class":160},[101,67273,51426],{"class":111},[101,67275,63689],{"class":160},[101,67277,51481],{"class":107},[101,67279,1277],{"class":111},[101,67281,67282,67284,67286,67288,67290],{"class":103,"line":1661},[101,67283,54695],{"class":160},[101,67285,51426],{"class":111},[101,67287,811],{"class":160},[101,67289,51481],{"class":107},[101,67291,1277],{"class":111},[101,67293,67294,67296,67298,67300,67302,67304,67306],{"class":103,"line":1666},[101,67295,61966],{"class":160},[101,67297,51426],{"class":111},[101,67299,329],{"class":160},[101,67301,51481],{"class":107},[101,67303,51510],{"class":160},[101,67305,62233],{"class":160},[101,67307,1277],{"class":111},[101,67309,67310],{"class":103,"line":1680},[101,67311,2174],{"class":111},[101,67313,67314],{"class":103,"line":1685},[101,67315,2387],{"emptyLinePlaceholder":27},[101,67317,67318,67320],{"class":103,"line":1714},[101,67319,63734],{"class":1950},[101,67321,15560],{"class":111},[101,67323,67324,67326,67328,67330,67332],{"class":103,"line":1719},[101,67325,54760],{"class":160},[101,67327,51426],{"class":111},[101,67329,422],{"class":160},[101,67331,439],{"class":107},[101,67333,1277],{"class":111},[101,67335,67336,67338,67340,67342,67344],{"class":103,"line":1736},[101,67337,54774],{"class":160},[101,67339,51426],{"class":111},[101,67341,1018],{"class":160},[101,67343,51481],{"class":107},[101,67345,1277],{"class":111},[101,67347,67348,67350,67352,67354,67356],{"class":103,"line":1741},[101,67349,57348],{"class":160},[101,67351,51426],{"class":111},[101,67353,1018],{"class":160},[101,67355,51481],{"class":107},[101,67357,1277],{"class":111},[101,67359,67360,67362,67364,67366],{"class":103,"line":1746},[101,67361,54998],{"class":160},[101,67363,51426],{"class":111},[101,67365,51466],{"class":160},[101,67367,1277],{"class":111},[101,67369,67370,67372,67374,67376],{"class":103,"line":1751},[101,67371,55009],{"class":160},[101,67373,51426],{"class":111},[101,67375,51657],{"class":160},[101,67377,1277],{"class":111},[101,67379,67380],{"class":103,"line":1765},[101,67381,2174],{"class":111},[101,67383,67384],{"class":103,"line":1770},[101,67385,2387],{"emptyLinePlaceholder":27},[101,67387,67388,67390,67392],{"class":103,"line":2564},[101,67389,63734],{"class":1950},[101,67391,63807],{"class":51289},[101,67393,15560],{"class":111},[101,67395,67396,67398,67400,67402,67404],{"class":103,"line":2578},[101,67397,54911],{"class":160},[101,67399,51426],{"class":111},[101,67401,911],{"class":160},[101,67403,51481],{"class":107},[101,67405,1277],{"class":111},[101,67407,67408,67410,67412,67414],{"class":103,"line":2586},[101,67409,62323],{"class":160},[101,67411,51426],{"class":111},[101,67413,63830],{"class":160},[101,67415,1277],{"class":111},[101,67417,67418,67420,67422,67424,67426],{"class":103,"line":2591},[101,67419,61989],{"class":160},[101,67421,51426],{"class":111},[101,67423,811],{"class":160},[101,67425,51481],{"class":107},[101,67427,1277],{"class":111},[101,67429,67430],{"class":103,"line":2597},[101,67431,2174],{"class":111},[101,67433,67434],{"class":103,"line":2603},[101,67435,2387],{"emptyLinePlaceholder":27},[101,67437,67438,67440,67442],{"class":103,"line":2608},[101,67439,63734],{"class":1950},[101,67441,61281],{"class":51289},[101,67443,15560],{"class":111},[101,67445,67446,67448,67450,67452],{"class":103,"line":7936},[101,67447,54721],{"class":160},[101,67449,51426],{"class":111},[101,67451,54726],{"class":160},[101,67453,1277],{"class":111},[101,67455,67456,67458,67460,67462],{"class":103,"line":7960},[101,67457,54998],{"class":160},[101,67459,51426],{"class":111},[101,67461,51466],{"class":160},[101,67463,1277],{"class":111},[101,67465,67466,67468,67470,67472],{"class":103,"line":7965},[101,67467,55009],{"class":160},[101,67469,51426],{"class":111},[101,67471,51569],{"class":160},[101,67473,1277],{"class":111},[101,67475,67476],{"class":103,"line":7971},[101,67477,2174],{"class":111},[101,67479,67480],{"class":103,"line":7998},[101,67481,2387],{"emptyLinePlaceholder":27},[101,67483,67484,67486,67488,67490],{"class":103,"line":8003},[101,67485,63734],{"class":1950},[101,67487,61281],{"class":51289},[101,67489,55064],{"class":51289},[101,67491,15560],{"class":111},[101,67493,67494,67496,67498,67500,67502,67504],{"class":103,"line":8009},[101,67495,54695],{"class":160},[101,67497,51426],{"class":111},[101,67499,303],{"class":160},[101,67501,8938],{"class":160},[101,67503,51481],{"class":107},[101,67505,1277],{"class":111},[101,67507,67508,67510,67512,67514,67516],{"class":103,"line":8021},[101,67509,54911],{"class":160},[101,67511,51426],{"class":111},[101,67513,660],{"class":160},[101,67515,51481],{"class":107},[101,67517,1277],{"class":111},[101,67519,67520],{"class":103,"line":8033},[101,67521,2174],{"class":111},[101,67523,67524],{"class":103,"line":8045},[101,67525,2387],{"emptyLinePlaceholder":27},[101,67527,67528,67530,67532,67534,67536],{"class":103,"line":9704},[101,67529,63734],{"class":1950},[101,67531,61281],{"class":51289},[101,67533,55064],{"class":51289},[101,67535,1385],{"class":51289},[101,67537,15560],{"class":111},[101,67539,67540,67542,67544,67546],{"class":103,"line":9729},[101,67541,63959],{"class":160},[101,67543,51426],{"class":111},[101,67545,54726],{"class":160},[101,67547,1277],{"class":111},[101,67549,67550,67552,67554,67556,67558,67560,67562],{"class":103,"line":9752},[101,67551,62221],{"class":160},[101,67553,51426],{"class":111},[101,67555,189],{"class":160},[101,67557,51481],{"class":107},[101,67559,51510],{"class":160},[101,67561,63980],{"class":160},[101,67563,1277],{"class":111},[101,67565,67566,67568,67570,67572],{"class":103,"line":9776},[101,67567,57405],{"class":160},[101,67569,51426],{"class":111},[101,67571,62358],{"class":160},[101,67573,1277],{"class":111},[101,67575,67576],{"class":103,"line":9781},[101,67577,2174],{"class":111},[101,67579,67580],{"class":103,"line":9786},[101,67581,2387],{"emptyLinePlaceholder":27},[101,67583,67584,67586,67588,67590,67592,67594],{"class":103,"line":9791},[101,67585,63734],{"class":1950},[101,67587,61281],{"class":51289},[101,67589,55064],{"class":51289},[101,67591,1385],{"class":51289},[101,67593,64013],{"class":1950},[101,67595,15560],{"class":111},[101,67597,67598,67600,67602,67604],{"class":103,"line":9800},[101,67599,61780],{"class":160},[101,67601,51426],{"class":111},[101,67603,64024],{"class":160},[101,67605,1277],{"class":111},[101,67607,67608,67610,67612,67614],{"class":103,"line":9805},[101,67609,57405],{"class":160},[101,67611,51426],{"class":111},[101,67613,64024],{"class":160},[101,67615,1277],{"class":111},[101,67617,67618],{"class":103,"line":9811},[101,67619,2174],{"class":111},[101,67621,67622],{"class":103,"line":9832},[101,67623,2387],{"emptyLinePlaceholder":27},[101,67625,67626,67628],{"class":103,"line":9838},[101,67627,64049],{"class":1950},[101,67629,15560],{"class":111},[101,67631,67632,67634,67636,67638,67640,67642],{"class":103,"line":9852},[101,67633,54684],{"class":160},[101,67635,51426],{"class":111},[101,67637,303],{"class":160},[101,67639,64062],{"class":160},[101,67641,51481],{"class":107},[101,67643,1277],{"class":111},[101,67645,67646],{"class":103,"line":9858},[101,67647,2174],{"class":111},[101,67649,67650],{"class":103,"line":9885},[101,67651,2387],{"emptyLinePlaceholder":27},[101,67653,67654,67656,67658],{"class":103,"line":9894},[101,67655,64049],{"class":1950},[101,67657,62163],{"class":1950},[101,67659,15560],{"class":111},[101,67661,67662,67664,67666,67668],{"class":103,"line":9900},[101,67663,54998],{"class":160},[101,67665,51426],{"class":111},[101,67667,54726],{"class":160},[101,67669,1277],{"class":111},[101,67671,67672],{"class":103,"line":9908},[101,67673,2174],{"class":111},[101,67675,67676],{"class":103,"line":9913},[101,67677,2387],{"emptyLinePlaceholder":27},[101,67679,67680,67682,67685],{"class":103,"line":16592},[101,67681,64049],{"class":1950},[101,67683,67684],{"class":1950}," .active",[101,67686,15560],{"class":111},[101,67688,67689,67691,67693,67695],{"class":103,"line":16598},[101,67690,54998],{"class":160},[101,67692,51426],{"class":111},[101,67694,60858],{"class":160},[101,67696,1277],{"class":111},[101,67698,67699],{"class":103,"line":16621},[101,67700,2174],{"class":111},[101,67702,67703,67705,67707],{"class":103,"line":16627},[101,67704,52406],{"class":111},[101,67706,5114],{"class":51289},[101,67708,51296],{"class":111},[101,67710,67711,67713,67715],{"class":103,"line":16650},[101,67712,51774],{"class":111},[101,67714,51323],{"class":51289},[101,67716,51296],{"class":111},[101,67718,67719],{"class":103,"line":16664},[101,67720,2387],{"emptyLinePlaceholder":27},[101,67722,67723,67725,67727],{"class":103,"line":16684},[101,67724,1021],{"class":111},[101,67726,51789],{"class":51289},[101,67728,51296],{"class":111},[101,67730,67731,67733,67735,67737,67739,67741],{"class":103,"line":16690},[101,67732,52133],{"class":111},[101,67734,51600],{"class":51289},[101,67736,53475],{"class":1950},[101,67738,157],{"class":111},[101,67740,64164],{"class":216},[101,67742,51296],{"class":111},[101,67744,67745,67747,67749,67751,67753,67755],{"class":103,"line":16701},[101,67746,51330],{"class":111},[101,67748,51600],{"class":51289},[101,67750,53475],{"class":1950},[101,67752,157],{"class":111},[101,67754,64179],{"class":216},[101,67756,51296],{"class":111},[101,67758,67759,67761,67763,67765,67767],{"class":103,"line":16724},[101,67760,55223],{"class":111},[101,67762,72],{"class":51289},[101,67764,64190],{"class":111},[101,67766,72],{"class":51289},[101,67768,51296],{"class":111},[101,67770,67771,67773,67775],{"class":103,"line":16746},[101,67772,55223],{"class":111},[101,67774,1118],{"class":51289},[101,67776,51296],{"class":111},[101,67778,67779,67781,67783,67785,67787,67789,67791,67793,67795,67797,67799,67801,67803,67806,67808,67810,67812,67814],{"class":103,"line":16751},[101,67780,55291],{"class":111},[101,67782,58],{"class":51289},[101,67784,61041],{"class":111},[101,67786,14],{"class":51289},[101,67788,53475],{"class":1950},[101,67790,157],{"class":111},[101,67792,59695],{"class":216},[101,67794,61046],{"class":1950},[101,67796,157],{"class":111},[101,67798,64225],{"class":216},[101,67800,53940],{"class":1950},[101,67802,157],{"class":111},[101,67804,67805],{"class":216},"\"0\"",[101,67807,64228],{"class":111},[101,67809,14],{"class":51289},[101,67811,55303],{"class":111},[101,67813,58],{"class":51289},[101,67815,51296],{"class":111},[101,67817,67818,67820,67822,67824,67826,67828,67830,67832,67834,67836,67838,67840,67842,67844,67846],{"class":103,"line":16757},[101,67819,55291],{"class":111},[101,67821,58],{"class":51289},[101,67823,61041],{"class":111},[101,67825,14],{"class":51289},[101,67827,61046],{"class":1950},[101,67829,157],{"class":111},[101,67831,64225],{"class":216},[101,67833,53940],{"class":1950},[101,67835,157],{"class":111},[101,67837,3665],{"class":216},[101,67839,64255],{"class":111},[101,67841,14],{"class":51289},[101,67843,55303],{"class":111},[101,67845,58],{"class":51289},[101,67847,51296],{"class":111},[101,67849,67850,67852,67854,67856,67858,67860,67862,67864,67866,67868,67870,67872,67874,67876,67878],{"class":103,"line":16771},[101,67851,55291],{"class":111},[101,67853,58],{"class":51289},[101,67855,61041],{"class":111},[101,67857,14],{"class":51289},[101,67859,61046],{"class":1950},[101,67861,157],{"class":111},[101,67863,64225],{"class":216},[101,67865,53940],{"class":1950},[101,67867,157],{"class":111},[101,67869,3688],{"class":216},[101,67871,64282],{"class":111},[101,67873,14],{"class":51289},[101,67875,55303],{"class":111},[101,67877,58],{"class":51289},[101,67879,51296],{"class":111},[101,67881,67882,67884,67886,67888,67890,67892,67894,67896,67898,67900,67902,67904,67906,67908,67910],{"class":103,"line":16784},[101,67883,55291],{"class":111},[101,67885,58],{"class":51289},[101,67887,61041],{"class":111},[101,67889,14],{"class":51289},[101,67891,61046],{"class":1950},[101,67893,157],{"class":111},[101,67895,64225],{"class":216},[101,67897,53940],{"class":1950},[101,67899,157],{"class":111},[101,67901,3701],{"class":216},[101,67903,64309],{"class":111},[101,67905,14],{"class":51289},[101,67907,55303],{"class":111},[101,67909,58],{"class":51289},[101,67911,51296],{"class":111},[101,67913,67914,67916,67918,67920,67922,67924,67926,67928,67930,67932,67934,67936,67938,67940,67942],{"class":103,"line":16789},[101,67915,55291],{"class":111},[101,67917,58],{"class":51289},[101,67919,61041],{"class":111},[101,67921,14],{"class":51289},[101,67923,61046],{"class":1950},[101,67925,157],{"class":111},[101,67927,64225],{"class":216},[101,67929,53940],{"class":1950},[101,67931,157],{"class":111},[101,67933,3714],{"class":216},[101,67935,64336],{"class":111},[101,67937,14],{"class":51289},[101,67939,55303],{"class":111},[101,67941,58],{"class":51289},[101,67943,51296],{"class":111},[101,67945,67946,67948,67950],{"class":103,"line":16803},[101,67947,55396],{"class":111},[101,67949,1118],{"class":51289},[101,67951,51296],{"class":111},[101,67953,67954,67956,67958],{"class":103,"line":16808},[101,67955,51765],{"class":111},[101,67957,51600],{"class":51289},[101,67959,51296],{"class":111},[101,67961,67962,67964,67966,67968,67970,67972],{"class":103,"line":16814},[101,67963,51330],{"class":111},[101,67965,51600],{"class":51289},[101,67967,53475],{"class":1950},[101,67969,157],{"class":111},[101,67971,64373],{"class":216},[101,67973,51296],{"class":111},[101,67975,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994,67996,67998,68000,68002,68004,68006],{"class":103,"line":16819},[101,67977,55223],{"class":111},[101,67979,51600],{"class":51289},[101,67981,53475],{"class":1950},[101,67983,157],{"class":111},[101,67985,64388],{"class":216},[101,67987,61041],{"class":111},[101,67989,1449],{"class":51289},[101,67991,55228],{"class":1950},[101,67993,157],{"class":111},[101,67995,64399],{"class":216},[101,67997,55236],{"class":1950},[101,67999,157],{"class":111},[101,68001,7640],{"class":216},[101,68003,64408],{"class":111},[101,68005,51600],{"class":51289},[101,68007,51296],{"class":111},[101,68009,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028,68030,68032,68034,68036,68038,68040],{"class":103,"line":16833},[101,68011,55223],{"class":111},[101,68013,51600],{"class":51289},[101,68015,53475],{"class":1950},[101,68017,157],{"class":111},[101,68019,62612],{"class":216},[101,68021,61041],{"class":111},[101,68023,1449],{"class":51289},[101,68025,55228],{"class":1950},[101,68027,157],{"class":111},[101,68029,64435],{"class":216},[101,68031,55236],{"class":1950},[101,68033,157],{"class":111},[101,68035,7640],{"class":216},[101,68037,64408],{"class":111},[101,68039,51600],{"class":51289},[101,68041,51296],{"class":111},[101,68043,68044,68046,68048,68050,68052,68054,68056,68058,68060,68062,68064,68066,68068,68070,68072,68074],{"class":103,"line":16838},[101,68045,55223],{"class":111},[101,68047,51600],{"class":51289},[101,68049,53475],{"class":1950},[101,68051,157],{"class":111},[101,68053,62612],{"class":216},[101,68055,61041],{"class":111},[101,68057,1449],{"class":51289},[101,68059,55228],{"class":1950},[101,68061,157],{"class":111},[101,68063,64470],{"class":216},[101,68065,55236],{"class":1950},[101,68067,157],{"class":111},[101,68069,7640],{"class":216},[101,68071,64408],{"class":111},[101,68073,51600],{"class":51289},[101,68075,51296],{"class":111},[101,68077,68078,68080,68082,68084,68086,68088,68090,68092,68094,68096,68098,68100,68102,68104,68106,68108],{"class":103,"line":16843},[101,68079,55223],{"class":111},[101,68081,51600],{"class":51289},[101,68083,53475],{"class":1950},[101,68085,157],{"class":111},[101,68087,62612],{"class":216},[101,68089,61041],{"class":111},[101,68091,1449],{"class":51289},[101,68093,55228],{"class":1950},[101,68095,157],{"class":111},[101,68097,64505],{"class":216},[101,68099,55236],{"class":1950},[101,68101,157],{"class":111},[101,68103,7640],{"class":216},[101,68105,64408],{"class":111},[101,68107,51600],{"class":51289},[101,68109,51296],{"class":111},[101,68111,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130,68132,68134,68136,68138,68140,68142],{"class":103,"line":16857},[101,68113,55223],{"class":111},[101,68115,51600],{"class":51289},[101,68117,53475],{"class":1950},[101,68119,157],{"class":111},[101,68121,62612],{"class":216},[101,68123,61041],{"class":111},[101,68125,1449],{"class":51289},[101,68127,55228],{"class":1950},[101,68129,157],{"class":111},[101,68131,64540],{"class":216},[101,68133,55236],{"class":1950},[101,68135,157],{"class":111},[101,68137,7640],{"class":216},[101,68139,64408],{"class":111},[101,68141,51600],{"class":51289},[101,68143,51296],{"class":111},[101,68145,68146,68148,68150],{"class":103,"line":16869},[101,68147,51765],{"class":111},[101,68149,51600],{"class":51289},[101,68151,51296],{"class":111},[101,68153,68154,68156,68158],{"class":103,"line":16874},[101,68155,52406],{"class":111},[101,68157,51600],{"class":51289},[101,68159,51296],{"class":111},[101,68161,68162,68164,68166],{"class":103,"line":16887},[101,68163,52133],{"class":111},[101,68165,51802],{"class":51289},[101,68167,51296],{"class":111},[101,68169,68170],{"class":103,"line":16892},[101,68171,68172],{"class":170},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[101,68174,68175],{"class":103,"line":16897},[101,68176,68177],{"class":170},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[101,68179,68180,68182,68184,68186,68188,68190,68192,68195],{"class":103,"line":16902},[101,68181,11209],{"class":107},[101,68183,61281],{"class":160},[101,68185,13552],{"class":107},[101,68187,54385],{"class":111},[101,68189,54388],{"class":1950},[101,68191,112],{"class":111},[101,68193,68194],{"class":216},"'.tab-nav ul'",[101,68196,118],{"class":111},[101,68198,68199],{"class":103,"line":16915},[101,68200,68201],{"class":170},"    \u002F\u002F 2.添加事件\n",[101,68203,68204,68206,68208,68210,68212,68214,68216,68218,68220],{"class":103,"line":16920},[101,68205,66943],{"class":111},[101,68207,57802],{"class":1950},[101,68209,112],{"class":111},[101,68211,57807],{"class":216},[101,68213,12423],{"class":111},[101,68215,54438],{"class":107},[101,68217,1645],{"class":111},[101,68219,186],{"class":5204},[101,68221,12430],{"class":111},[101,68223,68224,68226,68228],{"class":103,"line":32622},[101,68225,58233],{"class":111},[101,68227,66999],{"class":1950},[101,68229,67002],{"class":111},[101,68231,68232],{"class":103,"line":32628},[101,68233,68234],{"class":170},"      \u002F\u002Fe.targer是我们点击的对象\n",[101,68236,68237,68239,68241,68243,68246],{"class":103,"line":32634},[101,68238,54469],{"class":107},[101,68240,67023],{"class":111},[101,68242,54475],{"class":107},[101,68244,68245],{"class":216}," 'A'",[101,68247,12430],{"class":111},[101,68249,68250,68252,68254,68256,68259,68261,68263,68265,68267],{"class":103,"line":32640},[101,68251,51914],{"class":111},[101,68253,54388],{"class":1950},[101,68255,112],{"class":111},[101,68257,68258],{"class":216},"'.active'",[101,68260,56992],{"class":111},[101,68262,56995],{"class":1950},[101,68264,112],{"class":111},[101,68266,64703],{"class":216},[101,68268,118],{"class":111},[101,68270,68271,68274,68276,68278,68280],{"class":103,"line":32646},[101,68272,68273],{"class":111},"        e.target.classList.",[101,68275,5322],{"class":1950},[101,68277,112],{"class":111},[101,68279,64703],{"class":216},[101,68281,118],{"class":111},[101,68283,68284],{"class":103,"line":32657},[101,68285,2387],{"emptyLinePlaceholder":27},[101,68287,68288],{"class":103,"line":32663},[101,68289,68290],{"class":170},"        \u002F\u002F 下面大盒子模块\n",[101,68292,68293],{"class":103,"line":32683},[101,68294,68295],{"class":170},"        \u002F\u002F console.log(e.target.dataset.id)\n",[101,68297,68298,68300,68302,68304,68306],{"class":103,"line":32689},[101,68299,61259],{"class":107},[101,68301,3019],{"class":160},[101,68303,13552],{"class":107},[101,68305,45555],{"class":107},[101,68307,68308],{"class":111},"e.target.dataset.id\n",[101,68310,68311,68313,68315,68317,68319,68321,68323,68325,68327],{"class":103,"line":32700},[101,68312,51914],{"class":111},[101,68314,54388],{"class":1950},[101,68316,112],{"class":111},[101,68318,64751],{"class":216},[101,68320,56992],{"class":111},[101,68322,56995],{"class":1950},[101,68324,112],{"class":111},[101,68326,64703],{"class":216},[101,68328,118],{"class":111},[101,68330,68331,68333,68335,68337,68339,68341,68343,68345,68347,68349,68351,68353,68355],{"class":103,"line":32706},[101,68332,51914],{"class":111},[101,68334,54388],{"class":1950},[101,68336,112],{"class":111},[101,68338,64777],{"class":216},[101,68340,552],{"class":111},[101,68342,45555],{"class":107},[101,68344,25107],{"class":160},[101,68346,57021],{"class":216},[101,68348,56992],{"class":111},[101,68350,5322],{"class":1950},[101,68352,112],{"class":111},[101,68354,64703],{"class":216},[101,68356,118],{"class":111},[101,68358,68359],{"class":103,"line":32712},[101,68360,2387],{"emptyLinePlaceholder":27},[101,68362,68363],{"class":103,"line":32718},[101,68364,52387],{"class":111},[101,68366,68367],{"class":103,"line":32724},[101,68368,33450],{"class":111},[101,68370,68371,68373,68375],{"class":103,"line":32730},[101,68372,52406],{"class":111},[101,68374,51802],{"class":51289},[101,68376,51296],{"class":111},[101,68378,68379,68381,68383],{"class":103,"line":32736},[101,68380,51774],{"class":111},[101,68382,51789],{"class":51289},[101,68384,51296],{"class":111},[101,68386,68387],{"class":103,"line":32742},[101,68388,2387],{"emptyLinePlaceholder":27},[101,68390,68391,68393,68395],{"class":103,"line":32762},[101,68392,51774],{"class":111},[101,68394,50624],{"class":51289},[101,68396,51296],{"class":111},[72,68398,68400],{"id":68399},"_333-页面加载事件","3.3.3 页面加载事件",[55,68402,68403],{},[58,68404,68405],{},"load",[10,68407,68408],{},[1449,68409],{"alt":20,"src":68410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[10,68412,68413],{},"window代表整个窗口，比document还要大",[10,68415,68416],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[10,68418,68419],{},"img.addEventListener('load', function () {",[10,68421,68422],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[10,68424,52453],{},[55,68426,68427],{"start":21},[58,68428,68429],{},"DOMContentLoaded",[10,68431,68432],{},[1449,68433],{"alt":20,"src":68434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[10,68436,68437],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[72,68439,68441],{"id":68440},"_334-元素滚动事件","3.3.4 元素滚动事件",[10,68443,68444],{},[1449,68445],{"alt":20,"src":68446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[10,68448,68449],{},[1449,68450],{"alt":20,"src":68451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[10,68453,68454],{},[1449,68455],{"alt":20,"src":68456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[10,68458,68459],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[10,68461,68462],{},"获得的是数字型数据，不带单位",[10,68464,68465],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[10,68467,68468],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[10,68470,68471],{},"它是通过document.documentElement来获取",[10,68473,68474],{},[1449,68475],{"alt":20,"src":68476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[10,68478,68479],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[72,68481,68483],{"id":68482},"_335-页面缩放事件","3.3.5 页面缩放事件",[10,68485,68486],{},[1449,68487],{"alt":20,"src":68488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[10,68490,68491],{},[1449,68492],{"alt":20,"src":68493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[72,68495,68497],{"id":68496},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[10,68499,68500],{},[1449,68501],{"alt":20,"src":68502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[10,68504,68505],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[10,68507,68508],{},[1449,68509],{"alt":20,"src":68510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[10,68512,68513],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[10,68515,68516],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[10,68518,68519],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[10,68521,68522],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[10,68524,68525],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[10,68527,68528],{},[1449,68529],{"alt":20,"src":68530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[10,68532,68533],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[10,68535,68536],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[10,68538,68539],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[10,68541,68542],{},"e.pageX-box.getBoundingClientRect()",[72,68544,68546],{"id":68545},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[10,68548,68549],{},[1449,68550],{"alt":20,"src":68551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[10,68553,68554],{},"这个是相对于视口来说的，它是个方法，不是属性值",[72,68556,68558],{"id":68557},"_338-总结","3.3.8 总结",[10,68560,68561],{},[1449,68562],{"alt":20,"src":68563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[10,68565,68566],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[10,68568,68569],{},"修改盒子的宽高只能通过width和height来实现",[72,68571,68573],{"id":68572},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[92,68575,68577],{"className":50622,"code":68576,"language":50624,"meta":20,"style":20},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[98,68578,68579,68584,68589,68594,68599],{"__ignoreMap":20},[101,68580,68581],{"class":103,"line":104},[101,68582,68583],{"class":111},"\u002F* 页面滑动 *\u002F\n",[101,68585,68586],{"class":103,"line":21},[101,68587,68588],{"class":111},"html {\n",[101,68590,68591],{"class":103,"line":1166},[101,68592,68593],{"class":111},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[101,68595,68596],{"class":103,"line":1181},[101,68597,68598],{"class":111},"  scroll-behavior: smooth;\n",[101,68600,68601],{"class":103,"line":1187},[101,68602,1552],{"class":111},[10,68604,68605],{},"默认是auto",[72,68607,68609],{"id":68608},"_3310-日期对象","3.3.10 日期对象",[21986,68611,68613],{"id":68612},"_33101-实例化","3.3.10.1 实例化",[10,68615,68616],{},[1449,68617],{"alt":20,"src":68618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21986,68620,68622],{"id":68621},"_33102-时期对象方法","3.3.10.2 时期对象方法",[10,68624,68625],{},[1449,68626],{"alt":20,"src":68627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[10,68629,68630],{},"月份+1",[10,68632,68633],{},"老外认为第一天为0，星期天",[10,68635,68636],{},"方法使用的时候必须要跟括号",[10,68638,68639],{},"快速获得日期",[10,68641,68642],{},"\u002F\u002F 得到年月日",[10,68644,68645],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[10,68647,68648],{},"\u002F\u002F 得到当地日期",[10,68650,68651],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[10,68653,68654],{},"\u002F\u002F 得到当地时间",[10,68656,68657],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[10,68659,68660],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[10,68662,68663],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51802,68665,68666],{},"\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",[10,68668,68669],{},"学会去封装函数！",[21986,68671,68673],{"id":68672},"_33103-时间戳","3.3.10.3 时间戳",[10,68675,68676],{},[1449,68677],{"alt":20,"src":68678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[10,68680,68681],{},[1449,68682],{"alt":20,"src":68683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[10,68685,68686],{},"三种方法记住一个就可以",[72,68688,68690],{"id":68689},"_3311-节点操作","3.3.11 节点操作",[21986,68692,68694],{"id":68693},"_33111-dom节点","3.3.11.1 DOM节点",[10,68696,68697],{},[1449,68698],{"alt":20,"src":68699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[10,68701,68702],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21986,68704,68706],{"id":68705},"_33112-查找节点","3.3.11.2 查找节点",[10,68708,68709],{},"前边的document.querySelector()是获取的元素",[10,68711,68712],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[10,68714,68715],{},[1449,68716],{"alt":20,"src":68717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[55,68719,68720],{},[58,68721,68722],{},"父节点",[10,68724,68725],{},[1449,68726],{"alt":20,"src":68727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[55,68729,68730],{"start":21},[58,68731,68732],{},"子节点",[10,68734,68735],{},[1449,68736],{"alt":20,"src":68737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[10,68739,68740],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[10,68742,68743],{},"children获得的是伪数组，是亲儿子",[55,68745,68746],{"start":1166},[58,68747,68748],{},"兄弟节点",[10,68750,68751],{},[1449,68752],{"alt":20,"src":68753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21986,68755,68757],{"id":68756},"_33113-增加节点","3.3.11.3 增加节点",[10,68759,68760],{},[1449,68761],{"alt":20,"src":68762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[10,68764,68765],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[10,68767,68768],{},[1449,68769],{"alt":20,"src":68770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[10,68772,68773],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[10,68775,68776],{},"下面是写法的部分展示，就按照下边的格式来写",[10,68778,68779],{},"例：",[51802,68781,68782],{},"\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",[10,68784,68785],{},[1449,68786],{"alt":20,"src":68787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[10,68789,68790],{},"false只克隆标签，里边的内容不会克隆过来",[92,68792,68794],{"className":50622,"code":68793,"language":50624,"meta":20,"style":20},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[98,68795,68796],{"__ignoreMap":20},[101,68797,68798],{"class":103,"line":104},[101,68799,68793],{"class":111},[21986,68801,68803],{"id":68802},"_33114-删除节点","3.3.11.4 删除节点",[10,68805,68806],{},[1449,68807],{"alt":20,"src":68808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[10,68810,68811],{},"父亲删儿子",[10,68813,68814],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[72,68816,68818],{"id":68817},"_3312-m端事件","3.3.12 M端事件",[10,68820,68821],{},"M端就是移动端",[10,68823,68824],{},[1449,68825],{"alt":20,"src":68826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[72,68828,68830],{"id":68829},"_3313-插件","3.3.13 插件",[10,68832,68833],{},"要熟悉官网！！！",[10,68835,68836],{},[14,68837,68838],{"href":68838,"rel":68839},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[18],[10,68841,68842],{},[14,68843,68844],{"href":68844,"rel":68845},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[18],[72,68847,68849],{"id":68848},"_3314-学生信息表","3.3.14 学生信息表",[55,68851,68852,68855,68858,68861,68864,68867,68870,68873],{},[58,68853,68854],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[58,68856,68857],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[58,68859,68860],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[58,68862,68863],{},"用好表单元素自带的属性，value,name等",[58,68865,68866],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[58,68868,68869],{},"不要忘记事件对象",[58,68871,68872],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[58,68874,68875],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[10,68877,68878],{},"结构：",[92,68880,68882],{"className":50622,"code":68881,"language":50624,"meta":20,"style":20},"\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",[98,68883,68884,68894,68908,68912,68920,68934,68954,68975,68988,69012,69020,69024,69032,69045,69066,69094,69122,69127,69149,69169,69188,69196,69224,69246,69266,69286,69306,69326,69346,69354,69374,69382,69386,69399,69407,69415,69423,69436,69449,69462,69475,69488,69501,69514,69522,69530,69538,69543,69548,69553,69558,69563,69568,69573,69578,69583,69588,69593,69598,69603,69611,69619,69627,69631,69651,69670,69690,69710,69730,69750,69754,69759,69779,69784,69794,69799,69804,69824,69846,69851,69861,69865,69869,69874,69879,69908,69922,69937,69941,69945,69949,69954,69965,69978,69983,69988,69993,69998,70003,70007,70012,70017,70026,70031,70036,70048,70053,70060,70064,70069,70079,70084,70094,70099,70127,70148,70158,70178,70196,70213,70230,70247,70264,70268,70278,70283,70288,70293,70304,70308,70312,70316,70321,70326,70347,70359,70364,70369,70374,70388,70393,70400,70404,70408,70416,70420,70428,70432],{"__ignoreMap":20},[101,68885,68886,68888,68890,68892],{"class":103,"line":104},[101,68887,51286],{"class":111},[101,68889,51290],{"class":51289},[101,68891,51293],{"class":1950},[101,68893,51296],{"class":111},[101,68895,68896,68898,68900,68902,68904,68906],{"class":103,"line":21},[101,68897,1021],{"class":111},[101,68899,50624],{"class":51289},[101,68901,51305],{"class":1950},[101,68903,157],{"class":111},[101,68905,51310],{"class":216},[101,68907,51296],{"class":111},[101,68909,68910],{"class":103,"line":1166},[101,68911,2387],{"emptyLinePlaceholder":27},[101,68913,68914,68916,68918],{"class":103,"line":1181},[101,68915,1021],{"class":111},[101,68917,51323],{"class":51289},[101,68919,51296],{"class":111},[101,68921,68922,68924,68926,68928,68930,68932],{"class":103,"line":1187},[101,68923,52133],{"class":111},[101,68925,51333],{"class":51289},[101,68927,51336],{"class":1950},[101,68929,157],{"class":111},[101,68931,51341],{"class":216},[101,68933,59116],{"class":111},[101,68935,68936,68938,68940,68942,68944,68946,68948,68950,68952],{"class":103,"line":1201},[101,68937,52133],{"class":111},[101,68939,51333],{"class":51289},[101,68941,14908],{"class":1950},[101,68943,157],{"class":111},[101,68945,51380],{"class":216},[101,68947,51360],{"class":1950},[101,68949,157],{"class":111},[101,68951,51387],{"class":216},[101,68953,59116],{"class":111},[101,68955,68956,68958,68960,68962,68964,68966,68968,68970,68973],{"class":103,"line":1207},[101,68957,52133],{"class":111},[101,68959,51333],{"class":51289},[101,68961,51352],{"class":1950},[101,68963,157],{"class":111},[101,68965,51357],{"class":216},[101,68967,51360],{"class":1950},[101,68969,157],{"class":111},[101,68971,68972],{"class":216},"\"ie=edge\"",[101,68974,59116],{"class":111},[101,68976,68977,68979,68981,68984,68986],{"class":103,"line":1298},[101,68978,52133],{"class":111},[101,68980,51396],{"class":51289},[101,68982,68983],{"class":111},">学生信息管理\u003C\u002F",[101,68985,51396],{"class":51289},[101,68987,51296],{"class":111},[101,68989,68990,68992,68995,68998,69000,69003,69005,69007,69010],{"class":103,"line":1304},[101,68991,52133],{"class":111},[101,68993,68994],{"class":51289},"link",[101,68996,68997],{"class":1950}," rel",[101,68999,157],{"class":111},[101,69001,69002],{"class":216},"\"stylesheet\"",[101,69004,61046],{"class":1950},[101,69006,157],{"class":111},[101,69008,69009],{"class":216},"\"css\u002Findex.css\"",[101,69011,59116],{"class":111},[101,69013,69014,69016,69018],{"class":103,"line":1316},[101,69015,51774],{"class":111},[101,69017,51323],{"class":51289},[101,69019,51296],{"class":111},[101,69021,69022],{"class":103,"line":1599},[101,69023,2387],{"emptyLinePlaceholder":27},[101,69025,69026,69028,69030],{"class":103,"line":1604},[101,69027,1021],{"class":111},[101,69029,51789],{"class":51289},[101,69031,51296],{"class":111},[101,69033,69034,69036,69038,69041,69043],{"class":103,"line":1610},[101,69035,52133],{"class":111},[101,69037,39],{"class":51289},[101,69039,69040],{"class":111},">新增学员\u003C\u002F",[101,69042,39],{"class":51289},[101,69044,51296],{"class":111},[101,69046,69047,69049,69051,69053,69055,69057,69060,69062,69064],{"class":103,"line":1615},[101,69048,52133],{"class":111},[101,69050,66614],{"class":51289},[101,69052,53475],{"class":1950},[101,69054,157],{"class":111},[101,69056,62653],{"class":216},[101,69058,69059],{"class":1950}," autocomplete",[101,69061,157],{"class":111},[101,69063,31765],{"class":216},[101,69065,51296],{"class":111},[101,69067,69068,69071,69073,69075,69077,69079,69081,69083,69086,69088,69090,69092],{"class":103,"line":1629},[101,69069,69070],{"class":111},"    姓名：\u003C",[101,69072,53810],{"class":51289},[101,69074,53813],{"class":1950},[101,69076,157],{"class":111},[101,69078,62688],{"class":216},[101,69080,53475],{"class":1950},[101,69082,157],{"class":111},[101,69084,69085],{"class":216},"\"uname\"",[101,69087,14908],{"class":1950},[101,69089,157],{"class":111},[101,69091,69085],{"class":216},[101,69093,59116],{"class":111},[101,69095,69096,69099,69101,69103,69105,69107,69109,69111,69114,69116,69118,69120],{"class":103,"line":1634},[101,69097,69098],{"class":111},"    年龄：\u003C",[101,69100,53810],{"class":51289},[101,69102,53813],{"class":1950},[101,69104,157],{"class":111},[101,69106,62688],{"class":216},[101,69108,53475],{"class":1950},[101,69110,157],{"class":111},[101,69112,69113],{"class":216},"\"age\"",[101,69115,14908],{"class":1950},[101,69117,157],{"class":111},[101,69119,69113],{"class":216},[101,69121,59116],{"class":111},[101,69123,69124],{"class":103,"line":1640},[101,69125,69126],{"class":111},"    性别:\n",[101,69128,69129,69131,69134,69136,69138,69141,69143,69145,69147],{"class":103,"line":1661},[101,69130,51330],{"class":111},[101,69132,69133],{"class":51289},"select",[101,69135,14908],{"class":1950},[101,69137,157],{"class":111},[101,69139,69140],{"class":216},"\"gender\"",[101,69142,53475],{"class":1950},[101,69144,157],{"class":111},[101,69146,69140],{"class":216},[101,69148,51296],{"class":111},[101,69150,69151,69153,69156,69158,69160,69162,69165,69167],{"class":103,"line":1666},[101,69152,55223],{"class":111},[101,69154,69155],{"class":51289},"option",[101,69157,66640],{"class":1950},[101,69159,157],{"class":111},[101,69161,9949],{"class":216},[101,69163,69164],{"class":111},">男\u003C\u002F",[101,69166,69155],{"class":51289},[101,69168,51296],{"class":111},[101,69170,69171,69173,69175,69177,69179,69181,69184,69186],{"class":103,"line":1680},[101,69172,55223],{"class":111},[101,69174,69155],{"class":51289},[101,69176,66640],{"class":1950},[101,69178,157],{"class":111},[101,69180,10018],{"class":216},[101,69182,69183],{"class":111},">女\u003C\u002F",[101,69185,69155],{"class":51289},[101,69187,51296],{"class":111},[101,69189,69190,69192,69194],{"class":103,"line":1685},[101,69191,51765],{"class":111},[101,69193,69133],{"class":51289},[101,69195,51296],{"class":111},[101,69197,69198,69201,69203,69205,69207,69209,69211,69213,69216,69218,69220,69222],{"class":103,"line":1714},[101,69199,69200],{"class":111},"    薪资：\u003C",[101,69202,53810],{"class":51289},[101,69204,53813],{"class":1950},[101,69206,157],{"class":111},[101,69208,62688],{"class":216},[101,69210,53475],{"class":1950},[101,69212,157],{"class":111},[101,69214,69215],{"class":216},"\"salary\"",[101,69217,14908],{"class":1950},[101,69219,157],{"class":111},[101,69221,69215],{"class":216},[101,69223,59116],{"class":111},[101,69225,69226,69229,69231,69233,69235,69238,69240,69242,69244],{"class":103,"line":1719},[101,69227,69228],{"class":111},"    就业城市：\u003C",[101,69230,69133],{"class":51289},[101,69232,14908],{"class":1950},[101,69234,157],{"class":111},[101,69236,69237],{"class":216},"\"city\"",[101,69239,53475],{"class":1950},[101,69241,157],{"class":111},[101,69243,69237],{"class":216},[101,69245,51296],{"class":111},[101,69247,69248,69250,69252,69254,69256,69259,69262,69264],{"class":103,"line":1736},[101,69249,55223],{"class":111},[101,69251,69155],{"class":51289},[101,69253,66640],{"class":1950},[101,69255,157],{"class":111},[101,69257,69258],{"class":216},"\"北京\"",[101,69260,69261],{"class":111},">北京\u003C\u002F",[101,69263,69155],{"class":51289},[101,69265,51296],{"class":111},[101,69267,69268,69270,69272,69274,69276,69279,69282,69284],{"class":103,"line":1741},[101,69269,55223],{"class":111},[101,69271,69155],{"class":51289},[101,69273,66640],{"class":1950},[101,69275,157],{"class":111},[101,69277,69278],{"class":216},"\"上海\"",[101,69280,69281],{"class":111},">上海\u003C\u002F",[101,69283,69155],{"class":51289},[101,69285,51296],{"class":111},[101,69287,69288,69290,69292,69294,69296,69299,69302,69304],{"class":103,"line":1746},[101,69289,55223],{"class":111},[101,69291,69155],{"class":51289},[101,69293,66640],{"class":1950},[101,69295,157],{"class":111},[101,69297,69298],{"class":216},"\"广州\"",[101,69300,69301],{"class":111},">广州\u003C\u002F",[101,69303,69155],{"class":51289},[101,69305,51296],{"class":111},[101,69307,69308,69310,69312,69314,69316,69319,69322,69324],{"class":103,"line":1751},[101,69309,55223],{"class":111},[101,69311,69155],{"class":51289},[101,69313,66640],{"class":1950},[101,69315,157],{"class":111},[101,69317,69318],{"class":216},"\"深圳\"",[101,69320,69321],{"class":111},">深圳\u003C\u002F",[101,69323,69155],{"class":51289},[101,69325,51296],{"class":111},[101,69327,69328,69330,69332,69334,69336,69339,69342,69344],{"class":103,"line":1765},[101,69329,55223],{"class":111},[101,69331,69155],{"class":51289},[101,69333,66640],{"class":1950},[101,69335,157],{"class":111},[101,69337,69338],{"class":216},"\"曹县\"",[101,69340,69341],{"class":111},">曹县\u003C\u002F",[101,69343,69155],{"class":51289},[101,69345,51296],{"class":111},[101,69347,69348,69350,69352],{"class":103,"line":1770},[101,69349,51765],{"class":111},[101,69351,69133],{"class":51289},[101,69353,51296],{"class":111},[101,69355,69356,69358,69360,69362,69364,69367,69370,69372],{"class":103,"line":2564},[101,69357,51330],{"class":111},[101,69359,53876],{"class":51289},[101,69361,53475],{"class":1950},[101,69363,157],{"class":111},[101,69365,69366],{"class":216},"\"add\"",[101,69368,69369],{"class":111},">录入\u003C\u002F",[101,69371,53876],{"class":51289},[101,69373,51296],{"class":111},[101,69375,69376,69378,69380],{"class":103,"line":2578},[101,69377,52406],{"class":111},[101,69379,66614],{"class":51289},[101,69381,51296],{"class":111},[101,69383,69384],{"class":103,"line":2586},[101,69385,2387],{"emptyLinePlaceholder":27},[101,69387,69388,69390,69392,69395,69397],{"class":103,"line":2591},[101,69389,52133],{"class":111},[101,69391,39],{"class":51289},[101,69393,69394],{"class":111},">就业榜\u003C\u002F",[101,69396,39],{"class":51289},[101,69398,51296],{"class":111},[101,69400,69401,69403,69405],{"class":103,"line":2597},[101,69402,52133],{"class":111},[101,69404,249],{"class":51289},[101,69406,51296],{"class":111},[101,69408,69409,69411,69413],{"class":103,"line":2603},[101,69410,51330],{"class":111},[101,69412,252],{"class":51289},[101,69414,51296],{"class":111},[101,69416,69417,69419,69421],{"class":103,"line":2608},[101,69418,55223],{"class":111},[101,69420,255],{"class":51289},[101,69422,51296],{"class":111},[101,69424,69425,69427,69429,69432,69434],{"class":103,"line":7936},[101,69426,55291],{"class":111},[101,69428,258],{"class":51289},[101,69430,69431],{"class":111},">序号\u003C\u002F",[101,69433,258],{"class":51289},[101,69435,51296],{"class":111},[101,69437,69438,69440,69442,69445,69447],{"class":103,"line":7960},[101,69439,55291],{"class":111},[101,69441,258],{"class":51289},[101,69443,69444],{"class":111},">姓名\u003C\u002F",[101,69446,258],{"class":51289},[101,69448,51296],{"class":111},[101,69450,69451,69453,69455,69458,69460],{"class":103,"line":7965},[101,69452,55291],{"class":111},[101,69454,258],{"class":51289},[101,69456,69457],{"class":111},">年龄\u003C\u002F",[101,69459,258],{"class":51289},[101,69461,51296],{"class":111},[101,69463,69464,69466,69468,69471,69473],{"class":103,"line":7971},[101,69465,55291],{"class":111},[101,69467,258],{"class":51289},[101,69469,69470],{"class":111},">性别\u003C\u002F",[101,69472,258],{"class":51289},[101,69474,51296],{"class":111},[101,69476,69477,69479,69481,69484,69486],{"class":103,"line":7998},[101,69478,55291],{"class":111},[101,69480,258],{"class":51289},[101,69482,69483],{"class":111},">薪资\u003C\u002F",[101,69485,258],{"class":51289},[101,69487,51296],{"class":111},[101,69489,69490,69492,69494,69497,69499],{"class":103,"line":8003},[101,69491,55291],{"class":111},[101,69493,258],{"class":51289},[101,69495,69496],{"class":111},">就业城市\u003C\u002F",[101,69498,258],{"class":51289},[101,69500,51296],{"class":111},[101,69502,69503,69505,69507,69510,69512],{"class":103,"line":8009},[101,69504,55291],{"class":111},[101,69506,258],{"class":51289},[101,69508,69509],{"class":111},">操作\u003C\u002F",[101,69511,258],{"class":51289},[101,69513,51296],{"class":111},[101,69515,69516,69518,69520],{"class":103,"line":8021},[101,69517,55396],{"class":111},[101,69519,255],{"class":51289},[101,69521,51296],{"class":111},[101,69523,69524,69526,69528],{"class":103,"line":8033},[101,69525,51765],{"class":111},[101,69527,252],{"class":51289},[101,69529,51296],{"class":111},[101,69531,69532,69534,69536],{"class":103,"line":8045},[101,69533,51330],{"class":111},[101,69535,296],{"class":51289},[101,69537,51296],{"class":111},[101,69539,69540],{"class":103,"line":9704},[101,69541,69542],{"class":170},"      \u003C!-- \n",[101,69544,69545],{"class":103,"line":9729},[101,69546,69547],{"class":170},"        \u003Ctr>\n",[101,69549,69550],{"class":103,"line":9752},[101,69551,69552],{"class":170},"          \u003Ctd>1001\u003C\u002Ftd>\n",[101,69554,69555],{"class":103,"line":9776},[101,69556,69557],{"class":170},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[101,69559,69560],{"class":103,"line":9781},[101,69561,69562],{"class":170},"          \u003Ctd>19\u003C\u002Ftd>\n",[101,69564,69565],{"class":103,"line":9786},[101,69566,69567],{"class":170},"          \u003Ctd>男\u003C\u002Ftd>\n",[101,69569,69570],{"class":103,"line":9791},[101,69571,69572],{"class":170},"          \u003Ctd>15000\u003C\u002Ftd>\n",[101,69574,69575],{"class":103,"line":9800},[101,69576,69577],{"class":170},"          \u003Ctd>上海\u003C\u002Ftd>\n",[101,69579,69580],{"class":103,"line":9805},[101,69581,69582],{"class":170},"          \u003Ctd>\n",[101,69584,69585],{"class":103,"line":9811},[101,69586,69587],{"class":170},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[101,69589,69590],{"class":103,"line":9832},[101,69591,69592],{"class":170},"          \u003C\u002Ftd>\n",[101,69594,69595],{"class":103,"line":9838},[101,69596,69597],{"class":170},"        \u003C\u002Ftr> \n",[101,69599,69600],{"class":103,"line":9852},[101,69601,69602],{"class":170},"        -->\n",[101,69604,69605,69607,69609],{"class":103,"line":9858},[101,69606,51765],{"class":111},[101,69608,296],{"class":51289},[101,69610,51296],{"class":111},[101,69612,69613,69615,69617],{"class":103,"line":9885},[101,69614,52406],{"class":111},[101,69616,249],{"class":51289},[101,69618,51296],{"class":111},[101,69620,69621,69623,69625],{"class":103,"line":9894},[101,69622,52133],{"class":111},[101,69624,51802],{"class":51289},[101,69626,51296],{"class":111},[101,69628,69629],{"class":103,"line":9900},[101,69630,59947],{"class":170},[101,69632,69633,69635,69638,69640,69642,69644,69646,69649],{"class":103,"line":9908},[101,69634,11209],{"class":107},[101,69636,69637],{"class":160}," uname",[101,69639,13552],{"class":107},[101,69641,54385],{"class":111},[101,69643,54388],{"class":1950},[101,69645,112],{"class":111},[101,69647,69648],{"class":216},"'.uname'",[101,69650,118],{"class":111},[101,69652,69653,69655,69657,69659,69661,69663,69665,69668],{"class":103,"line":9913},[101,69654,11209],{"class":107},[101,69656,15677],{"class":160},[101,69658,13552],{"class":107},[101,69660,54385],{"class":111},[101,69662,54388],{"class":1950},[101,69664,112],{"class":111},[101,69666,69667],{"class":216},"'.age'",[101,69669,118],{"class":111},[101,69671,69672,69674,69677,69679,69681,69683,69685,69688],{"class":103,"line":16592},[101,69673,11209],{"class":107},[101,69675,69676],{"class":160}," gender",[101,69678,13552],{"class":107},[101,69680,54385],{"class":111},[101,69682,54388],{"class":1950},[101,69684,112],{"class":111},[101,69686,69687],{"class":216},"'.gender'",[101,69689,118],{"class":111},[101,69691,69692,69694,69697,69699,69701,69703,69705,69708],{"class":103,"line":16598},[101,69693,11209],{"class":107},[101,69695,69696],{"class":160}," salary",[101,69698,13552],{"class":107},[101,69700,54385],{"class":111},[101,69702,54388],{"class":1950},[101,69704,112],{"class":111},[101,69706,69707],{"class":216},"'.salary'",[101,69709,118],{"class":111},[101,69711,69712,69714,69717,69719,69721,69723,69725,69728],{"class":103,"line":16621},[101,69713,11209],{"class":107},[101,69715,69716],{"class":160}," city",[101,69718,13552],{"class":107},[101,69720,54385],{"class":111},[101,69722,54388],{"class":1950},[101,69724,112],{"class":111},[101,69726,69727],{"class":216},"'.city'",[101,69729,118],{"class":111},[101,69731,69732,69734,69737,69739,69741,69743,69745,69748],{"class":103,"line":16627},[101,69733,11209],{"class":107},[101,69735,69736],{"class":160}," tbody",[101,69738,13552],{"class":107},[101,69740,54385],{"class":111},[101,69742,54388],{"class":1950},[101,69744,112],{"class":111},[101,69746,69747],{"class":216},"'tbody'",[101,69749,118],{"class":111},[101,69751,69752],{"class":103,"line":16650},[101,69753,2387],{"emptyLinePlaceholder":27},[101,69755,69756],{"class":103,"line":16664},[101,69757,69758],{"class":170},"    \u002F\u002F 获取所有带有name属性的元素\n",[101,69760,69761,69763,69766,69768,69770,69772,69774,69777],{"class":103,"line":16684},[101,69762,11209],{"class":107},[101,69764,69765],{"class":160}," items",[101,69767,13552],{"class":107},[101,69769,54385],{"class":111},[101,69771,55670],{"class":1950},[101,69773,112],{"class":111},[101,69775,69776],{"class":216},"'[name]'",[101,69778,118],{"class":111},[101,69780,69781],{"class":103,"line":16690},[101,69782,69783],{"class":170},"    \u002F\u002F 声明一个空的数组\n",[101,69785,69786,69788,69790,69792],{"class":103,"line":16701},[101,69787,11209],{"class":107},[101,69789,57684],{"class":160},[101,69791,13552],{"class":107},[101,69793,51827],{"class":111},[101,69795,69796],{"class":103,"line":16724},[101,69797,69798],{"class":170},"    \u002F\u002F 1.录入模块\n",[101,69800,69801],{"class":103,"line":16746},[101,69802,69803],{"class":170},"    \u002F\u002F 1.1这是一个表单提交事件\n",[101,69805,69806,69808,69811,69813,69815,69817,69819,69822],{"class":103,"line":16751},[101,69807,11209],{"class":107},[101,69809,69810],{"class":160}," info",[101,69812,13552],{"class":107},[101,69814,54385],{"class":111},[101,69816,54388],{"class":1950},[101,69818,112],{"class":111},[101,69820,69821],{"class":216},"'.info'",[101,69823,118],{"class":111},[101,69825,69826,69829,69831,69833,69836,69838,69840,69842,69844],{"class":103,"line":16757},[101,69827,69828],{"class":111},"    info.",[101,69830,57802],{"class":1950},[101,69832,112],{"class":111},[101,69834,69835],{"class":216},"'submit'",[101,69837,12423],{"class":111},[101,69839,54438],{"class":107},[101,69841,1645],{"class":111},[101,69843,186],{"class":5204},[101,69845,12430],{"class":111},[101,69847,69848],{"class":103,"line":16771},[101,69849,69850],{"class":170},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[101,69852,69853,69856,69859],{"class":103,"line":16784},[101,69854,69855],{"class":111},"      e.",[101,69857,69858],{"class":1950},"preventDefault",[101,69860,1963],{"class":111},[101,69862,69863],{"class":103,"line":16789},[101,69864,60001],{"class":170},[101,69866,69867],{"class":103,"line":16803},[101,69868,2387],{"emptyLinePlaceholder":27},[101,69870,69871],{"class":103,"line":16808},[101,69872,69873],{"class":170},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[101,69875,69876],{"class":103,"line":16814},[101,69877,69878],{"class":170},"      \u002F\u002F 先遍历循环\n",[101,69880,69881,69883,69885,69887,69889,69891,69893,69895,69897,69900,69902,69904,69906],{"class":103,"line":16819},[101,69882,52273],{"class":107},[101,69884,1645],{"class":111},[101,69886,51836],{"class":107},[101,69888,9426],{"class":111},[101,69890,157],{"class":107},[101,69892,4080],{"class":160},[101,69894,9433],{"class":111},[101,69896,1021],{"class":107},[101,69898,69899],{"class":111}," items.",[101,69901,51957],{"class":160},[101,69903,3201],{"class":111},[101,69905,2279],{"class":107},[101,69907,12430],{"class":111},[101,69909,69910,69912,69915,69917,69920],{"class":103,"line":16833},[101,69911,2484],{"class":107},[101,69913,69914],{"class":111}," (items[i].value ",[101,69916,54475],{"class":107},[101,69918,69919],{"class":216}," ''",[101,69921,12430],{"class":111},[101,69923,69924,69927,69930,69932,69935],{"class":103,"line":16838},[101,69925,69926],{"class":107},"          return",[101,69928,69929],{"class":1950}," alert",[101,69931,112],{"class":111},[101,69933,69934],{"class":216},"'输入内容不能为空'",[101,69936,118],{"class":111},[101,69938,69939],{"class":103,"line":16843},[101,69940,2516],{"class":111},[101,69942,69943],{"class":103,"line":16857},[101,69944,52387],{"class":111},[101,69946,69947],{"class":103,"line":16869},[101,69948,2387],{"emptyLinePlaceholder":27},[101,69950,69951],{"class":103,"line":16874},[101,69952,69953],{"class":170},"      \u002F\u002F 创建新的对象\n",[101,69955,69956,69958,69961,69963],{"class":103,"line":16887},[101,69957,58217],{"class":107},[101,69959,69960],{"class":160}," obj",[101,69962,13552],{"class":107},[101,69964,15560],{"class":111},[101,69966,69967,69970,69972,69974,69976],{"class":103,"line":16892},[101,69968,69969],{"class":111},"        stuID: arr.",[101,69971,51957],{"class":160},[101,69973,45555],{"class":107},[101,69975,25107],{"class":160},[101,69977,31455],{"class":111},[101,69979,69980],{"class":103,"line":16897},[101,69981,69982],{"class":111},"        uname: uname.value,\n",[101,69984,69985],{"class":103,"line":16902},[101,69986,69987],{"class":111},"        age: age.value,\n",[101,69989,69990],{"class":103,"line":16915},[101,69991,69992],{"class":111},"        gender: gender.value,\n",[101,69994,69995],{"class":103,"line":16920},[101,69996,69997],{"class":111},"        salary: salary.value,\n",[101,69999,70000],{"class":103,"line":32622},[101,70001,70002],{"class":111},"        city: city.value\n",[101,70004,70005],{"class":103,"line":32628},[101,70006,52387],{"class":111},[101,70008,70009],{"class":103,"line":32634},[101,70010,70011],{"class":170},"      \u002F\u002F console.log(obj);\n",[101,70013,70014],{"class":103,"line":32640},[101,70015,70016],{"class":170},"      \u002F\u002F 追加到数组里面\n",[101,70018,70019,70021,70023],{"class":103,"line":32646},[101,70020,57996],{"class":111},[101,70022,51873],{"class":1950},[101,70024,70025],{"class":111},"(obj)\n",[101,70027,70028],{"class":103,"line":32657},[101,70029,70030],{"class":170},"      \u002F\u002F console.log(arr);\n",[101,70032,70033],{"class":103,"line":32663},[101,70034,70035],{"class":170},"      \u002F\u002F 清空表单  reset重置表单\n",[101,70037,70038,70041,70043,70046],{"class":103,"line":32683},[101,70039,70040],{"class":160},"      this",[101,70042,669],{"class":111},[101,70044,70045],{"class":1950},"reset",[101,70047,1963],{"class":111},[101,70049,70050],{"class":103,"line":32689},[101,70051,70052],{"class":170},"      \u002F\u002F 调用渲染函数\n",[101,70054,70055,70058],{"class":103,"line":32700},[101,70056,70057],{"class":1950},"      render",[101,70059,1963],{"class":111},[101,70061,70062],{"class":103,"line":32706},[101,70063,33450],{"class":111},[101,70065,70066],{"class":103,"line":32712},[101,70067,70068],{"class":170},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[101,70070,70071,70074,70077],{"class":103,"line":32718},[101,70072,70073],{"class":107},"    function",[101,70075,70076],{"class":1950}," render",[101,70078,10841],{"class":111},[101,70080,70081],{"class":103,"line":32724},[101,70082,70083],{"class":170},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[101,70085,70086,70089,70091],{"class":103,"line":32730},[101,70087,70088],{"class":111},"      tbody.innerHTML ",[101,70090,157],{"class":107},[101,70092,70093],{"class":216}," ''\n",[101,70095,70096],{"class":103,"line":32736},[101,70097,70098],{"class":170},"      \u002F\u002F 遍历数组\n",[101,70100,70101,70103,70105,70107,70109,70111,70113,70115,70117,70119,70121,70123,70125],{"class":103,"line":32742},[101,70102,52273],{"class":107},[101,70104,1645],{"class":111},[101,70106,51836],{"class":107},[101,70108,9426],{"class":111},[101,70110,157],{"class":107},[101,70112,4080],{"class":160},[101,70114,9433],{"class":111},[101,70116,1021],{"class":107},[101,70118,51954],{"class":111},[101,70120,51957],{"class":160},[101,70122,3201],{"class":111},[101,70124,2279],{"class":107},[101,70126,12430],{"class":111},[101,70128,70129,70131,70134,70136,70138,70141,70143,70146],{"class":103,"line":32762},[101,70130,61259],{"class":107},[101,70132,70133],{"class":160}," tr",[101,70135,13552],{"class":107},[101,70137,54385],{"class":111},[101,70139,70140],{"class":1950},"createElement",[101,70142,112],{"class":111},[101,70144,70145],{"class":216},"'tr'",[101,70147,118],{"class":111},[101,70149,70150,70153,70155],{"class":103,"line":32768},[101,70151,70152],{"class":111},"        tr.innerHTML ",[101,70154,157],{"class":107},[101,70156,70157],{"class":216}," `\n",[101,70159,70160,70163,70165,70167,70169,70172,70175],{"class":103,"line":32784},[101,70161,70162],{"class":216},"        \u003Ctd>${",[101,70164,3867],{"class":111},[101,70166,1001],{"class":216},[101,70168,552],{"class":111},[101,70170,70171],{"class":216},"].",[101,70173,70174],{"class":111},"stuID",[101,70176,70177],{"class":216},"}\u003C\u002Ftd>\n",[101,70179,70180,70183,70185,70187,70189,70191,70194],{"class":103,"line":32790},[101,70181,70182],{"class":216},"          \u003Ctd>${",[101,70184,3867],{"class":111},[101,70186,1001],{"class":216},[101,70188,552],{"class":111},[101,70190,70171],{"class":216},[101,70192,70193],{"class":111},"uname",[101,70195,70177],{"class":216},[101,70197,70198,70200,70202,70204,70206,70208,70211],{"class":103,"line":32804},[101,70199,70182],{"class":216},[101,70201,3867],{"class":111},[101,70203,1001],{"class":216},[101,70205,552],{"class":111},[101,70207,70171],{"class":216},[101,70209,70210],{"class":111},"age",[101,70212,70177],{"class":216},[101,70214,70215,70217,70219,70221,70223,70225,70228],{"class":103,"line":32810},[101,70216,70182],{"class":216},[101,70218,3867],{"class":111},[101,70220,1001],{"class":216},[101,70222,552],{"class":111},[101,70224,70171],{"class":216},[101,70226,70227],{"class":111},"gender",[101,70229,70177],{"class":216},[101,70231,70232,70234,70236,70238,70240,70242,70245],{"class":103,"line":32825},[101,70233,70182],{"class":216},[101,70235,3867],{"class":111},[101,70237,1001],{"class":216},[101,70239,552],{"class":111},[101,70241,70171],{"class":216},[101,70243,70244],{"class":111},"salary",[101,70246,70177],{"class":216},[101,70248,70249,70251,70253,70255,70257,70259,70262],{"class":103,"line":32831},[101,70250,70182],{"class":216},[101,70252,3867],{"class":111},[101,70254,1001],{"class":216},[101,70256,552],{"class":111},[101,70258,70171],{"class":216},[101,70260,70261],{"class":111},"city",[101,70263,70177],{"class":216},[101,70265,70266],{"class":103,"line":32840},[101,70267,69582],{"class":216},[101,70269,70270,70273,70275],{"class":103,"line":32846},[101,70271,70272],{"class":216},"            \u003Ca href=\"javascript:\" data-id=${",[101,70274,552],{"class":111},[101,70276,70277],{"class":216},"}>删除\u003C\u002Fa>\n",[101,70279,70280],{"class":103,"line":32855},[101,70281,70282],{"class":216},"          \u003C\u002Ftd> \n",[101,70284,70285],{"class":103,"line":32861},[101,70286,70287],{"class":216},"          `\n",[101,70289,70290],{"class":103,"line":32867},[101,70291,70292],{"class":170},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[101,70294,70295,70298,70301],{"class":103,"line":32876},[101,70296,70297],{"class":111},"        tbody.",[101,70299,70300],{"class":1950},"appendChild",[101,70302,70303],{"class":111},"(tr)\n",[101,70305,70306],{"class":103,"line":32882},[101,70307,52387],{"class":111},[101,70309,70310],{"class":103,"line":32893},[101,70311,2174],{"class":111},[101,70313,70314],{"class":103,"line":32899},[101,70315,2387],{"emptyLinePlaceholder":27},[101,70317,70318],{"class":103,"line":32918},[101,70319,70320],{"class":170},"    \u002F\u002F 3.删除委托\n",[101,70322,70323],{"class":103,"line":32924},[101,70324,70325],{"class":170},"    \u002F\u002F 3.1 事件委托 tbody\n",[101,70327,70328,70331,70333,70335,70337,70339,70341,70343,70345],{"class":103,"line":32935},[101,70329,70330],{"class":111},"    tbody.",[101,70332,57802],{"class":1950},[101,70334,112],{"class":111},[101,70336,57807],{"class":216},[101,70338,12423],{"class":111},[101,70340,54438],{"class":107},[101,70342,1645],{"class":111},[101,70344,186],{"class":5204},[101,70346,12430],{"class":111},[101,70348,70349,70351,70353,70355,70357],{"class":103,"line":32941},[101,70350,54469],{"class":107},[101,70352,67023],{"class":111},[101,70354,54475],{"class":107},[101,70356,68245],{"class":216},[101,70358,12430],{"class":111},[101,70360,70361],{"class":103,"line":32961},[101,70362,70363],{"class":170},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[101,70365,70366],{"class":103,"line":32977},[101,70367,70368],{"class":170},"        \u002F\u002F console.log(e.target.dataset.id);\n",[101,70370,70371],{"class":103,"line":32983},[101,70372,70373],{"class":170},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[101,70375,70376,70379,70381,70384,70386],{"class":103,"line":32997},[101,70377,70378],{"class":111},"        arr.",[101,70380,57999],{"class":1950},[101,70382,70383],{"class":111},"(e.target.dataset.id, ",[101,70385,329],{"class":160},[101,70387,118],{"class":111},[101,70389,70390],{"class":103,"line":33003},[101,70391,70392],{"class":170},"        \u002F\u002F 重新渲染一次\n",[101,70394,70395,70398],{"class":103,"line":33009},[101,70396,70397],{"class":1950},"        render",[101,70399,1963],{"class":111},[101,70401,70402],{"class":103,"line":33020},[101,70403,52387],{"class":111},[101,70405,70406],{"class":103,"line":33026},[101,70407,33450],{"class":111},[101,70409,70410,70412,70414],{"class":103,"line":33032},[101,70411,52406],{"class":111},[101,70413,51802],{"class":51289},[101,70415,51296],{"class":111},[101,70417,70418],{"class":103,"line":33042},[101,70419,2387],{"emptyLinePlaceholder":27},[101,70421,70422,70424,70426],{"class":103,"line":33048},[101,70423,51774],{"class":111},[101,70425,51789],{"class":51289},[101,70427,51296],{"class":111},[101,70429,70430],{"class":103,"line":33059},[101,70431,2387],{"emptyLinePlaceholder":27},[101,70433,70434,70436,70438],{"class":103,"line":33065},[101,70435,51774],{"class":111},[101,70437,50624],{"class":51289},[101,70439,51296],{"class":111},[10,70441,70442],{},"样式：",[92,70444,70448],{"className":70445,"code":70446,"language":70447,"meta":20,"style":20},"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",[98,70449,70450,70455,70465,70474,70478,70482,70487,70497,70502,70506,70511,70521,70526,70535,70539,70543,70548,70553,70563,70573,70578,70582,70587,70596,70606,70611,70621,70631,70635,70640,70648,70652,70657,70662,70667,70675,70684,70688,70693,70702,70706,70711,70720,70724,70729,70738,70747,70755,70759,70764,70773,70783,70792,70802,70808,70817,70827,70837,70841,70846,70855,70863,70873,70881,70890,70899,70909,70917,70921,70926,70935],{"__ignoreMap":20},[101,70451,70452],{"class":103,"line":104},[101,70453,70454],{"class":111},"* {\n",[101,70456,70457,70460,70462],{"class":103,"line":21},[101,70458,70459],{"class":51289},"  margin",[101,70461,51426],{"class":111},[101,70463,70464],{"class":216},"0;\n",[101,70466,70467,70470,70472],{"class":103,"line":1166},[101,70468,70469],{"class":216},"  padding",[101,70471,51426],{"class":111},[101,70473,70464],{"class":216},[101,70475,70476],{"class":103,"line":1181},[101,70477,1552],{"class":111},[101,70479,70480],{"class":103,"line":1187},[101,70481,2387],{"emptyLinePlaceholder":27},[101,70483,70484],{"class":103,"line":1201},[101,70485,70486],{"class":216},"a {\n",[101,70488,70489,70492,70494],{"class":103,"line":1207},[101,70490,70491],{"class":51289},"  text-decoration",[101,70493,51426],{"class":111},[101,70495,70496],{"class":216},"none;\n",[101,70498,70499],{"class":103,"line":1298},[101,70500,70501],{"class":216},"  color:#721c24;\n",[101,70503,70504],{"class":103,"line":1304},[101,70505,1552],{"class":111},[101,70507,70508],{"class":103,"line":1316},[101,70509,70510],{"class":216},"h1 {\n",[101,70512,70513,70516,70518],{"class":103,"line":1599},[101,70514,70515],{"class":51289},"  text-align",[101,70517,51426],{"class":111},[101,70519,70520],{"class":216},"center;\n",[101,70522,70523],{"class":103,"line":1604},[101,70524,70525],{"class":216},"  color:#333;\n",[101,70527,70528,70530,70532],{"class":103,"line":1610},[101,70529,70459],{"class":51289},[101,70531,51426],{"class":111},[101,70533,70534],{"class":216},"20px 0;\n",[101,70536,70537],{"class":103,"line":1615},[101,70538,2661],{"class":111},[101,70540,70541],{"class":103,"line":1629},[101,70542,1552],{"class":111},[101,70544,70545],{"class":103,"line":1634},[101,70546,70547],{"class":216},"table {\n",[101,70549,70550],{"class":103,"line":1640},[101,70551,70552],{"class":216},"  margin:0 auto;\n",[101,70554,70555,70558,70560],{"class":103,"line":1661},[101,70556,70557],{"class":51289},"  width",[101,70559,51426],{"class":111},[101,70561,70562],{"class":216},"800px;\n",[101,70564,70565,70568,70570],{"class":103,"line":1666},[101,70566,70567],{"class":51289},"  border-collapse",[101,70569,51426],{"class":111},[101,70571,70572],{"class":216},"collapse;\n",[101,70574,70575],{"class":103,"line":1680},[101,70576,70577],{"class":216},"  color:#004085;\n",[101,70579,70580],{"class":103,"line":1685},[101,70581,1552],{"class":111},[101,70583,70584],{"class":103,"line":1714},[101,70585,70586],{"class":216},"th {\n",[101,70588,70589,70591,70593],{"class":103,"line":1719},[101,70590,70469],{"class":51289},[101,70592,51426],{"class":111},[101,70594,70595],{"class":216},"10px;\n",[101,70597,70598,70601,70603],{"class":103,"line":1736},[101,70599,70600],{"class":51289},"  background",[101,70602,51426],{"class":111},[101,70604,70605],{"class":170},"#cfe5ff;\n",[101,70607,70608],{"class":103,"line":1741},[101,70609,70610],{"class":111},"  \n",[101,70612,70613,70616,70618],{"class":103,"line":1746},[101,70614,70615],{"class":51289},"  font-size",[101,70617,51426],{"class":111},[101,70619,70620],{"class":216},"20px;\n",[101,70622,70623,70626,70628],{"class":103,"line":1751},[101,70624,70625],{"class":51289},"  font-weight",[101,70627,51426],{"class":111},[101,70629,70630],{"class":216},"400;\n",[101,70632,70633],{"class":103,"line":1765},[101,70634,1552],{"class":111},[101,70636,70637],{"class":103,"line":1770},[101,70638,70639],{"class":216},"td,th {\n",[101,70641,70642,70645],{"class":103,"line":2564},[101,70643,70644],{"class":216},"  border:1px solid",[101,70646,70647],{"class":170}," #b8daff;\n",[101,70649,70650],{"class":103,"line":2578},[101,70651,1552],{"class":111},[101,70653,70654],{"class":103,"line":2586},[101,70655,70656],{"class":216},"td {\n",[101,70658,70659],{"class":103,"line":2591},[101,70660,70661],{"class":216},"  padding:10px;\n",[101,70663,70664],{"class":103,"line":2597},[101,70665,70666],{"class":216},"  color:#666;\n",[101,70668,70669,70671,70673],{"class":103,"line":2603},[101,70670,70515],{"class":51289},[101,70672,51426],{"class":111},[101,70674,70520],{"class":216},[101,70676,70677,70679,70681],{"class":103,"line":2608},[101,70678,70615],{"class":51289},[101,70680,51426],{"class":111},[101,70682,70683],{"class":216},"16px;\n",[101,70685,70686],{"class":103,"line":7936},[101,70687,1552],{"class":111},[101,70689,70690],{"class":103,"line":7960},[101,70691,70692],{"class":216},"tbody tr {\n",[101,70694,70695,70697,70699],{"class":103,"line":7965},[101,70696,70600],{"class":51289},[101,70698,51426],{"class":111},[101,70700,70701],{"class":170},"#fff;\n",[101,70703,70704],{"class":103,"line":7971},[101,70705,1552],{"class":111},[101,70707,70708],{"class":103,"line":7998},[101,70709,70710],{"class":216},"tbody tr:hover {\n",[101,70712,70713,70715,70717],{"class":103,"line":8003},[101,70714,70600],{"class":51289},[101,70716,51426],{"class":111},[101,70718,70719],{"class":170},"#e1ecf8;\n",[101,70721,70722],{"class":103,"line":8009},[101,70723,1552],{"class":111},[101,70725,70726],{"class":103,"line":8021},[101,70727,70728],{"class":216},".info {\n",[101,70730,70731,70733,70735],{"class":103,"line":8033},[101,70732,70557],{"class":51289},[101,70734,51426],{"class":111},[101,70736,70737],{"class":216},"900px;\n",[101,70739,70740,70742,70744],{"class":103,"line":8045},[101,70741,70459],{"class":51289},[101,70743,51426],{"class":111},[101,70745,70746],{"class":216},"50px auto;\n",[101,70748,70749,70751,70753],{"class":103,"line":9704},[101,70750,70515],{"class":51289},[101,70752,51426],{"class":111},[101,70754,70520],{"class":216},[101,70756,70757],{"class":103,"line":9729},[101,70758,1552],{"class":111},[101,70760,70761],{"class":103,"line":9752},[101,70762,70763],{"class":216},".info  input, .info select {\n",[101,70765,70766,70768,70770],{"class":103,"line":9776},[101,70767,70557],{"class":51289},[101,70769,51426],{"class":111},[101,70771,70772],{"class":216},"80px;\n",[101,70774,70775,70778,70780],{"class":103,"line":9781},[101,70776,70777],{"class":51289},"  height",[101,70779,51426],{"class":111},[101,70781,70782],{"class":216},"27px;\n",[101,70784,70785,70788,70790],{"class":103,"line":9786},[101,70786,70787],{"class":51289},"  outline",[101,70789,51426],{"class":111},[101,70791,70496],{"class":216},[101,70793,70794,70797,70799],{"class":103,"line":9791},[101,70795,70796],{"class":51289},"  border-radius",[101,70798,51426],{"class":111},[101,70800,70801],{"class":216},"5px;\n",[101,70803,70804,70806],{"class":103,"line":9800},[101,70805,70644],{"class":216},[101,70807,70647],{"class":170},[101,70809,70810,70813,70815],{"class":103,"line":9805},[101,70811,70812],{"class":51289},"  padding-left",[101,70814,51426],{"class":111},[101,70816,70801],{"class":216},[101,70818,70819,70822,70824],{"class":103,"line":9811},[101,70820,70821],{"class":51289},"  box-sizing",[101,70823,51426],{"class":111},[101,70825,70826],{"class":216},"border-box;\n",[101,70828,70829,70832,70834],{"class":103,"line":9832},[101,70830,70831],{"class":51289},"  margin-right",[101,70833,51426],{"class":111},[101,70835,70836],{"class":216},"15px;\n",[101,70838,70839],{"class":103,"line":9838},[101,70840,1552],{"class":111},[101,70842,70843],{"class":103,"line":9852},[101,70844,70845],{"class":216},".info button {\n",[101,70847,70848,70850,70852],{"class":103,"line":9858},[101,70849,70557],{"class":51289},[101,70851,51426],{"class":111},[101,70853,70854],{"class":216},"60px;\n",[101,70856,70857,70859,70861],{"class":103,"line":9885},[101,70858,70777],{"class":51289},[101,70860,51426],{"class":111},[101,70862,70782],{"class":216},[101,70864,70865,70868,70870],{"class":103,"line":9894},[101,70866,70867],{"class":51289},"  background-color",[101,70869,51426],{"class":111},[101,70871,70872],{"class":170},"#004085;\n",[101,70874,70875,70877,70879],{"class":103,"line":9900},[101,70876,70787],{"class":51289},[101,70878,51426],{"class":111},[101,70880,70496],{"class":216},[101,70882,70883,70886,70888],{"class":103,"line":9908},[101,70884,70885],{"class":51289},"  border",[101,70887,51426],{"class":111},[101,70889,70464],{"class":216},[101,70891,70892,70895,70897],{"class":103,"line":9913},[101,70893,70894],{"class":51289},"  color",[101,70896,51426],{"class":111},[101,70898,70701],{"class":170},[101,70900,70901,70904,70906],{"class":103,"line":16592},[101,70902,70903],{"class":51289},"  cursor",[101,70905,51426],{"class":111},[101,70907,70908],{"class":216},"pointer;\n",[101,70910,70911,70913,70915],{"class":103,"line":16598},[101,70912,70796],{"class":51289},[101,70914,51426],{"class":111},[101,70916,70801],{"class":216},[101,70918,70919],{"class":103,"line":16621},[101,70920,1552],{"class":111},[101,70922,70923],{"class":103,"line":16627},[101,70924,70925],{"class":216},".info .age {\n",[101,70927,70928,70930,70932],{"class":103,"line":16650},[101,70929,70557],{"class":51289},[101,70931,51426],{"class":111},[101,70933,70934],{"class":216},"50px;\n",[101,70936,70937],{"class":103,"line":16664},[101,70938,1552],{"class":111},[10,70940,70941],{},"思路：",[10,70943,70944],{},[1449,70945],{"alt":20,"src":70946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[10,70948,70949],{},[1449,70950],{"alt":20,"src":70951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[10,70953,70954],{},[1449,70955],{"alt":20,"src":70956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[72,70958,70960],{"id":70959},"_3315-重绘回流","3.3.15 重绘回流",[10,70962,70963],{},[1449,70964],{"alt":20,"src":70965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[10,70967,70968],{},[1449,70969],{"alt":20,"src":70970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[10,70972,70973],{},[1449,70974],{"alt":20,"src":70975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[43,70977,70979],{"id":70978},"_34-bom","3.4 BOM",[10,70981,70982],{},[1449,70983],{"alt":20,"src":70984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[10,70986,70987],{},"平时写的document省略了window而已，实际上是window.document",[10,70989,70990],{},"函数也是这样，调用的时候实际为window.fn()",[10,70992,70993],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[10,70995,70996],{},"window大部分情况下可以省略",[72,70998,71000],{"id":70999},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[10,71002,71003],{},"只执行一次",[10,71005,71006],{},[1449,71007],{"alt":20,"src":71008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[10,71010,71011],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[10,71013,71014],{},[1449,71015],{"alt":20,"src":71016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[72,71018,71020],{"id":71019},"_342-js执行机制","3.4.2 JS执行机制",[10,71022,71023],{},[1449,71024],{"alt":20,"src":71025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[10,71027,71028],{},"两个的结果都是1111 3333 2222",[10,71030,71031],{},[1449,71032],{"alt":20,"src":71033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[10,71035,71036],{},[1449,71037],{"alt":20,"src":71038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[10,71040,71041],{},[1449,71042],{"alt":20,"src":71043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[10,71045,71046],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[10,71048,71049],{},"工作流程：",[10,71051,71052],{},[1449,71053],{"alt":20,"src":71054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[10,71056,71057],{},[1449,71058],{"alt":20,"src":71059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[10,71061,71062],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[10,71064,71065],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[72,71067,71069],{"id":71068},"_343-location对象","3.4.3 location对象",[10,71071,71072],{},"location对象属于window这个全局对象下的，可以 省略window",[10,71074,71075],{},[1449,71076],{"alt":20,"src":71077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[10,71079,71080],{},"href可以跳转页面",[55,71082,71083],{},[58,71084,71085],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[10,71087,71088],{},"search得到提交信息之后网站后边的地址",[10,71090,71091],{},[1449,71092],{"alt":20,"src":71093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[10,71095,71096],{},[1449,71097],{"alt":20,"src":71098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[55,71100,71101],{"start":21},[58,71102,71103],{},"hash:这个获取单页面应用#后边的地址",[10,71105,71106],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[10,71108,71109],{},[1449,71110],{"alt":20,"src":71111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[92,71113,71115],{"className":53056,"code":71114,"language":53058,"meta":20,"style":20},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[98,71116,71117,71137,71157],{"__ignoreMap":20},[101,71118,71119,71121,71123,71125,71127,71130,71133,71135],{"class":103,"line":104},[101,71120,52133],{"class":111},[101,71122,14],{"class":51289},[101,71124,61046],{"class":1950},[101,71126,157],{"class":111},[101,71128,71129],{"class":216},"\"#\u002Fmy\"",[101,71131,71132],{"class":111},">我的\u003C\u002F",[101,71134,14],{"class":51289},[101,71136,51296],{"class":111},[101,71138,71139,71141,71143,71145,71147,71150,71153,71155],{"class":103,"line":21},[101,71140,52133],{"class":111},[101,71142,14],{"class":51289},[101,71144,61046],{"class":1950},[101,71146,157],{"class":111},[101,71148,71149],{"class":216},"\"#\u002Ffriend\"",[101,71151,71152],{"class":111},">关注\u003C\u002F",[101,71154,14],{"class":51289},[101,71156,51296],{"class":111},[101,71158,71159,71161,71163,71165,71167,71170,71173,71175],{"class":103,"line":1166},[101,71160,52133],{"class":111},[101,71162,14],{"class":51289},[101,71164,61046],{"class":1950},[101,71166,157],{"class":111},[101,71168,71169],{"class":216},"\"#\u002Fdownload\"",[101,71171,71172],{"class":111},">下载\u003C\u002F",[101,71174,14],{"class":51289},[101,71176,51296],{"class":111},[10,71178,71179],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[55,71181,71182],{"start":1166},[58,71183,71184,71185,71187,71188,71190],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53705,71186],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53705,71189],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[72,71192,71194],{"id":71193},"_345-navigator对象","3.4.5 navigator对象",[10,71196,71197],{},[1449,71198],{"alt":20,"src":71199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[92,71201,71205],{"className":71202,"code":71203,"language":71204,"meta":20,"style":20},"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",[98,71206,71207,71212,71223,71235,71240,71291,71332,71337,71350,71362,71367],{"__ignoreMap":20},[101,71208,71209],{"class":103,"line":104},[101,71210,71211],{"class":170},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[101,71213,71214,71216,71218,71220],{"class":103,"line":21},[101,71215,338],{"class":107},[101,71217,112],{"class":111},[101,71219,54438],{"class":107},[101,71221,71222],{"class":111}," () { \n",[101,71224,71225,71227,71230,71232],{"class":103,"line":1166},[101,71226,6780],{"class":107},[101,71228,71229],{"class":160}," userAgent",[101,71231,13552],{"class":107},[101,71233,71234],{"class":111}," navigator.userAgent \n",[101,71236,71237],{"class":103,"line":1181},[101,71238,71239],{"class":170},"\u002F\u002F 验证是否为Android或iPhone \n",[101,71241,71242,71244,71247,71249,71252,71255,71257,71259,71262,71264,71267,71271,71273,71275,71277,71280,71282,71284,71286,71288],{"class":103,"line":1187},[101,71243,6780],{"class":107},[101,71245,71246],{"class":160}," android",[101,71248,13552],{"class":107},[101,71250,71251],{"class":111}," userAgent.",[101,71253,71254],{"class":1950},"match",[101,71256,112],{"class":111},[101,71258,695],{"class":216},[101,71260,71261],{"class":47966},"(Android);",[101,71263,1097],{"class":107},[101,71265,71266],{"class":160},"[\\s",[101,71268,71270],{"class":71269},"snhLl","\\\u002F",[101,71272,1051],{"class":160},[101,71274,592],{"class":107},[101,71276,112],{"class":47966},[101,71278,71279],{"class":160},"[\\d.]",[101,71281,592],{"class":107},[101,71283,540],{"class":47966},[101,71285,1097],{"class":107},[101,71287,695],{"class":216},[101,71289,71290],{"class":111},") \n",[101,71292,71293,71295,71298,71300,71302,71304,71306,71308,71311,71314,71317,71319,71321,71324,71326,71328,71330],{"class":103,"line":1201},[101,71294,6780],{"class":107},[101,71296,71297],{"class":160}," iphone",[101,71299,13552],{"class":107},[101,71301,71251],{"class":111},[101,71303,71254],{"class":1950},[101,71305,112],{"class":111},[101,71307,695],{"class":216},[101,71309,71310],{"class":47966},"(iPhone",[101,71312,71313],{"class":160},"\\s",[101,71315,71316],{"class":47966},"OS)",[101,71318,71313],{"class":160},[101,71320,112],{"class":47966},[101,71322,71323],{"class":160},"[\\d_]",[101,71325,592],{"class":107},[101,71327,540],{"class":47966},[101,71329,695],{"class":216},[101,71331,71290],{"class":111},[101,71333,71334],{"class":103,"line":1207},[101,71335,71336],{"class":170},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[101,71338,71339,71341,71344,71347],{"class":103,"line":1298},[101,71340,1518],{"class":107},[101,71342,71343],{"class":111}," (android ",[101,71345,71346],{"class":107},"||",[101,71348,71349],{"class":111}," iphone) { \n",[101,71351,71352,71355,71357,71360],{"class":103,"line":1304},[101,71353,71354],{"class":111},"location.href ",[101,71356,157],{"class":107},[101,71358,71359],{"class":216}," 'http:\u002F\u002Fm.itcast.cn'",[101,71361,2661],{"class":111},[101,71363,71364],{"class":103,"line":1316},[101,71365,71366],{"class":111},"} \n",[101,71368,71369],{"class":103,"line":1599},[101,71370,71371],{"class":111},"})()\n",[72,71373,71375],{"id":71374},"_346-histroy对象","3.4.6 histroy对象",[10,71377,71378],{},[1449,71379],{"alt":20,"src":71380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[10,71382,71383],{},"浏览器地址的前进与后退!!!",[10,71385,71386],{},"history.back() 等效于 history.go(-1)",[10,71388,71389],{},"history.forward() 等效于 history.go(1)",[43,71391,71393],{"id":71392},"_35-本地存储","3.5 本地存储",[55,71395,71396,71399,71402],{},[58,71397,71398],{},"数据存储在用户浏览器中",[58,71400,71401],{},"设置、读取方便、甚至页面刷新不丢失数据",[58,71403,71404],{},"容量较大，sessionStorage和localStorage约 5M 左右",[72,71406,71408],{"id":71407},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[10,71410,71411],{},"只能存储字符串",[10,71413,71414],{},[1449,71415],{"alt":20,"src":71416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[10,71418,71419],{},[1449,71420],{"alt":20,"src":71421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[10,71423,71424],{},"键值对要加引号,不然就会当变量来看了",[10,71426,71427],{},"localStorage.setItem('uname', 'pink')",[10,71429,71430],{},"刷新之后信息不再丢失",[10,71432,71433],{},"操作key,value会跟着变",[10,71435,71436],{},"删除只删除键就可以,即名字",[10,71438,71427],{},[10,71440,71441],{},"改:",[10,71443,71444],{},"localStorage.setItem('uname','red')",[10,71446,71447],{},"有这个键就是改,没有这个键就是改",[10,71449,71450],{},[1449,71451],{"alt":20,"src":71452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[10,71454,71455],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[10,71457,71458],{},[1449,71459],{"alt":20,"src":71460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[10,71462,71463],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[72,71465,71467],{"id":71466},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[10,71469,71470],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[10,71472,71473],{},"特性:",[55,71475,71476,71479,71482,71485],{},[58,71477,71478],{},"生命周期为关闭浏览器窗口",[58,71480,71481],{},"在同一个窗口(页面)下数据可以共享",[58,71483,71484],{},"以键值对的形式存储使用",[58,71486,71487],{},"用法跟localStorage 基本相同",[72,71489,71491],{"id":71490},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[10,71493,71494],{},"本地只能存储字符串,无法直接存储复杂数据类型",[92,71496,71498],{"className":53056,"code":71497,"language":53058,"meta":20,"style":20},"\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",[98,71499,71500,71508,71513,71518,71523,71528,71532,71537,71542],{"__ignoreMap":20},[101,71501,71502,71504,71506],{"class":103,"line":104},[101,71503,1021],{"class":111},[101,71505,51802],{"class":51289},[101,71507,51296],{"class":111},[101,71509,71510],{"class":103,"line":21},[101,71511,71512],{"class":111},"    const obj = {\n",[101,71514,71515],{"class":103,"line":1166},[101,71516,71517],{"class":111},"      uname: 'pink老师',\n",[101,71519,71520],{"class":103,"line":1181},[101,71521,71522],{"class":111},"      age: 18,\n",[101,71524,71525],{"class":103,"line":1187},[101,71526,71527],{"class":111},"      gender: '女'\n",[101,71529,71530],{"class":103,"line":1201},[101,71531,2174],{"class":111},[101,71533,71534],{"class":103,"line":1207},[101,71535,71536],{"class":111},"    \u002F\u002F 存储复杂数据类型\n",[101,71538,71539],{"class":103,"line":1298},[101,71540,71541],{"class":111},"    localStorage.setItem('obj', obj)\n",[101,71543,71544,71546,71548],{"class":103,"line":1304},[101,71545,52406],{"class":111},[101,71547,51802],{"class":51289},[101,71549,51296],{"class":111},[10,71551,71552],{},[1449,71553],{"alt":20,"src":71554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[10,71556,71557],{},"如果获取一下数据:",[10,71559,71560],{},"log(localStorage.getItem('obj'))",[10,71562,71563],{},[1449,71564],{"alt":20,"src":71565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[10,71567,71568],{},"发现直接存对象是使用不了的!!!",[21986,71570,71572],{"id":71571},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[10,71574,71575],{},[1449,71576],{"alt":20,"src":71577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[92,71579,71581],{"className":50622,"code":71580,"language":50624,"meta":20,"style":20},"\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",[98,71582,71583,71591,71601,71611,71620,71628,71632,71636,71662,71681,71689,71693,71698,71703],{"__ignoreMap":20},[101,71584,71585,71587,71589],{"class":103,"line":104},[101,71586,1021],{"class":111},[101,71588,51802],{"class":51289},[101,71590,51296],{"class":111},[101,71592,71593,71595,71597,71599],{"class":103,"line":21},[101,71594,11209],{"class":107},[101,71596,69960],{"class":160},[101,71598,13552],{"class":107},[101,71600,15560],{"class":111},[101,71602,71603,71606,71609],{"class":103,"line":1166},[101,71604,71605],{"class":111},"      uname: ",[101,71607,71608],{"class":216},"'pink老师'",[101,71610,31455],{"class":111},[101,71612,71613,71616,71618],{"class":103,"line":1181},[101,71614,71615],{"class":111},"      age: ",[101,71617,761],{"class":160},[101,71619,31455],{"class":111},[101,71621,71622,71625],{"class":103,"line":1187},[101,71623,71624],{"class":111},"      gender: ",[101,71626,71627],{"class":216},"'女'\n",[101,71629,71630],{"class":103,"line":1201},[101,71631,2174],{"class":111},[101,71633,71634],{"class":103,"line":1207},[101,71635,71536],{"class":170},[101,71637,71638,71641,71644,71646,71649,71651,71654,71656,71659],{"class":103,"line":1298},[101,71639,71640],{"class":111},"  localStorage.",[101,71642,71643],{"class":1950},"setItem",[101,71645,112],{"class":111},[101,71647,71648],{"class":216},"'obj'",[101,71650,12423],{"class":111},[101,71652,71653],{"class":160},"JSON",[101,71655,669],{"class":111},[101,71657,71658],{"class":1950},"stringify",[101,71660,71661],{"class":111},"(obj))\n",[101,71663,71664,71667,71669,71672,71675,71677,71679],{"class":103,"line":1304},[101,71665,71666],{"class":111},"  console.",[101,71668,58236],{"class":1950},[101,71670,71671],{"class":111},"(localStorage.",[101,71673,71674],{"class":1950},"getItem",[101,71676,112],{"class":111},[101,71678,71648],{"class":216},[101,71680,30486],{"class":111},[101,71682,71683,71685,71687],{"class":103,"line":1316},[101,71684,52406],{"class":111},[101,71686,51802],{"class":51289},[101,71688,51296],{"class":111},[101,71690,71691],{"class":103,"line":1599},[101,71692,70610],{"class":111},[101,71694,71695],{"class":103,"line":1604},[101,71696,71697],{"class":111},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[101,71699,71700],{"class":103,"line":1610},[101,71701,71702],{"class":111},"  类型是字符串的\n",[101,71704,71705],{"class":103,"line":1615},[101,71706,71707],{"class":111},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21986,71709,71711],{"id":71710},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[10,71713,71714],{},[1449,71715],{"alt":20,"src":71716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[10,71718,71719],{},[1449,71720],{"alt":20,"src":71721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[92,71723,71725],{"className":53056,"code":71724,"language":53058,"meta":20,"style":20},"  \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",[98,71726,71727,71735,71739,71743,71747,71751,71755,71760,71765,71770,71775,71780,71785,71790,71795],{"__ignoreMap":20},[101,71728,71729,71731,71733],{"class":103,"line":104},[101,71730,52133],{"class":111},[101,71732,51802],{"class":51289},[101,71734,51296],{"class":111},[101,71736,71737],{"class":103,"line":21},[101,71738,71512],{"class":111},[101,71740,71741],{"class":103,"line":1166},[101,71742,71517],{"class":111},[101,71744,71745],{"class":103,"line":1181},[101,71746,71522],{"class":111},[101,71748,71749],{"class":103,"line":1187},[101,71750,71527],{"class":111},[101,71752,71753],{"class":103,"line":1201},[101,71754,2174],{"class":111},[101,71756,71757],{"class":103,"line":1207},[101,71758,71759],{"class":111},"    \u002F\u002F 1.存储复杂数据类型\n",[101,71761,71762],{"class":103,"line":1298},[101,71763,71764],{"class":111},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[101,71766,71767],{"class":103,"line":1304},[101,71768,71769],{"class":111},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[101,71771,71772],{"class":103,"line":1316},[101,71773,71774],{"class":111},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[101,71776,71777],{"class":103,"line":1599},[101,71778,71779],{"class":111},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[101,71781,71782],{"class":103,"line":1604},[101,71783,71784],{"class":111},"    \u002F\u002F 取\n",[101,71786,71787],{"class":103,"line":1610},[101,71788,71789],{"class":111},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[101,71791,71792],{"class":103,"line":1615},[101,71793,71794],{"class":111},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[101,71796,71797,71799,71801],{"class":103,"line":1629},[101,71798,52406],{"class":111},[101,71800,51802],{"class":51289},[101,71802,51296],{"class":111},[10,71804,71805],{},[1449,71806],{"alt":20,"src":71807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[72,71809,71811],{"id":71810},"_356-数组map方法","3.5.6 数组map方法",[10,71813,71814],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[10,71816,71817],{},[1449,71818],{"alt":20,"src":71819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[10,71821,71822],{},[1449,71823],{"alt":20,"src":71824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[10,71826,71827,71830],{},[261,71828,71829],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[10,71832,71833],{},"map有返回值，但是forEach没有返回值",[10,71835,71836],{},"map是个方法。用的时候要加 ()",[10,71838,71839],{},"map返回的是一个数组",[72,71841,71843],{"id":71842},"_357-数组中join方法","3.5.7 数组中join方法",[10,71845,71846],{},[1449,71847],{"alt":20,"src":71848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[10,71850,71851],{},"类似于python中拼接字符串一样！",[55,71853,71854,71857,71860],{},[58,71855,71856],{},"小括号为空则逗号分开",[58,71858,71859],{},"小括号为空字符串 ''，则元素之间没有分隔符",[58,71861,71862],{},"小括号用啥符号就用进行分割",[72,71864,71866],{"id":71865},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[55,71868,71869,71872,71875,71878,71881],{},[58,71870,71871],{},"记住本地时间获取快速方式：new Date().toDateString()",[58,71873,71874],{},"尽量减少DOM操作，用好map+join的渲染方式",[58,71876,71877],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[58,71879,71880],{},"return可以实现函数的结束",[58,71882,71883],{},"禁止跳转是 preventDefault() 不要忘记",[92,71885,71887],{"className":50622,"code":71886,"language":50624,"meta":20,"style":20},"\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",[98,71888,71889,71899,71913,71917,71925,71939,71959,71971,71979,71985,71995,72005,72009,72013,72019,72029,72041,72045,72049,72056,72068,72082,72092,72096,72100,72107,72114,72121,72133,72145,72155,72167,72171,72175,72182,72189,72201,72213,72223,72235,72265,72269,72273,72280,72292,72304,72328,72338,72348,72352,72356,72364,72375,72387,72399,72411,72428,72440,72452,72456,72460,72467,72479,72491,72503,72514,72532,72545,72557,72581,72592,72596,72600,72608,72618,72622,72626,72632,72644,72655,72665,72669,72673,72679,72701,72705,72709,72715,72721,72733,72743,72755,72785,72798,72815,72819,72823,72834,72856,72866,72870,72874,72887,72897,72909,72921,72933,72945,72955,72965,72975,72986,72999,73003,73011,73019,73023,73031,73044,73064,73097,73130,73163,73189,73207,73225,73233,73259,73277,73295,73313,73331,73349,73357,73365,73383,73391,73420,73428,73436,73444,73457,73469,73481,73493,73505,73517,73530,73542,73550,73558,73566,73571,73576,73580,73584,73588,73592,73596,73600,73605,73610,73615,73620,73628,73636,73644,73649,73654,73659,73664,73669,73674,73679,73684,73689,73694,73699,73704,73709,73714,73718,73723,73728,73738,73747,73751,73756,73765,73781,73823,73863,73902,73967,73975,73979,73984,74002,74010,74015,74020,74050,74056,74061,74074,74086,74098,74110,74122,74134,74146,74150,74160,74164,74169,74174,74178,74187,74191,74196,74201,74220,74225,74245,74249,74254,74258,74263,74281,74299,74317,74336,74355,74374,74379,74385,74406,74412,74421,74427,74433,74439,74466,74479,74484,74494,74500,74506,74512,74518,74523,74529,74535,74541,74547,74580,74585,74590,74595,74600,74606,74612,74618,74629,74634,74640,74647,74661,74667,74691,74696,74701,74707,74713,74734,74740,74753,74759,74765,74771,74777,74782,74788,74794,74800,74818,74832,74838,74846,74852,74874,74879,74884,74889,74894,74899,74908,74917,74922],{"__ignoreMap":20},[101,71890,71891,71893,71895,71897],{"class":103,"line":104},[101,71892,51286],{"class":111},[101,71894,51290],{"class":51289},[101,71896,51293],{"class":1950},[101,71898,51296],{"class":111},[101,71900,71901,71903,71905,71907,71909,71911],{"class":103,"line":21},[101,71902,1021],{"class":111},[101,71904,50624],{"class":51289},[101,71906,51305],{"class":1950},[101,71908,157],{"class":111},[101,71910,51310],{"class":216},[101,71912,51296],{"class":111},[101,71914,71915],{"class":103,"line":1166},[101,71916,2387],{"emptyLinePlaceholder":27},[101,71918,71919,71921,71923],{"class":103,"line":1181},[101,71920,1021],{"class":111},[101,71922,51323],{"class":51289},[101,71924,51296],{"class":111},[101,71926,71927,71929,71931,71933,71935,71937],{"class":103,"line":1187},[101,71928,52133],{"class":111},[101,71930,51333],{"class":51289},[101,71932,51336],{"class":1950},[101,71934,157],{"class":111},[101,71936,51341],{"class":216},[101,71938,51296],{"class":111},[101,71940,71941,71943,71945,71947,71949,71951,71953,71955,71957],{"class":103,"line":1201},[101,71942,52133],{"class":111},[101,71944,51333],{"class":51289},[101,71946,14908],{"class":1950},[101,71948,157],{"class":111},[101,71950,51380],{"class":216},[101,71952,51360],{"class":1950},[101,71954,157],{"class":111},[101,71956,51387],{"class":216},[101,71958,51296],{"class":111},[101,71960,71961,71963,71965,71967,71969],{"class":103,"line":1207},[101,71962,52133],{"class":111},[101,71964,51396],{"class":51289},[101,71966,51399],{"class":111},[101,71968,51396],{"class":51289},[101,71970,51296],{"class":111},[101,71972,71973,71975,71977],{"class":103,"line":1298},[101,71974,52133],{"class":111},[101,71976,5114],{"class":51289},[101,71978,51296],{"class":111},[101,71980,71981,71983],{"class":103,"line":1304},[101,71982,6391],{"class":51289},[101,71984,15560],{"class":111},[101,71986,71987,71989,71991,71993],{"class":103,"line":1316},[101,71988,54684],{"class":160},[101,71990,51426],{"class":111},[101,71992,303],{"class":160},[101,71994,1277],{"class":111},[101,71996,71997,71999,72001,72003],{"class":103,"line":1599},[101,71998,54695],{"class":160},[101,72000,51426],{"class":111},[101,72002,303],{"class":160},[101,72004,1277],{"class":111},[101,72006,72007],{"class":103,"line":1604},[101,72008,2174],{"class":111},[101,72010,72011],{"class":103,"line":1610},[101,72012,2387],{"emptyLinePlaceholder":27},[101,72014,72015,72017],{"class":103,"line":1615},[101,72016,57268],{"class":51289},[101,72018,15560],{"class":111},[101,72020,72021,72023,72025,72027],{"class":103,"line":1629},[101,72022,57275],{"class":160},[101,72024,51426],{"class":111},[101,72026,51581],{"class":160},[101,72028,1277],{"class":111},[101,72030,72031,72033,72035,72037,72039],{"class":103,"line":1634},[101,72032,62066],{"class":160},[101,72034,51426],{"class":111},[101,72036,811],{"class":160},[101,72038,51481],{"class":107},[101,72040,1277],{"class":111},[101,72042,72043],{"class":103,"line":1640},[101,72044,2174],{"class":111},[101,72046,72047],{"class":103,"line":1661},[101,72048,2387],{"emptyLinePlaceholder":27},[101,72050,72051,72054],{"class":103,"line":1666},[101,72052,72053],{"class":1950},"    .info",[101,72055,15560],{"class":111},[101,72057,72058,72060,72062,72064,72066],{"class":103,"line":1680},[101,72059,54760],{"class":160},[101,72061,51426],{"class":111},[101,72063,51478],{"class":160},[101,72065,51481],{"class":107},[101,72067,1277],{"class":111},[101,72069,72070,72072,72074,72076,72078,72080],{"class":103,"line":1685},[101,72071,54695],{"class":160},[101,72073,51426],{"class":111},[101,72075,557],{"class":160},[101,72077,51481],{"class":107},[101,72079,51545],{"class":160},[101,72081,1277],{"class":111},[101,72083,72084,72086,72088,72090],{"class":103,"line":1714},[101,72085,57275],{"class":160},[101,72087,51426],{"class":111},[101,72089,51581],{"class":160},[101,72091,1277],{"class":111},[101,72093,72094],{"class":103,"line":1719},[101,72095,2174],{"class":111},[101,72097,72098],{"class":103,"line":1736},[101,72099,2387],{"emptyLinePlaceholder":27},[101,72101,72102,72105],{"class":103,"line":1741},[101,72103,72104],{"class":1950},"    .uname",[101,72106,31455],{"class":111},[101,72108,72109,72112],{"class":103,"line":1746},[101,72110,72111],{"class":1950},"    .age",[101,72113,31455],{"class":111},[101,72115,72116,72119],{"class":103,"line":1751},[101,72117,72118],{"class":1950},"    .salary",[101,72120,15560],{"class":111},[101,72122,72123,72125,72127,72129,72131],{"class":103,"line":1765},[101,72124,54760],{"class":160},[101,72126,51426],{"class":111},[101,72128,422],{"class":160},[101,72130,51481],{"class":107},[101,72132,1277],{"class":111},[101,72134,72135,72137,72139,72141,72143],{"class":103,"line":1770},[101,72136,54774],{"class":160},[101,72138,51426],{"class":111},[101,72140,811],{"class":160},[101,72142,51481],{"class":107},[101,72144,1277],{"class":111},[101,72146,72147,72149,72151,72153],{"class":103,"line":2564},[101,72148,61769],{"class":160},[101,72150,51426],{"class":111},[101,72152,54726],{"class":160},[101,72154,1277],{"class":111},[101,72156,72157,72159,72161,72163,72165],{"class":103,"line":2578},[101,72158,61739],{"class":160},[101,72160,51426],{"class":111},[101,72162,686],{"class":160},[101,72164,51481],{"class":107},[101,72166,1277],{"class":111},[101,72168,72169],{"class":103,"line":2586},[101,72170,2174],{"class":111},[101,72172,72173],{"class":103,"line":2591},[101,72174,2387],{"emptyLinePlaceholder":27},[101,72176,72177,72180],{"class":103,"line":2597},[101,72178,72179],{"class":1950},"    .gender",[101,72181,31455],{"class":111},[101,72183,72184,72187],{"class":103,"line":2603},[101,72185,72186],{"class":1950},"    .city",[101,72188,15560],{"class":111},[101,72190,72191,72193,72195,72197,72199],{"class":103,"line":2608},[101,72192,54760],{"class":160},[101,72194,51426],{"class":111},[101,72196,422],{"class":160},[101,72198,51481],{"class":107},[101,72200,1277],{"class":111},[101,72202,72203,72205,72207,72209,72211],{"class":103,"line":7936},[101,72204,54774],{"class":160},[101,72206,51426],{"class":111},[101,72208,936],{"class":160},[101,72210,51481],{"class":107},[101,72212,1277],{"class":111},[101,72214,72215,72217,72219,72221],{"class":103,"line":7960},[101,72216,61769],{"class":160},[101,72218,51426],{"class":111},[101,72220,54726],{"class":160},[101,72222,1277],{"class":111},[101,72224,72225,72227,72229,72231,72233],{"class":103,"line":7965},[101,72226,61739],{"class":160},[101,72228,51426],{"class":111},[101,72230,686],{"class":160},[101,72232,51481],{"class":107},[101,72234,1277],{"class":111},[101,72236,72237,72239,72241,72243,72245,72247,72250,72252,72254,72256,72259,72261,72263],{"class":103,"line":7971},[101,72238,61966],{"class":160},[101,72240,51426],{"class":111},[101,72242,329],{"class":160},[101,72244,51481],{"class":107},[101,72246,51510],{"class":160},[101,72248,72249],{"class":160}," rgb",[101,72251,112],{"class":111},[101,72253,1709],{"class":160},[101,72255,12423],{"class":111},[101,72257,72258],{"class":160},"197",[101,72260,12423],{"class":111},[101,72262,72258],{"class":160},[101,72264,2706],{"class":111},[101,72266,72267],{"class":103,"line":7998},[101,72268,2174],{"class":111},[101,72270,72271],{"class":103,"line":8003},[101,72272,2387],{"emptyLinePlaceholder":27},[101,72274,72275,72278],{"class":103,"line":8009},[101,72276,72277],{"class":51289},"    button",[101,72279,15560],{"class":111},[101,72281,72282,72284,72286,72288,72290],{"class":103,"line":8021},[101,72283,54774],{"class":160},[101,72285,51426],{"class":111},[101,72287,936],{"class":160},[101,72289,51481],{"class":107},[101,72291,1277],{"class":111},[101,72293,72294,72296,72298,72300,72302],{"class":103,"line":8033},[101,72295,54760],{"class":160},[101,72297,51426],{"class":111},[101,72299,595],{"class":160},[101,72301,51481],{"class":107},[101,72303,1277],{"class":111},[101,72305,72306,72308,72310,72313,72315,72317,72319,72322,72324,72326],{"class":103,"line":8045},[101,72307,54873],{"class":160},[101,72309,51426],{"class":111},[101,72311,72312],{"class":160},"rgb",[101,72314,112],{"class":111},[101,72316,1080],{"class":160},[101,72318,12423],{"class":111},[101,72320,72321],{"class":160},"187",[101,72323,12423],{"class":111},[101,72325,410],{"class":160},[101,72327,2706],{"class":111},[101,72329,72330,72332,72334,72336],{"class":103,"line":9704},[101,72331,57405],{"class":160},[101,72333,51426],{"class":111},[101,72335,60831],{"class":160},[101,72337,1277],{"class":111},[101,72339,72340,72342,72344,72346],{"class":103,"line":9729},[101,72341,61966],{"class":160},[101,72343,51426],{"class":111},[101,72345,303],{"class":160},[101,72347,1277],{"class":111},[101,72349,72350],{"class":103,"line":9752},[101,72351,2174],{"class":111},[101,72353,72354],{"class":103,"line":9776},[101,72355,2387],{"emptyLinePlaceholder":27},[101,72357,72358,72360,72362],{"class":103,"line":9781},[101,72359,72277],{"class":51289},[101,72361,51677],{"class":51289},[101,72363,15560],{"class":111},[101,72365,72366,72368,72370,72373],{"class":103,"line":9786},[101,72367,54998],{"class":160},[101,72369,51426],{"class":111},[101,72371,72372],{"class":160},"inline-block",[101,72374,1277],{"class":111},[101,72376,72377,72379,72381,72383,72385],{"class":103,"line":9791},[101,72378,54760],{"class":160},[101,72380,51426],{"class":111},[101,72382,557],{"class":160},[101,72384,51481],{"class":107},[101,72386,1277],{"class":111},[101,72388,72389,72391,72393,72395,72397],{"class":103,"line":9800},[101,72390,54774],{"class":160},[101,72392,51426],{"class":111},[101,72394,557],{"class":160},[101,72396,51481],{"class":107},[101,72398,1277],{"class":111},[101,72400,72401,72403,72405,72407,72409],{"class":103,"line":9805},[101,72402,57348],{"class":160},[101,72404,51426],{"class":111},[101,72406,583],{"class":160},[101,72408,51481],{"class":107},[101,72410,1277],{"class":111},[101,72412,72413,72415,72417,72419,72421,72423,72426],{"class":103,"line":9811},[101,72414,61966],{"class":160},[101,72416,51426],{"class":111},[101,72418,329],{"class":160},[101,72420,51481],{"class":107},[101,72422,51510],{"class":160},[101,72424,72425],{"class":160}," #fff",[101,72427,1277],{"class":111},[101,72429,72430,72432,72434,72436,72438],{"class":103,"line":9832},[101,72431,55123],{"class":160},[101,72433,51426],{"class":111},[101,72435,430],{"class":160},[101,72437,51481],{"class":107},[101,72439,1277],{"class":111},[101,72441,72442,72444,72446,72448,72450],{"class":103,"line":9838},[101,72443,61739],{"class":160},[101,72445,51426],{"class":111},[101,72447,329],{"class":160},[101,72449,51481],{"class":107},[101,72451,1277],{"class":111},[101,72453,72454],{"class":103,"line":9852},[101,72455,2174],{"class":111},[101,72457,72458],{"class":103,"line":9858},[101,72459,2387],{"emptyLinePlaceholder":27},[101,72461,72462,72465],{"class":103,"line":9885},[101,72463,72464],{"class":1950},"    .total",[101,72466,15560],{"class":111},[101,72468,72469,72471,72473,72475,72477],{"class":103,"line":9894},[101,72470,54760],{"class":160},[101,72472,51426],{"class":111},[101,72474,61618],{"class":160},[101,72476,51481],{"class":107},[101,72478,1277],{"class":111},[101,72480,72481,72483,72485,72487,72489],{"class":103,"line":9900},[101,72482,54774],{"class":160},[101,72484,51426],{"class":111},[101,72486,512],{"class":160},[101,72488,51481],{"class":107},[101,72490,1277],{"class":111},[101,72492,72493,72495,72497,72499,72501],{"class":103,"line":9908},[101,72494,57348],{"class":160},[101,72496,51426],{"class":111},[101,72498,512],{"class":160},[101,72500,51481],{"class":107},[101,72502,1277],{"class":111},[101,72504,72505,72507,72509,72512],{"class":103,"line":9913},[101,72506,57275],{"class":160},[101,72508,51426],{"class":111},[101,72510,72511],{"class":160},"right",[101,72513,1277],{"class":111},[101,72515,72516,72518,72520,72522,72524,72526,72528,72530],{"class":103,"line":16592},[101,72517,54695],{"class":160},[101,72519,51426],{"class":111},[101,72521,512],{"class":160},[101,72523,51481],{"class":107},[101,72525,51545],{"class":160},[101,72527,2025],{"class":160},[101,72529,51481],{"class":107},[101,72531,1277],{"class":111},[101,72533,72534,72537,72539,72541,72543],{"class":103,"line":16598},[101,72535,72536],{"class":160},"      padding-right",[101,72538,51426],{"class":111},[101,72540,557],{"class":160},[101,72542,51481],{"class":107},[101,72544,1277],{"class":111},[101,72546,72547,72549,72551,72553,72555],{"class":103,"line":16621},[101,72548,54911],{"class":160},[101,72550,51426],{"class":111},[101,72552,634],{"class":160},[101,72554,51481],{"class":107},[101,72556,1277],{"class":111},[101,72558,72559,72561,72563,72565,72567,72570,72572,72575,72577,72579],{"class":103,"line":16627},[101,72560,54873],{"class":160},[101,72562,51426],{"class":111},[101,72564,72312],{"class":160},[101,72566,112],{"class":111},[101,72568,72569],{"class":160},"237",[101,72571,12423],{"class":111},[101,72573,72574],{"class":160},"235",[101,72576,12423],{"class":111},[101,72578,72574],{"class":160},[101,72580,2706],{"class":111},[101,72582,72583,72586,72588,72590],{"class":103,"line":16650},[101,72584,72585],{"class":160},"      box-sizing",[101,72587,51426],{"class":111},[101,72589,60494],{"class":160},[101,72591,1277],{"class":111},[101,72593,72594],{"class":103,"line":16664},[101,72595,2174],{"class":111},[101,72597,72598],{"class":103,"line":16684},[101,72599,2387],{"emptyLinePlaceholder":27},[101,72601,72602,72604,72606],{"class":103,"line":16690},[101,72603,72464],{"class":1950},[101,72605,51677],{"class":51289},[101,72607,15560],{"class":111},[101,72609,72610,72612,72614,72616],{"class":103,"line":16701},[101,72611,57405],{"class":160},[101,72613,51426],{"class":111},[101,72615,57410],{"class":160},[101,72617,1277],{"class":111},[101,72619,72620],{"class":103,"line":16724},[101,72621,2174],{"class":111},[101,72623,72624],{"class":103,"line":16746},[101,72625,2387],{"emptyLinePlaceholder":27},[101,72627,72628,72630],{"class":103,"line":16751},[101,72629,65012],{"class":51289},[101,72631,15560],{"class":111},[101,72633,72634,72636,72638,72640,72642],{"class":103,"line":16757},[101,72635,54760],{"class":160},[101,72637,51426],{"class":111},[101,72639,61618],{"class":160},[101,72641,51481],{"class":107},[101,72643,1277],{"class":111},[101,72645,72646,72648,72650,72653],{"class":103,"line":16771},[101,72647,54695],{"class":160},[101,72649,51426],{"class":111},[101,72651,72652],{"class":160},"auto",[101,72654,1277],{"class":111},[101,72656,72657,72659,72661,72663],{"class":103,"line":16784},[101,72658,65019],{"class":160},[101,72660,51426],{"class":111},[101,72662,65024],{"class":160},[101,72664,1277],{"class":111},[101,72666,72667],{"class":103,"line":16789},[101,72668,2174],{"class":111},[101,72670,72671],{"class":103,"line":16803},[101,72672,2387],{"emptyLinePlaceholder":27},[101,72674,72675,72677],{"class":103,"line":16808},[101,72676,65104],{"class":51289},[101,72678,15560],{"class":111},[101,72680,72681,72683,72685,72687,72689,72691,72693,72695,72697,72699],{"class":103,"line":16814},[101,72682,54873],{"class":160},[101,72684,51426],{"class":111},[101,72686,72312],{"class":160},[101,72688,112],{"class":111},[101,72690,72569],{"class":160},[101,72692,12423],{"class":111},[101,72694,72574],{"class":160},[101,72696,12423],{"class":111},[101,72698,72574],{"class":160},[101,72700,2706],{"class":111},[101,72702,72703],{"class":103,"line":16819},[101,72704,2174],{"class":111},[101,72706,72707],{"class":103,"line":16833},[101,72708,2387],{"emptyLinePlaceholder":27},[101,72710,72711,72713],{"class":103,"line":16838},[101,72712,65104],{"class":51289},[101,72714,31455],{"class":111},[101,72716,72717,72719],{"class":103,"line":16843},[101,72718,65170],{"class":51289},[101,72720,15560],{"class":111},[101,72722,72723,72725,72727,72729,72731],{"class":103,"line":16857},[101,72724,54774],{"class":160},[101,72726,51426],{"class":111},[101,72728,384],{"class":160},[101,72730,51481],{"class":107},[101,72732,1277],{"class":111},[101,72734,72735,72737,72739,72741],{"class":103,"line":16869},[101,72736,57275],{"class":160},[101,72738,51426],{"class":111},[101,72740,23725],{"class":160},[101,72742,1277],{"class":111},[101,72744,72745,72747,72749,72751,72753],{"class":103,"line":16874},[101,72746,54911],{"class":160},[101,72748,51426],{"class":111},[101,72750,660],{"class":160},[101,72752,51481],{"class":107},[101,72754,1277],{"class":111},[101,72756,72757,72759,72761,72763,72765,72767,72769,72771,72774,72776,72779,72781,72783],{"class":103,"line":16887},[101,72758,61966],{"class":160},[101,72760,51426],{"class":111},[101,72762,329],{"class":160},[101,72764,51481],{"class":107},[101,72766,51510],{"class":160},[101,72768,72249],{"class":160},[101,72770,112],{"class":111},[101,72772,72773],{"class":160},"228",[101,72775,12423],{"class":111},[101,72777,72778],{"class":160},"225",[101,72780,12423],{"class":111},[101,72782,72778],{"class":160},[101,72784,2706],{"class":111},[101,72786,72787,72790,72792,72794,72796],{"class":103,"line":16892},[101,72788,72789],{"class":160},"      padding-left",[101,72791,51426],{"class":111},[101,72793,430],{"class":160},[101,72795,51481],{"class":107},[101,72797,1277],{"class":111},[101,72799,72800,72802,72804,72806,72809,72811,72813],{"class":103,"line":16897},[101,72801,61849],{"class":160},[101,72803,51426],{"class":111},[101,72805,28110],{"class":160},[101,72807,72808],{"class":160}," linear",[101,72810,61856],{"class":160},[101,72812,806],{"class":107},[101,72814,1277],{"class":111},[101,72816,72817],{"class":103,"line":16902},[101,72818,2174],{"class":111},[101,72820,72821],{"class":103,"line":16915},[101,72822,2387],{"emptyLinePlaceholder":27},[101,72824,72825,72828,72830,72832],{"class":103,"line":16920},[101,72826,72827],{"class":51289},"    tbody",[101,72829,70133],{"class":51289},[101,72831,60929],{"class":1950},[101,72833,15560],{"class":111},[101,72835,72836,72838,72840,72842,72844,72846,72848,72850,72852,72854],{"class":103,"line":32622},[101,72837,54873],{"class":160},[101,72839,51426],{"class":111},[101,72841,72312],{"class":160},[101,72843,112],{"class":111},[101,72845,72569],{"class":160},[101,72847,12423],{"class":111},[101,72849,72574],{"class":160},[101,72851,12423],{"class":111},[101,72853,72574],{"class":160},[101,72855,2706],{"class":111},[101,72857,72858,72860,72862,72864],{"class":103,"line":32628},[101,72859,62014],{"class":160},[101,72861,51426],{"class":111},[101,72863,62019],{"class":160},[101,72865,1277],{"class":111},[101,72867,72868],{"class":103,"line":32634},[101,72869,2174],{"class":111},[101,72871,72872],{"class":103,"line":32640},[101,72873,2387],{"emptyLinePlaceholder":27},[101,72875,72876,72878,72880,72883,72885],{"class":103,"line":32646},[101,72877,72827],{"class":51289},[101,72879,70133],{"class":51289},[101,72881,72882],{"class":51289}," td",[101,72884,1385],{"class":51289},[101,72886,15560],{"class":111},[101,72888,72889,72891,72893,72895],{"class":103,"line":32657},[101,72890,54998],{"class":160},[101,72892,51426],{"class":111},[101,72894,60858],{"class":160},[101,72896,1277],{"class":111},[101,72898,72899,72901,72903,72905,72907],{"class":103,"line":32663},[101,72900,54760],{"class":160},[101,72902,51426],{"class":111},[101,72904,1018],{"class":160},[101,72906,51481],{"class":107},[101,72908,1277],{"class":111},[101,72910,72911,72913,72915,72917,72919],{"class":103,"line":32683},[101,72912,54774],{"class":160},[101,72914,51426],{"class":111},[101,72916,936],{"class":160},[101,72918,51481],{"class":107},[101,72920,1277],{"class":111},[101,72922,72923,72925,72927,72929,72931],{"class":103,"line":32689},[101,72924,57348],{"class":160},[101,72926,51426],{"class":111},[101,72928,936],{"class":160},[101,72930,51481],{"class":107},[101,72932,1277],{"class":111},[101,72934,72935,72937,72939,72941,72943],{"class":103,"line":32700},[101,72936,62066],{"class":160},[101,72938,51426],{"class":111},[101,72940,189],{"class":160},[101,72942,51481],{"class":107},[101,72944,1277],{"class":111},[101,72946,72947,72949,72951,72953],{"class":103,"line":32706},[101,72948,57405],{"class":160},[101,72950,51426],{"class":111},[101,72952,60831],{"class":160},[101,72954,1277],{"class":111},[101,72956,72957,72959,72961,72963],{"class":103,"line":32712},[101,72958,57275],{"class":160},[101,72960,51426],{"class":111},[101,72962,51581],{"class":160},[101,72964,1277],{"class":111},[101,72966,72967,72969,72971,72973],{"class":103,"line":32718},[101,72968,63959],{"class":160},[101,72970,51426],{"class":111},[101,72972,54726],{"class":160},[101,72974,1277],{"class":111},[101,72976,72977,72979,72981,72984],{"class":103,"line":32724},[101,72978,54873],{"class":160},[101,72980,51426],{"class":111},[101,72982,72983],{"class":160},"orange",[101,72985,1277],{"class":111},[101,72987,72988,72990,72992,72995,72997],{"class":103,"line":32730},[101,72989,55123],{"class":160},[101,72991,51426],{"class":111},[101,72993,72994],{"class":160},"12.5",[101,72996,51481],{"class":107},[101,72998,1277],{"class":111},[101,73000,73001],{"class":103,"line":32736},[101,73002,2174],{"class":111},[101,73004,73005,73007,73009],{"class":103,"line":32742},[101,73006,52406],{"class":111},[101,73008,5114],{"class":51289},[101,73010,51296],{"class":111},[101,73012,73013,73015,73017],{"class":103,"line":32762},[101,73014,51774],{"class":111},[101,73016,51323],{"class":51289},[101,73018,51296],{"class":111},[101,73020,73021],{"class":103,"line":32768},[101,73022,2387],{"emptyLinePlaceholder":27},[101,73024,73025,73027,73029],{"class":103,"line":32784},[101,73026,1021],{"class":111},[101,73028,51789],{"class":51289},[101,73030,51296],{"class":111},[101,73032,73033,73035,73037,73040,73042],{"class":103,"line":32790},[101,73034,52133],{"class":111},[101,73036,43],{"class":51289},[101,73038,73039],{"class":111},">学生就业统计表\u003C\u002F",[101,73041,43],{"class":51289},[101,73043,51296],{"class":111},[101,73045,73046,73048,73050,73052,73054,73056,73058,73060,73062],{"class":103,"line":32804},[101,73047,52133],{"class":111},[101,73049,66614],{"class":51289},[101,73051,53475],{"class":1950},[101,73053,157],{"class":111},[101,73055,62653],{"class":216},[101,73057,69059],{"class":1950},[101,73059,157],{"class":111},[101,73061,31765],{"class":216},[101,73063,51296],{"class":111},[101,73065,73066,73068,73070,73072,73074,73076,73078,73080,73082,73084,73086,73089,73091,73093,73095],{"class":103,"line":32810},[101,73067,51330],{"class":111},[101,73069,53810],{"class":51289},[101,73071,53813],{"class":1950},[101,73073,157],{"class":111},[101,73075,62688],{"class":216},[101,73077,14908],{"class":1950},[101,73079,157],{"class":111},[101,73081,69085],{"class":216},[101,73083,61009],{"class":1950},[101,73085,157],{"class":111},[101,73087,73088],{"class":216},"\"姓名\"",[101,73090,53475],{"class":1950},[101,73092,157],{"class":111},[101,73094,69085],{"class":216},[101,73096,51296],{"class":111},[101,73098,73099,73101,73103,73105,73107,73109,73111,73113,73115,73117,73119,73122,73124,73126,73128],{"class":103,"line":32825},[101,73100,51330],{"class":111},[101,73102,53810],{"class":51289},[101,73104,53813],{"class":1950},[101,73106,157],{"class":111},[101,73108,62688],{"class":216},[101,73110,14908],{"class":1950},[101,73112,157],{"class":111},[101,73114,69113],{"class":216},[101,73116,61009],{"class":1950},[101,73118,157],{"class":111},[101,73120,73121],{"class":216},"\"年龄\"",[101,73123,53475],{"class":1950},[101,73125,157],{"class":111},[101,73127,69113],{"class":216},[101,73129,51296],{"class":111},[101,73131,73132,73134,73136,73138,73140,73142,73144,73146,73148,73150,73152,73155,73157,73159,73161],{"class":103,"line":32831},[101,73133,51330],{"class":111},[101,73135,53810],{"class":51289},[101,73137,53813],{"class":1950},[101,73139,157],{"class":111},[101,73141,62688],{"class":216},[101,73143,14908],{"class":1950},[101,73145,157],{"class":111},[101,73147,69215],{"class":216},[101,73149,61009],{"class":1950},[101,73151,157],{"class":111},[101,73153,73154],{"class":216},"\"薪资\"",[101,73156,53475],{"class":1950},[101,73158,157],{"class":111},[101,73160,69215],{"class":216},[101,73162,51296],{"class":111},[101,73164,73165,73167,73169,73171,73173,73175,73177,73179,73181,73183,73185,73187],{"class":103,"line":32840},[101,73166,51330],{"class":111},[101,73168,69133],{"class":51289},[101,73170,14908],{"class":1950},[101,73172,157],{"class":111},[101,73174,69140],{"class":216},[101,73176,14947],{"class":1950},[101,73178,157],{"class":111},[101,73180,7640],{"class":216},[101,73182,53475],{"class":1950},[101,73184,157],{"class":111},[101,73186,69140],{"class":216},[101,73188,51296],{"class":111},[101,73190,73191,73193,73195,73197,73199,73201,73203,73205],{"class":103,"line":32846},[101,73192,55223],{"class":111},[101,73194,69155],{"class":51289},[101,73196,66640],{"class":1950},[101,73198,157],{"class":111},[101,73200,9949],{"class":216},[101,73202,69164],{"class":111},[101,73204,69155],{"class":51289},[101,73206,51296],{"class":111},[101,73208,73209,73211,73213,73215,73217,73219,73221,73223],{"class":103,"line":32855},[101,73210,55223],{"class":111},[101,73212,69155],{"class":51289},[101,73214,66640],{"class":1950},[101,73216,157],{"class":111},[101,73218,10018],{"class":216},[101,73220,69183],{"class":111},[101,73222,69155],{"class":51289},[101,73224,51296],{"class":111},[101,73226,73227,73229,73231],{"class":103,"line":32861},[101,73228,51765],{"class":111},[101,73230,69133],{"class":51289},[101,73232,51296],{"class":111},[101,73234,73235,73237,73239,73241,73243,73245,73247,73249,73251,73253,73255,73257],{"class":103,"line":32867},[101,73236,51330],{"class":111},[101,73238,69133],{"class":51289},[101,73240,14908],{"class":1950},[101,73242,157],{"class":111},[101,73244,69237],{"class":216},[101,73246,14947],{"class":1950},[101,73248,157],{"class":111},[101,73250,7640],{"class":216},[101,73252,53475],{"class":1950},[101,73254,157],{"class":111},[101,73256,69237],{"class":216},[101,73258,51296],{"class":111},[101,73260,73261,73263,73265,73267,73269,73271,73273,73275],{"class":103,"line":32876},[101,73262,55223],{"class":111},[101,73264,69155],{"class":51289},[101,73266,66640],{"class":1950},[101,73268,157],{"class":111},[101,73270,69258],{"class":216},[101,73272,69261],{"class":111},[101,73274,69155],{"class":51289},[101,73276,51296],{"class":111},[101,73278,73279,73281,73283,73285,73287,73289,73291,73293],{"class":103,"line":32882},[101,73280,55223],{"class":111},[101,73282,69155],{"class":51289},[101,73284,66640],{"class":1950},[101,73286,157],{"class":111},[101,73288,69278],{"class":216},[101,73290,69281],{"class":111},[101,73292,69155],{"class":51289},[101,73294,51296],{"class":111},[101,73296,73297,73299,73301,73303,73305,73307,73309,73311],{"class":103,"line":32893},[101,73298,55223],{"class":111},[101,73300,69155],{"class":51289},[101,73302,66640],{"class":1950},[101,73304,157],{"class":111},[101,73306,69298],{"class":216},[101,73308,69301],{"class":111},[101,73310,69155],{"class":51289},[101,73312,51296],{"class":111},[101,73314,73315,73317,73319,73321,73323,73325,73327,73329],{"class":103,"line":32899},[101,73316,55223],{"class":111},[101,73318,69155],{"class":51289},[101,73320,66640],{"class":1950},[101,73322,157],{"class":111},[101,73324,69318],{"class":216},[101,73326,69321],{"class":111},[101,73328,69155],{"class":51289},[101,73330,51296],{"class":111},[101,73332,73333,73335,73337,73339,73341,73343,73345,73347],{"class":103,"line":32918},[101,73334,55223],{"class":111},[101,73336,69155],{"class":51289},[101,73338,66640],{"class":1950},[101,73340,157],{"class":111},[101,73342,69338],{"class":216},[101,73344,69341],{"class":111},[101,73346,69155],{"class":51289},[101,73348,51296],{"class":111},[101,73350,73351,73353,73355],{"class":103,"line":32924},[101,73352,51765],{"class":111},[101,73354,69133],{"class":51289},[101,73356,51296],{"class":111},[101,73358,73359,73361,73363],{"class":103,"line":32935},[101,73360,51330],{"class":111},[101,73362,53876],{"class":51289},[101,73364,51296],{"class":111},[101,73366,73367,73369,73371,73374,73376,73379,73381],{"class":103,"line":32941},[101,73368,55223],{"class":111},[101,73370,101],{"class":51289},[101,73372,73373],{"class":111},">+\u003C\u002F",[101,73375,101],{"class":51289},[101,73377,73378],{"class":111},">添加\u003C\u002F",[101,73380,53876],{"class":51289},[101,73382,51296],{"class":111},[101,73384,73385,73387,73389],{"class":103,"line":32961},[101,73386,52406],{"class":111},[101,73388,66614],{"class":51289},[101,73390,51296],{"class":111},[101,73392,73393,73395,73397,73399,73401,73403,73406,73408,73411,73413,73416,73418],{"class":103,"line":32977},[101,73394,52133],{"class":111},[101,73396,51600],{"class":51289},[101,73398,53475],{"class":1950},[101,73400,157],{"class":111},[101,73402,62569],{"class":216},[101,73404,73405],{"class":111},">共有数据 \u003C",[101,73407,101],{"class":51289},[101,73409,73410],{"class":111},">0\u003C\u002F",[101,73412,101],{"class":51289},[101,73414,73415],{"class":111},"> 条\u003C\u002F",[101,73417,51600],{"class":51289},[101,73419,51296],{"class":111},[101,73421,73422,73424,73426],{"class":103,"line":32983},[101,73423,52133],{"class":111},[101,73425,249],{"class":51289},[101,73427,51296],{"class":111},[101,73429,73430,73432,73434],{"class":103,"line":32997},[101,73431,51330],{"class":111},[101,73433,252],{"class":51289},[101,73435,51296],{"class":111},[101,73437,73438,73440,73442],{"class":103,"line":33003},[101,73439,55223],{"class":111},[101,73441,255],{"class":51289},[101,73443,51296],{"class":111},[101,73445,73446,73448,73450,73453,73455],{"class":103,"line":33009},[101,73447,55291],{"class":111},[101,73449,258],{"class":51289},[101,73451,73452],{"class":111},">ID\u003C\u002F",[101,73454,258],{"class":51289},[101,73456,51296],{"class":111},[101,73458,73459,73461,73463,73465,73467],{"class":103,"line":33020},[101,73460,55291],{"class":111},[101,73462,258],{"class":51289},[101,73464,69444],{"class":111},[101,73466,258],{"class":51289},[101,73468,51296],{"class":111},[101,73470,73471,73473,73475,73477,73479],{"class":103,"line":33026},[101,73472,55291],{"class":111},[101,73474,258],{"class":51289},[101,73476,69457],{"class":111},[101,73478,258],{"class":51289},[101,73480,51296],{"class":111},[101,73482,73483,73485,73487,73489,73491],{"class":103,"line":33032},[101,73484,55291],{"class":111},[101,73486,258],{"class":51289},[101,73488,69470],{"class":111},[101,73490,258],{"class":51289},[101,73492,51296],{"class":111},[101,73494,73495,73497,73499,73501,73503],{"class":103,"line":33042},[101,73496,55291],{"class":111},[101,73498,258],{"class":51289},[101,73500,69483],{"class":111},[101,73502,258],{"class":51289},[101,73504,51296],{"class":111},[101,73506,73507,73509,73511,73513,73515],{"class":103,"line":33048},[101,73508,55291],{"class":111},[101,73510,258],{"class":51289},[101,73512,69496],{"class":111},[101,73514,258],{"class":51289},[101,73516,51296],{"class":111},[101,73518,73519,73521,73523,73526,73528],{"class":103,"line":33059},[101,73520,55291],{"class":111},[101,73522,258],{"class":51289},[101,73524,73525],{"class":111},">录入时间\u003C\u002F",[101,73527,258],{"class":51289},[101,73529,51296],{"class":111},[101,73531,73532,73534,73536,73538,73540],{"class":103,"line":33065},[101,73533,55291],{"class":111},[101,73535,258],{"class":51289},[101,73537,69509],{"class":111},[101,73539,258],{"class":51289},[101,73541,51296],{"class":111},[101,73543,73544,73546,73548],{"class":103,"line":33075},[101,73545,55396],{"class":111},[101,73547,255],{"class":51289},[101,73549,51296],{"class":111},[101,73551,73552,73554,73556],{"class":103,"line":33080},[101,73553,51765],{"class":111},[101,73555,252],{"class":51289},[101,73557,51296],{"class":111},[101,73559,73560,73562,73564],{"class":103,"line":33086},[101,73561,51330],{"class":111},[101,73563,296],{"class":51289},[101,73565,51296],{"class":111},[101,73567,73568],{"class":103,"line":33135},[101,73569,73570],{"class":170},"      \u003C!-- \u003Ctr>\n",[101,73572,73573],{"class":103,"line":33182},[101,73574,73575],{"class":170},"        \u003Ctd>1\u003C\u002Ftd>\n",[101,73577,73578],{"class":103,"line":33187},[101,73579,73575],{"class":170},[101,73581,73582],{"class":103,"line":33193},[101,73583,73575],{"class":170},[101,73585,73586],{"class":103,"line":33212},[101,73587,73575],{"class":170},[101,73589,73590],{"class":103,"line":33218},[101,73591,73575],{"class":170},[101,73593,73594],{"class":103,"line":33238},[101,73595,73575],{"class":170},[101,73597,73598],{"class":103,"line":33244},[101,73599,73575],{"class":170},[101,73601,73602],{"class":103,"line":33250},[101,73603,73604],{"class":170},"        \u003Ctd>\n",[101,73606,73607],{"class":103,"line":33260},[101,73608,73609],{"class":170},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[101,73611,73612],{"class":103,"line":33265},[101,73613,73614],{"class":170},"        \u003C\u002Ftd>\n",[101,73616,73617],{"class":103,"line":33271},[101,73618,73619],{"class":170},"      \u003C\u002Ftr> -->\n",[101,73621,73622,73624,73626],{"class":103,"line":33287},[101,73623,51765],{"class":111},[101,73625,296],{"class":51289},[101,73627,51296],{"class":111},[101,73629,73630,73632,73634],{"class":103,"line":33332},[101,73631,52406],{"class":111},[101,73633,249],{"class":51289},[101,73635,51296],{"class":111},[101,73637,73638,73640,73642],{"class":103,"line":33338},[101,73639,52133],{"class":111},[101,73641,51802],{"class":51289},[101,73643,51296],{"class":111},[101,73645,73646],{"class":103,"line":33344},[101,73647,73648],{"class":170},"    \u002F\u002F const initData = [{\n",[101,73650,73651],{"class":103,"line":33350},[101,73652,73653],{"class":170},"    \u002F\u002F   unameId: 1,\n",[101,73655,73656],{"class":103,"line":33361},[101,73657,73658],{"class":170},"    \u002F\u002F   uname: '华晨宇',\n",[101,73660,73661],{"class":103,"line":33367},[101,73662,73663],{"class":170},"    \u002F\u002F   age: 22,\n",[101,73665,73666],{"class":103,"line":33373},[101,73667,73668],{"class":170},"    \u002F\u002F   salary: 12000,\n",[101,73670,73671],{"class":103,"line":33379},[101,73672,73673],{"class":170},"    \u002F\u002F   gender: '男',\n",[101,73675,73676],{"class":103,"line":33397},[101,73677,73678],{"class":170},"    \u002F\u002F   city: '北京',\n",[101,73680,73681],{"class":103,"line":33411},[101,73682,73683],{"class":170},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[101,73685,73686],{"class":103,"line":33420},[101,73687,73688],{"class":170},"    \u002F\u002F }]\n",[101,73690,73691],{"class":103,"line":33429},[101,73692,73693],{"class":170},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[101,73695,73696],{"class":103,"line":33438},[101,73697,73698],{"class":170},"    \u002F\u002F 1.渲染业务\n",[101,73700,73701],{"class":103,"line":33447},[101,73702,73703],{"class":170},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[101,73705,73706],{"class":103,"line":33453},[101,73707,73708],{"class":170},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[101,73710,73711],{"class":103,"line":33459},[101,73712,73713],{"class":170},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[101,73715,73716],{"class":103,"line":33467},[101,73717,2387],{"emptyLinePlaceholder":27},[101,73719,73720],{"class":103,"line":33472},[101,73721,73722],{"class":170},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[101,73724,73725],{"class":103,"line":33478},[101,73726,73727],{"class":170},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[101,73729,73730,73732,73734,73736],{"class":103,"line":33489},[101,73731,11209],{"class":107},[101,73733,57684],{"class":160},[101,73735,13552],{"class":107},[101,73737,51827],{"class":111},[101,73739,73740,73743,73745],{"class":103,"line":33495},[101,73741,73742],{"class":111},"    console.",[101,73744,58236],{"class":1950},[101,73746,52401],{"class":111},[101,73748,73749],{"class":103,"line":33515},[101,73750,2387],{"emptyLinePlaceholder":27},[101,73752,73753],{"class":103,"line":33521},[101,73754,73755],{"class":170},"    \u002F\u002F 时间函数\n",[101,73757,73758,73760,73763],{"class":103,"line":33527},[101,73759,70073],{"class":107},[101,73761,73762],{"class":1950}," getTime",[101,73764,10841],{"class":111},[101,73766,73767,73769,73772,73774,73776,73779],{"class":103,"line":33533},[101,73768,58217],{"class":107},[101,73770,73771],{"class":160}," date",[101,73773,13552],{"class":107},[101,73775,11566],{"class":107},[101,73777,73778],{"class":1950}," Date",[101,73780,1963],{"class":111},[101,73782,73783,73785,73787,73789,73792,73795,73797,73799,73801,73804,73807,73809,73811,73813,73815,73817,73819,73821],{"class":103,"line":33550},[101,73784,58217],{"class":107},[101,73786,16079],{"class":160},[101,73788,13552],{"class":107},[101,73790,73791],{"class":111}," date.",[101,73793,73794],{"class":1950},"getHours",[101,73796,13038],{"class":111},[101,73798,1021],{"class":107},[101,73800,2025],{"class":160},[101,73802,73803],{"class":107}," ?",[101,73805,73806],{"class":216}," '0'",[101,73808,45555],{"class":107},[101,73810,73791],{"class":111},[101,73812,73794],{"class":1950},[101,73814,13038],{"class":111},[101,73816,970],{"class":107},[101,73818,73791],{"class":111},[101,73820,73794],{"class":1950},[101,73822,1963],{"class":111},[101,73824,73825,73827,73830,73832,73834,73837,73839,73841,73843,73845,73847,73849,73851,73853,73855,73857,73859,73861],{"class":103,"line":33556},[101,73826,58217],{"class":107},[101,73828,73829],{"class":160}," m",[101,73831,13552],{"class":107},[101,73833,73791],{"class":111},[101,73835,73836],{"class":1950},"getMinutes",[101,73838,13038],{"class":111},[101,73840,1021],{"class":107},[101,73842,2025],{"class":160},[101,73844,73803],{"class":107},[101,73846,73806],{"class":216},[101,73848,45555],{"class":107},[101,73850,73791],{"class":111},[101,73852,73836],{"class":1950},[101,73854,13038],{"class":111},[101,73856,970],{"class":107},[101,73858,73791],{"class":111},[101,73860,73836],{"class":1950},[101,73862,1963],{"class":111},[101,73864,73865,73867,73869,73871,73873,73876,73878,73880,73882,73884,73886,73888,73890,73892,73894,73896,73898,73900],{"class":103,"line":33562},[101,73866,58217],{"class":107},[101,73868,8416],{"class":160},[101,73870,13552],{"class":107},[101,73872,73791],{"class":111},[101,73874,73875],{"class":1950},"getSeconds",[101,73877,13038],{"class":111},[101,73879,1021],{"class":107},[101,73881,2025],{"class":160},[101,73883,73803],{"class":107},[101,73885,73806],{"class":216},[101,73887,45555],{"class":107},[101,73889,73791],{"class":111},[101,73891,73875],{"class":1950},[101,73893,13038],{"class":111},[101,73895,970],{"class":107},[101,73897,73791],{"class":111},[101,73899,73875],{"class":1950},[101,73901,1963],{"class":111},[101,73903,73904,73906,73909,73911,73913,73916,73918,73921,73923,73926,73928,73930,73933,73935,73937,73939,73941,73943,73945,73948,73950,73953,73955,73958,73960,73962,73964],{"class":103,"line":33568},[101,73905,58217],{"class":107},[101,73907,73908],{"class":160}," str",[101,73910,13552],{"class":107},[101,73912,62892],{"class":216},[101,73914,73915],{"class":111},"date",[101,73917,669],{"class":216},[101,73919,73920],{"class":1950},"getFullYear",[101,73922,2414],{"class":216},[101,73924,73925],{"class":216},"}\u002F${",[101,73927,73915],{"class":111},[101,73929,669],{"class":216},[101,73931,73932],{"class":1950},"getMonth",[101,73934,13038],{"class":216},[101,73936,592],{"class":107},[101,73938,25107],{"class":160},[101,73940,73925],{"class":216},[101,73942,73915],{"class":111},[101,73944,669],{"class":216},[101,73946,73947],{"class":1950},"getDate",[101,73949,2414],{"class":216},[101,73951,73952],{"class":216},"} ${",[101,73954,526],{"class":111},[101,73956,73957],{"class":216},"}:${",[101,73959,655],{"class":111},[101,73961,73957],{"class":216},[101,73963,806],{"class":111},[101,73965,73966],{"class":216},"}`\n",[101,73968,73969,73972],{"class":103,"line":33574},[101,73970,73971],{"class":107},"      return",[101,73973,73974],{"class":111}," str\n",[101,73976,73977],{"class":103,"line":33580},[101,73978,2174],{"class":111},[101,73980,73981],{"class":103,"line":33607},[101,73982,73983],{"class":170},"    \u002F\u002F 渲染函数\n",[101,73985,73986,73988,73990,73992,73994,73996,73998,74000],{"class":103,"line":33631},[101,73987,11209],{"class":107},[101,73989,69736],{"class":160},[101,73991,13552],{"class":107},[101,73993,54385],{"class":111},[101,73995,54388],{"class":1950},[101,73997,112],{"class":111},[101,73999,69747],{"class":216},[101,74001,118],{"class":111},[101,74003,74004,74006,74008],{"class":103,"line":33637},[101,74005,70073],{"class":107},[101,74007,70076],{"class":1950},[101,74009,10841],{"class":111},[101,74011,74012],{"class":103,"line":33643},[101,74013,74014],{"class":170},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[101,74016,74017],{"class":103,"line":33649},[101,74018,74019],{"class":170},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[101,74021,74022,74024,74027,74029,74031,74034,74036,74038,74040,74043,74045,74048],{"class":103,"line":33660},[101,74023,58217],{"class":107},[101,74025,74026],{"class":160}," trArr",[101,74028,13552],{"class":107},[101,74030,51954],{"class":111},[101,74032,74033],{"class":1950},"map",[101,74035,112],{"class":111},[101,74037,54438],{"class":107},[101,74039,1645],{"class":111},[101,74041,74042],{"class":5204},"ele",[101,74044,12423],{"class":111},[101,74046,74047],{"class":5204},"index",[101,74049,12430],{"class":111},[101,74051,74052,74054],{"class":103,"line":33671},[101,74053,14740],{"class":107},[101,74055,70157],{"class":216},[101,74057,74058],{"class":103,"line":33677},[101,74059,74060],{"class":216},"      \u003Ctr>\n",[101,74062,74063,74065,74067,74069,74072],{"class":103,"line":33694},[101,74064,70162],{"class":216},[101,74066,74042],{"class":111},[101,74068,669],{"class":216},[101,74070,74071],{"class":111},"unameId",[101,74073,70177],{"class":216},[101,74075,74076,74078,74080,74082,74084],{"class":103,"line":33717},[101,74077,70162],{"class":216},[101,74079,74042],{"class":111},[101,74081,669],{"class":216},[101,74083,70193],{"class":111},[101,74085,70177],{"class":216},[101,74087,74088,74090,74092,74094,74096],{"class":103,"line":33740},[101,74089,70162],{"class":216},[101,74091,74042],{"class":111},[101,74093,669],{"class":216},[101,74095,70210],{"class":111},[101,74097,70177],{"class":216},[101,74099,74100,74102,74104,74106,74108],{"class":103,"line":33746},[101,74101,70162],{"class":216},[101,74103,74042],{"class":111},[101,74105,669],{"class":216},[101,74107,70227],{"class":111},[101,74109,70177],{"class":216},[101,74111,74112,74114,74116,74118,74120],{"class":103,"line":33751},[101,74113,70162],{"class":216},[101,74115,74042],{"class":111},[101,74117,669],{"class":216},[101,74119,70244],{"class":111},[101,74121,70177],{"class":216},[101,74123,74124,74126,74128,74130,74132],{"class":103,"line":33760},[101,74125,70162],{"class":216},[101,74127,74042],{"class":111},[101,74129,669],{"class":216},[101,74131,70261],{"class":111},[101,74133,70177],{"class":216},[101,74135,74136,74138,74140,74142,74144],{"class":103,"line":33770},[101,74137,70162],{"class":216},[101,74139,74042],{"class":111},[101,74141,669],{"class":216},[101,74143,2374],{"class":111},[101,74145,70177],{"class":216},[101,74147,74148],{"class":103,"line":33776},[101,74149,73604],{"class":216},[101,74151,74152,74155,74157],{"class":103,"line":33781},[101,74153,74154],{"class":216},"          \u003Ca href=\"#\" data-id=\"${",[101,74156,74047],{"class":111},[101,74158,74159],{"class":216},"}\">删除\u003C\u002Fa>\n",[101,74161,74162],{"class":103,"line":33787},[101,74163,73614],{"class":216},[101,74165,74166],{"class":103,"line":33800},[101,74167,74168],{"class":216},"      \u003C\u002Ftr>\n",[101,74170,74171],{"class":103,"line":33806},[101,74172,74173],{"class":216},"  `\n",[101,74175,74176],{"class":103,"line":33817},[101,74177,64804],{"class":111},[101,74179,74180,74182,74184],{"class":103,"line":33828},[101,74181,58233],{"class":111},[101,74183,58236],{"class":1950},[101,74185,74186],{"class":111},"(trArr)\n",[101,74188,74189],{"class":103,"line":33847},[101,74190,2387],{"emptyLinePlaceholder":27},[101,74192,74193],{"class":103,"line":49507},[101,74194,74195],{"class":170},"      \u002F\u002F (2) 把数组转换为字符串join\n",[101,74197,74198],{"class":103,"line":49512},[101,74199,74200],{"class":170},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[101,74202,74203,74205,74207,74210,74213,74215,74218],{"class":103,"line":49521},[101,74204,70088],{"class":111},[101,74206,157],{"class":107},[101,74208,74209],{"class":111}," trArr.",[101,74211,74212],{"class":1950},"join",[101,74214,112],{"class":111},[101,74216,74217],{"class":216},"''",[101,74219,118],{"class":111},[101,74221,74222],{"class":103,"line":49530},[101,74223,74224],{"class":170},"      \u002F\u002F 显示共有几条\n",[101,74226,74227,74229,74231,74233,74236,74239,74241,74243],{"class":103,"line":49535},[101,74228,55760],{"class":111},[101,74230,54388],{"class":1950},[101,74232,112],{"class":111},[101,74234,74235],{"class":216},"'.total span'",[101,74237,74238],{"class":111},").innerHTML ",[101,74240,157],{"class":107},[101,74242,51954],{"class":111},[101,74244,55820],{"class":160},[101,74246,74247],{"class":103,"line":49540},[101,74248,2174],{"class":111},[101,74250,74251],{"class":103,"line":49545},[101,74252,74253],{"class":170},"    \u002F\u002F render()\n",[101,74255,74256],{"class":103,"line":49558},[101,74257,2387],{"emptyLinePlaceholder":27},[101,74259,74260],{"class":103,"line":49563},[101,74261,74262],{"class":170},"    \u002F\u002F 获取DOM对象\n",[101,74264,74265,74267,74269,74271,74273,74275,74277,74279],{"class":103,"line":49572},[101,74266,11209],{"class":107},[101,74268,69810],{"class":160},[101,74270,13552],{"class":107},[101,74272,54385],{"class":111},[101,74274,54388],{"class":1950},[101,74276,112],{"class":111},[101,74278,69821],{"class":216},[101,74280,118],{"class":111},[101,74282,74283,74285,74287,74289,74291,74293,74295,74297],{"class":103,"line":49581},[101,74284,11209],{"class":107},[101,74286,69637],{"class":160},[101,74288,13552],{"class":107},[101,74290,54385],{"class":111},[101,74292,54388],{"class":1950},[101,74294,112],{"class":111},[101,74296,69648],{"class":216},[101,74298,118],{"class":111},[101,74300,74301,74303,74305,74307,74309,74311,74313,74315],{"class":103,"line":49598},[101,74302,11209],{"class":107},[101,74304,15677],{"class":160},[101,74306,13552],{"class":107},[101,74308,54385],{"class":111},[101,74310,54388],{"class":1950},[101,74312,112],{"class":111},[101,74314,69667],{"class":216},[101,74316,118],{"class":111},[101,74318,74320,74322,74324,74326,74328,74330,74332,74334],{"class":103,"line":74319},231,[101,74321,11209],{"class":107},[101,74323,69696],{"class":160},[101,74325,13552],{"class":107},[101,74327,54385],{"class":111},[101,74329,54388],{"class":1950},[101,74331,112],{"class":111},[101,74333,69707],{"class":216},[101,74335,118],{"class":111},[101,74337,74339,74341,74343,74345,74347,74349,74351,74353],{"class":103,"line":74338},232,[101,74340,11209],{"class":107},[101,74342,69676],{"class":160},[101,74344,13552],{"class":107},[101,74346,54385],{"class":111},[101,74348,54388],{"class":1950},[101,74350,112],{"class":111},[101,74352,69687],{"class":216},[101,74354,118],{"class":111},[101,74356,74358,74360,74362,74364,74366,74368,74370,74372],{"class":103,"line":74357},233,[101,74359,11209],{"class":107},[101,74361,69716],{"class":160},[101,74363,13552],{"class":107},[101,74365,54385],{"class":111},[101,74367,54388],{"class":1950},[101,74369,112],{"class":111},[101,74371,69727],{"class":216},[101,74373,118],{"class":111},[101,74375,74377],{"class":103,"line":74376},234,[101,74378,2387],{"emptyLinePlaceholder":27},[101,74380,74382],{"class":103,"line":74381},235,[101,74383,74384],{"class":170},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[101,74386,74388,74390,74392,74394,74396,74398,74400,74402,74404],{"class":103,"line":74387},236,[101,74389,69828],{"class":111},[101,74391,57802],{"class":1950},[101,74393,112],{"class":111},[101,74395,69835],{"class":216},[101,74397,12423],{"class":111},[101,74399,54438],{"class":107},[101,74401,1645],{"class":111},[101,74403,186],{"class":5204},[101,74405,12430],{"class":111},[101,74407,74409],{"class":103,"line":74408},237,[101,74410,74411],{"class":170},"      \u002F\u002F 禁止浏览器跳转\n",[101,74413,74415,74417,74419],{"class":103,"line":74414},238,[101,74416,69855],{"class":111},[101,74418,69858],{"class":1950},[101,74420,1963],{"class":111},[101,74422,74424],{"class":103,"line":74423},239,[101,74425,74426],{"class":170},"      \u002F\u002F 非空判断\n",[101,74428,74430],{"class":103,"line":74429},240,[101,74431,74432],{"class":170},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[101,74434,74436],{"class":103,"line":74435},241,[101,74437,74438],{"class":170},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[101,74440,74442,74444,74446,74448,74451,74453,74456,74459,74461,74463],{"class":103,"line":74441},242,[101,74443,54469],{"class":107},[101,74445,1645],{"class":111},[101,74447,338],{"class":107},[101,74449,74450],{"class":111},"uname.value ",[101,74452,71346],{"class":107},[101,74454,74455],{"class":107}," !",[101,74457,74458],{"class":111},"age.value ",[101,74460,71346],{"class":107},[101,74462,74455],{"class":107},[101,74464,74465],{"class":111},"salary.value) {\n",[101,74467,74469,74471,74473,74475,74477],{"class":103,"line":74468},243,[101,74470,14740],{"class":107},[101,74472,69929],{"class":1950},[101,74474,112],{"class":111},[101,74476,69934],{"class":216},[101,74478,118],{"class":111},[101,74480,74482],{"class":103,"line":74481},244,[101,74483,52387],{"class":111},[101,74485,74487,74489,74491],{"class":103,"line":74486},245,[101,74488,57996],{"class":111},[101,74490,51873],{"class":1950},[101,74492,74493],{"class":111},"({\n",[101,74495,74497],{"class":103,"line":74496},246,[101,74498,74499],{"class":170},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[101,74501,74503],{"class":103,"line":74502},247,[101,74504,74505],{"class":170},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[101,74507,74509],{"class":103,"line":74508},248,[101,74510,74511],{"class":170},"        \u002F\u002F 对象的序号应为数组长度+1\n",[101,74513,74515],{"class":103,"line":74514},249,[101,74516,74517],{"class":170},"        \u002F\u002F unameId: arr.length + 1,\n",[101,74519,74521],{"class":103,"line":74520},250,[101,74522,2387],{"emptyLinePlaceholder":27},[101,74524,74526],{"class":103,"line":74525},251,[101,74527,74528],{"class":170},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[101,74530,74532],{"class":103,"line":74531},252,[101,74533,74534],{"class":170},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[101,74536,74538],{"class":103,"line":74537},253,[101,74539,74540],{"class":170},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[101,74542,74544],{"class":103,"line":74543},254,[101,74545,74546],{"class":170},"        \u002F\u002F 0当假看\n",[101,74548,74550,74553,74555,74557,74560,74562,74564,74566,74569,74571,74573,74576,74578],{"class":103,"line":74549},255,[101,74551,74552],{"class":111},"        unameId: arr.",[101,74554,51957],{"class":160},[101,74556,73803],{"class":107},[101,74558,74559],{"class":111}," arr[arr.",[101,74561,51957],{"class":160},[101,74563,52260],{"class":107},[101,74565,25107],{"class":160},[101,74567,74568],{"class":111},"].unameId ",[101,74570,592],{"class":107},[101,74572,25107],{"class":160},[101,74574,74575],{"class":107}," :",[101,74577,25107],{"class":160},[101,74579,31455],{"class":111},[101,74581,74583],{"class":103,"line":74582},256,[101,74584,69982],{"class":111},[101,74586,74588],{"class":103,"line":74587},257,[101,74589,69987],{"class":111},[101,74591,74593],{"class":103,"line":74592},258,[101,74594,69997],{"class":111},[101,74596,74598],{"class":103,"line":74597},259,[101,74599,69992],{"class":111},[101,74601,74603],{"class":103,"line":74602},260,[101,74604,74605],{"class":111},"        city: city.value,\n",[101,74607,74609],{"class":103,"line":74608},261,[101,74610,74611],{"class":170},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[101,74613,74615],{"class":103,"line":74614},262,[101,74616,74617],{"class":170},"        \u002F\u002F time: new Date().toDateString()\n",[101,74619,74621,74624,74627],{"class":103,"line":74620},263,[101,74622,74623],{"class":111},"        time: ",[101,74625,74626],{"class":1950},"getTime",[101,74628,1963],{"class":111},[101,74630,74632],{"class":103,"line":74631},264,[101,74633,64804],{"class":111},[101,74635,74637],{"class":103,"line":74636},265,[101,74638,74639],{"class":170},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[101,74641,74643,74645],{"class":103,"line":74642},266,[101,74644,70057],{"class":1950},[101,74646,1963],{"class":111},[101,74648,74650,74652,74654,74656,74658],{"class":103,"line":74649},267,[101,74651,70040],{"class":160},[101,74653,669],{"class":111},[101,74655,70045],{"class":1950},[101,74657,13038],{"class":111},[101,74659,74660],{"class":170},"\u002F\u002F重置表单\n",[101,74662,74664],{"class":103,"line":74663},268,[101,74665,74666],{"class":170},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[101,74668,74670,74673,74675,74677,74680,74682,74684,74686,74688],{"class":103,"line":74669},269,[101,74671,74672],{"class":111},"      localStorage.",[101,74674,71643],{"class":1950},[101,74676,112],{"class":111},[101,74678,74679],{"class":216},"'data'",[101,74681,12423],{"class":111},[101,74683,71653],{"class":160},[101,74685,669],{"class":111},[101,74687,71658],{"class":1950},[101,74689,74690],{"class":111},"(arr))\n",[101,74692,74694],{"class":103,"line":74693},270,[101,74695,33450],{"class":111},[101,74697,74699],{"class":103,"line":74698},271,[101,74700,2387],{"emptyLinePlaceholder":27},[101,74702,74704],{"class":103,"line":74703},272,[101,74705,74706],{"class":170},"    \u002F\u002F 3.删除业务\n",[101,74708,74710],{"class":103,"line":74709},273,[101,74711,74712],{"class":170},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[101,74714,74716,74718,74720,74722,74724,74726,74728,74730,74732],{"class":103,"line":74715},274,[101,74717,70330],{"class":111},[101,74719,57802],{"class":1950},[101,74721,112],{"class":111},[101,74723,57807],{"class":216},[101,74725,12423],{"class":111},[101,74727,54438],{"class":107},[101,74729,1645],{"class":111},[101,74731,186],{"class":5204},[101,74733,12430],{"class":111},[101,74735,74737],{"class":103,"line":74736},275,[101,74738,74739],{"class":170},"      \u002F\u002F 判断是否点击的是删除按钮\n",[101,74741,74743,74745,74747,74749,74751],{"class":103,"line":74742},276,[101,74744,54469],{"class":107},[101,74746,67023],{"class":111},[101,74748,54475],{"class":107},[101,74750,68245],{"class":216},[101,74752,12430],{"class":111},[101,74754,74756],{"class":103,"line":74755},277,[101,74757,74758],{"class":170},"        \u002F\u002F alert(1)\n",[101,74760,74762],{"class":103,"line":74761},278,[101,74763,74764],{"class":170},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[101,74766,74768],{"class":103,"line":74767},279,[101,74769,74770],{"class":170},"        \u002F\u002F console.log(e.target)\n",[101,74772,74774],{"class":103,"line":74773},280,[101,74775,74776],{"class":170},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[101,74778,74780],{"class":103,"line":74779},281,[101,74781,2387],{"emptyLinePlaceholder":27},[101,74783,74785],{"class":103,"line":74784},282,[101,74786,74787],{"class":170},"        \u002F\u002F 确认框，确然是否真的要删除\n",[101,74789,74791],{"class":103,"line":74790},283,[101,74792,74793],{"class":170},"        \u002F\u002F confirm()为确认框\n",[101,74795,74797],{"class":103,"line":74796},284,[101,74798,74799],{"class":170},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[101,74801,74803,74805,74807,74810,74812,74815],{"class":103,"line":74802},285,[101,74804,2484],{"class":107},[101,74806,1645],{"class":111},[101,74808,74809],{"class":1950},"confirm",[101,74811,112],{"class":111},[101,74813,74814],{"class":216},"'您确定要删除这条数据吗？'",[101,74816,74817],{"class":111},")) {\n",[101,74819,74821,74824,74826,74828,74830],{"class":103,"line":74820},286,[101,74822,74823],{"class":111},"          arr.",[101,74825,57999],{"class":1950},[101,74827,70383],{"class":111},[101,74829,329],{"class":160},[101,74831,118],{"class":111},[101,74833,74835],{"class":103,"line":74834},287,[101,74836,74837],{"class":170},"          \u002F\u002F 3.4 重新渲染页面\n",[101,74839,74841,74844],{"class":103,"line":74840},288,[101,74842,74843],{"class":1950},"          render",[101,74845,1963],{"class":111},[101,74847,74849],{"class":103,"line":74848},289,[101,74850,74851],{"class":170},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[101,74853,74855,74858,74860,74862,74864,74866,74868,74870,74872],{"class":103,"line":74854},290,[101,74856,74857],{"class":111},"          localStorage.",[101,74859,71643],{"class":1950},[101,74861,112],{"class":111},[101,74863,74679],{"class":216},[101,74865,12423],{"class":111},[101,74867,71653],{"class":160},[101,74869,669],{"class":111},[101,74871,71658],{"class":1950},[101,74873,74690],{"class":111},[101,74875,74877],{"class":103,"line":74876},291,[101,74878,2516],{"class":111},[101,74880,74882],{"class":103,"line":74881},292,[101,74883,52387],{"class":111},[101,74885,74887],{"class":103,"line":74886},293,[101,74888,2387],{"emptyLinePlaceholder":27},[101,74890,74892],{"class":103,"line":74891},294,[101,74893,33450],{"class":111},[101,74895,74897],{"class":103,"line":74896},295,[101,74898,2387],{"emptyLinePlaceholder":27},[101,74900,74902,74904,74906],{"class":103,"line":74901},296,[101,74903,52406],{"class":111},[101,74905,51802],{"class":51289},[101,74907,51296],{"class":111},[101,74909,74911,74913,74915],{"class":103,"line":74910},297,[101,74912,51774],{"class":111},[101,74914,51789],{"class":51289},[101,74916,51296],{"class":111},[101,74918,74920],{"class":103,"line":74919},298,[101,74921,2387],{"emptyLinePlaceholder":27},[101,74923,74925,74927,74929],{"class":103,"line":74924},299,[101,74926,51774],{"class":111},[101,74928,50624],{"class":51289},[101,74930,51296],{"class":111},[43,74932,74934],{"id":74933},"_36-正则表达式","3.6 正则表达式",[10,74936,74937],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[10,74939,74940],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[10,74942,74943],{},"正则表达式的作用：",[1118,74945,74946,74953,74959],{},[58,74947,74948,74949,74952],{},"表单验证（ ",[261,74950,74951],{},"匹配"," ）",[58,74954,74955,74956,74952],{},"过滤敏感词（ ",[261,74957,74958],{},"替换",[58,74960,74961,74962,74952],{},"字符串中提取我们想要的部分（ ",[261,74963,74964],{},"提取",[72,74966,74968],{"id":74967},"_361-语法","3.6.1 语法",[10,74970,74971],{},"正则表达式使用步骤：",[55,74973,74974,74977],{},[58,74975,74976],{},"定义规则",[58,74978,74979],{},"查找是否匹配",[10,74981,74982],{},"正则表达式里边不需要写引号",[10,74984,74985],{},[1449,74986],{"alt":20,"src":74987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[10,74989,74990],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[10,74992,74993],{},"reg.test(str)",[10,74995,74996],{},[1449,74997],{"alt":20,"src":74998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[10,75000,75001],{},[1449,75002],{"alt":20,"src":75003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[72,75005,75007],{"id":75006},"_362-元字符","3.6.2 元字符",[55,75009,75010,75013,75016,75019,75026],{},[58,75011,75012],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[58,75014,75015],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[58,75017,75018],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[58,75020,75021,75022],{},"正则验证工具：",[14,75023,75024],{"href":75024,"rel":75025},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[18],[58,75027,75028],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21986,75030,75032],{"id":75031},"_3621-边界符","3.6.2.1 边界符",[10,75034,75035],{},[1449,75036],{"alt":20,"src":75037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[10,75039,75040],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[10,75042,75043],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[10,75045,75046],{},"只匹配一次",[10,75048,75049],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21986,75051,75053],{"id":75052},"_3622-量词","3.6.2.2 量词",[10,75055,75056],{},[1449,75057],{"alt":20,"src":75058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[10,75060,75061],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21986,75063,75065],{"id":75064},"_3623-元字符","3.6.2.3 元字符",[10,75067,75068],{},[1449,75069],{"alt":20,"src":75070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[10,75072,75073],{},"匹配的是a或b或c []只选一个",[10,75075,75076],{},[1449,75077],{"alt":20,"src":75078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[10,75080,75081],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[10,75083,75084],{},[1449,75085],{"alt":20,"src":75086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[10,75088,75089],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[10,75091,75092],{},[1449,75093],{"alt":20,"src":75094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[92,75096,75098],{"className":50622,"code":75097,"language":50624,"meta":20,"style":20},"\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",[98,75099,75100,75110,75124,75128,75136,75150,75170,75182,75190,75194,75202,75210,75215,75246,75273,75301,75305,75310,75338,75369,75374,75379,75410,75442,75474,75478,75483,75514,75544,75574,75578,75583,75614,75645,75675,75705,75709,75714,75747,75751,75756,75787,75818,75822,75827,75858,75888,75919,75923,75928,75960,75991,76022,76049,76080,76112,76145,76176,76207,76239,76270,76278,76286,76290],{"__ignoreMap":20},[101,75101,75102,75104,75106,75108],{"class":103,"line":104},[101,75103,51286],{"class":111},[101,75105,51290],{"class":51289},[101,75107,51293],{"class":1950},[101,75109,51296],{"class":111},[101,75111,75112,75114,75116,75118,75120,75122],{"class":103,"line":21},[101,75113,1021],{"class":111},[101,75115,50624],{"class":51289},[101,75117,51305],{"class":1950},[101,75119,157],{"class":111},[101,75121,51310],{"class":216},[101,75123,51296],{"class":111},[101,75125,75126],{"class":103,"line":1166},[101,75127,2387],{"emptyLinePlaceholder":27},[101,75129,75130,75132,75134],{"class":103,"line":1181},[101,75131,1021],{"class":111},[101,75133,51323],{"class":51289},[101,75135,51296],{"class":111},[101,75137,75138,75140,75142,75144,75146,75148],{"class":103,"line":1187},[101,75139,52133],{"class":111},[101,75141,51333],{"class":51289},[101,75143,51336],{"class":1950},[101,75145,157],{"class":111},[101,75147,51341],{"class":216},[101,75149,51296],{"class":111},[101,75151,75152,75154,75156,75158,75160,75162,75164,75166,75168],{"class":103,"line":1201},[101,75153,52133],{"class":111},[101,75155,51333],{"class":51289},[101,75157,14908],{"class":1950},[101,75159,157],{"class":111},[101,75161,51380],{"class":216},[101,75163,51360],{"class":1950},[101,75165,157],{"class":111},[101,75167,51387],{"class":216},[101,75169,51296],{"class":111},[101,75171,75172,75174,75176,75178,75180],{"class":103,"line":1207},[101,75173,52133],{"class":111},[101,75175,51396],{"class":51289},[101,75177,51399],{"class":111},[101,75179,51396],{"class":51289},[101,75181,51296],{"class":111},[101,75183,75184,75186,75188],{"class":103,"line":1298},[101,75185,51774],{"class":111},[101,75187,51323],{"class":51289},[101,75189,51296],{"class":111},[101,75191,75192],{"class":103,"line":1304},[101,75193,2387],{"emptyLinePlaceholder":27},[101,75195,75196,75198,75200],{"class":103,"line":1316},[101,75197,1021],{"class":111},[101,75199,51789],{"class":51289},[101,75201,51296],{"class":111},[101,75203,75204,75206,75208],{"class":103,"line":1599},[101,75205,52133],{"class":111},[101,75207,51802],{"class":51289},[101,75209,51296],{"class":111},[101,75211,75212],{"class":103,"line":1604},[101,75213,75214],{"class":170},"    \u002F\u002F 元字符中\n",[101,75216,75217,75219,75221,75223,75225,75228,75230,75232,75235,75237,75240,75243],{"class":103,"line":1610},[101,75218,73742],{"class":111},[101,75220,58236],{"class":1950},[101,75222,112],{"class":111},[101,75224,695],{"class":216},[101,75226,75227],{"class":47966},"哈",[101,75229,695],{"class":216},[101,75231,669],{"class":111},[101,75233,75234],{"class":1950},"test",[101,75236,112],{"class":111},[101,75238,75239],{"class":216},"'哈'",[101,75241,75242],{"class":111},"))  ",[101,75244,75245],{"class":170},"\u002F\u002Ftrue\n",[101,75247,75248,75250,75252,75254,75256,75258,75260,75262,75264,75266,75269,75271],{"class":103,"line":1615},[101,75249,73742],{"class":111},[101,75251,58236],{"class":1950},[101,75253,112],{"class":111},[101,75255,695],{"class":216},[101,75257,75227],{"class":47966},[101,75259,695],{"class":216},[101,75261,669],{"class":111},[101,75263,75234],{"class":1950},[101,75265,112],{"class":111},[101,75267,75268],{"class":216},"'哈哈'",[101,75270,75242],{"class":111},[101,75272,75245],{"class":170},[101,75274,75275,75277,75279,75281,75283,75285,75287,75289,75291,75293,75296,75299],{"class":103,"line":1629},[101,75276,73742],{"class":111},[101,75278,58236],{"class":1950},[101,75280,112],{"class":111},[101,75282,695],{"class":216},[101,75284,75227],{"class":47966},[101,75286,695],{"class":216},[101,75288,669],{"class":111},[101,75290,75234],{"class":1950},[101,75292,112],{"class":111},[101,75294,75295],{"class":216},"'二哈'",[101,75297,75298],{"class":111},"))   ",[101,75300,75245],{"class":170},[101,75302,75303],{"class":103,"line":1634},[101,75304,2387],{"emptyLinePlaceholder":27},[101,75306,75307],{"class":103,"line":1640},[101,75308,75309],{"class":170},"    \u002F\u002F 1.边界符\n",[101,75311,75312,75314,75316,75318,75320,75322,75324,75326,75328,75330,75332,75334,75336],{"class":103,"line":1661},[101,75313,73742],{"class":111},[101,75315,58236],{"class":1950},[101,75317,112],{"class":111},[101,75319,695],{"class":216},[101,75321,1077],{"class":107},[101,75323,75227],{"class":47966},[101,75325,695],{"class":216},[101,75327,669],{"class":111},[101,75329,75234],{"class":1950},[101,75331,112],{"class":111},[101,75333,75239],{"class":216},[101,75335,75242],{"class":111},[101,75337,75245],{"class":170},[101,75339,75340,75342,75344,75346,75348,75350,75352,75354,75356,75358,75360,75362,75364,75366],{"class":103,"line":1666},[101,75341,73742],{"class":111},[101,75343,58236],{"class":1950},[101,75345,112],{"class":111},[101,75347,695],{"class":216},[101,75349,1077],{"class":107},[101,75351,75227],{"class":47966},[101,75353,413],{"class":107},[101,75355,695],{"class":216},[101,75357,669],{"class":111},[101,75359,75234],{"class":1950},[101,75361,112],{"class":111},[101,75363,75268],{"class":216},[101,75365,75242],{"class":111},[101,75367,75368],{"class":170},"\u002F\u002Ffalse\n",[101,75370,75371],{"class":103,"line":1680},[101,75372,75373],{"class":170},"    \u002F\u002F 2.量词\n",[101,75375,75376],{"class":103,"line":1685},[101,75377,75378],{"class":170},"    \u002F\u002F 量词 * 类似于 >= 0\n",[101,75380,75381,75383,75385,75387,75389,75391,75393,75396,75398,75400,75402,75404,75406,75408],{"class":103,"line":1714},[101,75382,73742],{"class":111},[101,75384,58236],{"class":1950},[101,75386,112],{"class":111},[101,75388,695],{"class":216},[101,75390,1077],{"class":107},[101,75392,75227],{"class":47966},[101,75394,75395],{"class":107},"*$",[101,75397,695],{"class":216},[101,75399,669],{"class":111},[101,75401,75234],{"class":1950},[101,75403,112],{"class":111},[101,75405,75268],{"class":216},[101,75407,75242],{"class":111},[101,75409,75245],{"class":170},[101,75411,75412,75414,75416,75418,75420,75422,75424,75426,75428,75430,75432,75434,75437,75439],{"class":103,"line":1719},[101,75413,73742],{"class":111},[101,75415,58236],{"class":1950},[101,75417,112],{"class":111},[101,75419,695],{"class":216},[101,75421,1077],{"class":107},[101,75423,75227],{"class":47966},[101,75425,75395],{"class":107},[101,75427,695],{"class":216},[101,75429,669],{"class":111},[101,75431,75234],{"class":1950},[101,75433,112],{"class":111},[101,75435,75436],{"class":216},"'二哈好傻'",[101,75438,75242],{"class":111},[101,75440,75441],{"class":170},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[101,75443,75444,75446,75448,75450,75452,75454,75456,75458,75460,75462,75464,75466,75469,75471],{"class":103,"line":1736},[101,75445,73742],{"class":111},[101,75447,58236],{"class":1950},[101,75449,112],{"class":111},[101,75451,695],{"class":216},[101,75453,1077],{"class":107},[101,75455,75227],{"class":47966},[101,75457,75395],{"class":107},[101,75459,695],{"class":216},[101,75461,669],{"class":111},[101,75463,75234],{"class":1950},[101,75465,112],{"class":111},[101,75467,75468],{"class":216},"'哈好哈'",[101,75470,75298],{"class":111},[101,75472,75473],{"class":170},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[101,75475,75476],{"class":103,"line":1741},[101,75477,2387],{"emptyLinePlaceholder":27},[101,75479,75480],{"class":103,"line":1746},[101,75481,75482],{"class":170},"    \u002F\u002F +类似于>=1\n",[101,75484,75485,75487,75489,75491,75493,75495,75497,75500,75502,75504,75506,75508,75510,75512],{"class":103,"line":1751},[101,75486,73742],{"class":111},[101,75488,58236],{"class":1950},[101,75490,112],{"class":111},[101,75492,695],{"class":216},[101,75494,1077],{"class":107},[101,75496,75227],{"class":47966},[101,75498,75499],{"class":107},"+$",[101,75501,695],{"class":216},[101,75503,669],{"class":111},[101,75505,75234],{"class":1950},[101,75507,112],{"class":111},[101,75509,75268],{"class":216},[101,75511,75242],{"class":111},[101,75513,75245],{"class":170},[101,75515,75516,75518,75520,75522,75524,75526,75528,75530,75532,75534,75536,75538,75540,75542],{"class":103,"line":1765},[101,75517,73742],{"class":111},[101,75519,58236],{"class":1950},[101,75521,112],{"class":111},[101,75523,695],{"class":216},[101,75525,1077],{"class":107},[101,75527,75227],{"class":47966},[101,75529,75499],{"class":107},[101,75531,695],{"class":216},[101,75533,669],{"class":111},[101,75535,75234],{"class":1950},[101,75537,112],{"class":111},[101,75539,75436],{"class":216},[101,75541,75242],{"class":111},[101,75543,75441],{"class":170},[101,75545,75546,75548,75550,75552,75554,75556,75558,75560,75562,75564,75566,75568,75570,75572],{"class":103,"line":1770},[101,75547,73742],{"class":111},[101,75549,58236],{"class":1950},[101,75551,112],{"class":111},[101,75553,695],{"class":216},[101,75555,1077],{"class":107},[101,75557,75227],{"class":47966},[101,75559,75499],{"class":107},[101,75561,695],{"class":216},[101,75563,669],{"class":111},[101,75565,75234],{"class":1950},[101,75567,112],{"class":111},[101,75569,75468],{"class":216},[101,75571,75298],{"class":111},[101,75573,75368],{"class":170},[101,75575,75576],{"class":103,"line":2564},[101,75577,2387],{"emptyLinePlaceholder":27},[101,75579,75580],{"class":103,"line":2578},[101,75581,75582],{"class":170},"    \u002F\u002F ?类似于0次或一次\n",[101,75584,75585,75587,75589,75591,75593,75595,75598,75600,75602,75604,75606,75608,75610,75612],{"class":103,"line":2586},[101,75586,73742],{"class":111},[101,75588,58236],{"class":1950},[101,75590,112],{"class":111},[101,75592,695],{"class":216},[101,75594,1077],{"class":107},[101,75596,75597],{"class":47966},"哈？",[101,75599,413],{"class":107},[101,75601,695],{"class":216},[101,75603,669],{"class":111},[101,75605,75234],{"class":1950},[101,75607,112],{"class":111},[101,75609,74217],{"class":216},[101,75611,75298],{"class":111},[101,75613,75245],{"class":170},[101,75615,75616,75618,75620,75622,75624,75626,75628,75631,75633,75635,75637,75639,75641,75643],{"class":103,"line":2591},[101,75617,73742],{"class":111},[101,75619,58236],{"class":1950},[101,75621,112],{"class":111},[101,75623,695],{"class":216},[101,75625,1077],{"class":107},[101,75627,75227],{"class":47966},[101,75629,75630],{"class":107},"?$",[101,75632,695],{"class":216},[101,75634,669],{"class":111},[101,75636,75234],{"class":1950},[101,75638,112],{"class":111},[101,75640,75268],{"class":216},[101,75642,75242],{"class":111},[101,75644,75368],{"class":170},[101,75646,75647,75649,75651,75653,75655,75657,75659,75661,75663,75665,75667,75669,75671,75673],{"class":103,"line":2597},[101,75648,73742],{"class":111},[101,75650,58236],{"class":1950},[101,75652,112],{"class":111},[101,75654,695],{"class":216},[101,75656,1077],{"class":107},[101,75658,75227],{"class":47966},[101,75660,75630],{"class":107},[101,75662,695],{"class":216},[101,75664,669],{"class":111},[101,75666,75234],{"class":1950},[101,75668,112],{"class":111},[101,75670,75436],{"class":216},[101,75672,75242],{"class":111},[101,75674,75441],{"class":170},[101,75676,75677,75679,75681,75683,75685,75687,75689,75691,75693,75695,75697,75699,75701,75703],{"class":103,"line":2603},[101,75678,73742],{"class":111},[101,75680,58236],{"class":1950},[101,75682,112],{"class":111},[101,75684,695],{"class":216},[101,75686,1077],{"class":107},[101,75688,75227],{"class":47966},[101,75690,75630],{"class":107},[101,75692,695],{"class":216},[101,75694,669],{"class":111},[101,75696,75234],{"class":1950},[101,75698,112],{"class":111},[101,75700,75468],{"class":216},[101,75702,75242],{"class":111},[101,75704,75368],{"class":170},[101,75706,75707],{"class":103,"line":2608},[101,75708,2387],{"emptyLinePlaceholder":27},[101,75710,75711],{"class":103,"line":7936},[101,75712,75713],{"class":170},"    \u002F\u002F {n}写几，就必须出现几次\n",[101,75715,75716,75718,75720,75722,75724,75726,75728,75731,75733,75735,75737,75739,75742,75745],{"class":103,"line":7960},[101,75717,73742],{"class":111},[101,75719,58236],{"class":1950},[101,75721,112],{"class":111},[101,75723,695],{"class":216},[101,75725,1077],{"class":107},[101,75727,75227],{"class":47966},[101,75729,75730],{"class":107},"{4}$",[101,75732,695],{"class":216},[101,75734,669],{"class":111},[101,75736,75234],{"class":1950},[101,75738,112],{"class":111},[101,75740,75741],{"class":216},"'哈哈哈哈'",[101,75743,75744],{"class":111},")) ",[101,75746,75245],{"class":170},[101,75748,75749],{"class":103,"line":7965},[101,75750,2387],{"emptyLinePlaceholder":27},[101,75752,75753],{"class":103,"line":7971},[101,75754,75755],{"class":170},"    \u002F\u002F {n,}大于等于n次\n",[101,75757,75758,75760,75762,75764,75766,75768,75770,75773,75775,75777,75779,75781,75783,75785],{"class":103,"line":7998},[101,75759,73742],{"class":111},[101,75761,58236],{"class":1950},[101,75763,112],{"class":111},[101,75765,695],{"class":216},[101,75767,1077],{"class":107},[101,75769,75227],{"class":47966},[101,75771,75772],{"class":107},"{4,}$",[101,75774,695],{"class":216},[101,75776,669],{"class":111},[101,75778,75234],{"class":1950},[101,75780,112],{"class":111},[101,75782,75741],{"class":216},[101,75784,75744],{"class":111},[101,75786,75245],{"class":170},[101,75788,75789,75791,75793,75795,75797,75799,75801,75803,75805,75807,75809,75811,75814,75816],{"class":103,"line":8003},[101,75790,73742],{"class":111},[101,75792,58236],{"class":1950},[101,75794,112],{"class":111},[101,75796,695],{"class":216},[101,75798,1077],{"class":107},[101,75800,75227],{"class":47966},[101,75802,75772],{"class":107},[101,75804,695],{"class":216},[101,75806,669],{"class":111},[101,75808,75234],{"class":1950},[101,75810,112],{"class":111},[101,75812,75813],{"class":216},"'哈哈哈哈哈'",[101,75815,75744],{"class":111},[101,75817,75245],{"class":170},[101,75819,75820],{"class":103,"line":8009},[101,75821,2387],{"emptyLinePlaceholder":27},[101,75823,75824],{"class":103,"line":8021},[101,75825,75826],{"class":170},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[101,75828,75829,75831,75833,75835,75837,75839,75841,75844,75846,75848,75850,75852,75854,75856],{"class":103,"line":8033},[101,75830,73742],{"class":111},[101,75832,58236],{"class":1950},[101,75834,112],{"class":111},[101,75836,695],{"class":216},[101,75838,1077],{"class":107},[101,75840,75227],{"class":47966},[101,75842,75843],{"class":107},"{4,6}$",[101,75845,695],{"class":216},[101,75847,669],{"class":111},[101,75849,75234],{"class":1950},[101,75851,112],{"class":111},[101,75853,75741],{"class":216},[101,75855,75744],{"class":111},[101,75857,75245],{"class":170},[101,75859,75860,75862,75864,75866,75868,75870,75872,75874,75876,75878,75880,75882,75884,75886],{"class":103,"line":8045},[101,75861,73742],{"class":111},[101,75863,58236],{"class":1950},[101,75865,112],{"class":111},[101,75867,695],{"class":216},[101,75869,1077],{"class":107},[101,75871,75227],{"class":47966},[101,75873,75843],{"class":107},[101,75875,695],{"class":216},[101,75877,669],{"class":111},[101,75879,75234],{"class":1950},[101,75881,112],{"class":111},[101,75883,75813],{"class":216},[101,75885,75744],{"class":111},[101,75887,75245],{"class":170},[101,75889,75890,75892,75894,75896,75898,75900,75902,75904,75906,75908,75910,75912,75915,75917],{"class":103,"line":9704},[101,75891,73742],{"class":111},[101,75893,58236],{"class":1950},[101,75895,112],{"class":111},[101,75897,695],{"class":216},[101,75899,1077],{"class":107},[101,75901,75227],{"class":47966},[101,75903,75843],{"class":107},[101,75905,695],{"class":216},[101,75907,669],{"class":111},[101,75909,75234],{"class":1950},[101,75911,112],{"class":111},[101,75913,75914],{"class":216},"'哈哈哈哈哈哈哈'",[101,75916,75744],{"class":111},[101,75918,75368],{"class":170},[101,75920,75921],{"class":103,"line":9729},[101,75922,2387],{"emptyLinePlaceholder":27},[101,75924,75925],{"class":103,"line":9752},[101,75926,75927],{"class":170},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[101,75929,75930,75932,75934,75936,75938,75940,75943,75945,75947,75949,75951,75953,75956,75958],{"class":103,"line":9776},[101,75931,73742],{"class":111},[101,75933,58236],{"class":1950},[101,75935,112],{"class":111},[101,75937,695],{"class":216},[101,75939,1077],{"class":107},[101,75941,75942],{"class":160},"[abc]",[101,75944,413],{"class":107},[101,75946,695],{"class":216},[101,75948,669],{"class":111},[101,75950,75234],{"class":1950},[101,75952,112],{"class":111},[101,75954,75955],{"class":216},"'a'",[101,75957,75242],{"class":111},[101,75959,75245],{"class":170},[101,75961,75962,75964,75966,75968,75970,75972,75974,75976,75978,75980,75982,75984,75987,75989],{"class":103,"line":9781},[101,75963,73742],{"class":111},[101,75965,58236],{"class":1950},[101,75967,112],{"class":111},[101,75969,695],{"class":216},[101,75971,1077],{"class":107},[101,75973,75942],{"class":160},[101,75975,413],{"class":107},[101,75977,695],{"class":216},[101,75979,669],{"class":111},[101,75981,75234],{"class":1950},[101,75983,112],{"class":111},[101,75985,75986],{"class":216},"'b'",[101,75988,75242],{"class":111},[101,75990,75245],{"class":170},[101,75992,75993,75995,75997,75999,76001,76003,76005,76007,76009,76011,76013,76015,76018,76020],{"class":103,"line":9786},[101,75994,73742],{"class":111},[101,75996,58236],{"class":1950},[101,75998,112],{"class":111},[101,76000,695],{"class":216},[101,76002,1077],{"class":107},[101,76004,75942],{"class":160},[101,76006,413],{"class":107},[101,76008,695],{"class":216},[101,76010,669],{"class":111},[101,76012,75234],{"class":1950},[101,76014,112],{"class":111},[101,76016,76017],{"class":216},"'c'",[101,76019,75242],{"class":111},[101,76021,75245],{"class":170},[101,76023,76024,76026,76028,76030,76032,76034,76036,76038,76040,76042,76045,76047],{"class":103,"line":9791},[101,76025,73742],{"class":111},[101,76027,58236],{"class":1950},[101,76029,112],{"class":111},[101,76031,695],{"class":216},[101,76033,75942],{"class":160},[101,76035,695],{"class":216},[101,76037,669],{"class":111},[101,76039,75234],{"class":1950},[101,76041,112],{"class":111},[101,76043,76044],{"class":216},"'ab'",[101,76046,75242],{"class":111},[101,76048,75245],{"class":170},[101,76050,76051,76053,76055,76057,76059,76061,76063,76065,76067,76069,76071,76073,76075,76077],{"class":103,"line":9800},[101,76052,73742],{"class":111},[101,76054,58236],{"class":1950},[101,76056,112],{"class":111},[101,76058,695],{"class":216},[101,76060,1077],{"class":107},[101,76062,75942],{"class":160},[101,76064,413],{"class":107},[101,76066,695],{"class":216},[101,76068,669],{"class":111},[101,76070,75234],{"class":1950},[101,76072,112],{"class":111},[101,76074,76044],{"class":216},[101,76076,75242],{"class":111},[101,76078,76079],{"class":170},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[101,76081,76082,76084,76086,76088,76090,76092,76094,76097,76099,76101,76103,76105,76107,76109],{"class":103,"line":9805},[101,76083,73742],{"class":111},[101,76085,58236],{"class":1950},[101,76087,112],{"class":111},[101,76089,695],{"class":216},[101,76091,1077],{"class":107},[101,76093,75942],{"class":160},[101,76095,76096],{"class":107},"{2}$",[101,76098,695],{"class":216},[101,76100,669],{"class":111},[101,76102,75234],{"class":1950},[101,76104,112],{"class":111},[101,76106,76044],{"class":216},[101,76108,75242],{"class":111},[101,76110,76111],{"class":170},"\u002F\u002Ftrue   可以选两个\n",[101,76113,76114,76116,76118,76120,76122,76124,76127,76129,76131,76133,76135,76137,76140,76142],{"class":103,"line":9811},[101,76115,73742],{"class":111},[101,76117,58236],{"class":1950},[101,76119,112],{"class":111},[101,76121,695],{"class":216},[101,76123,1077],{"class":107},[101,76125,76126],{"class":160},"[a-z]",[101,76128,413],{"class":107},[101,76130,695],{"class":216},[101,76132,669],{"class":111},[101,76134,75234],{"class":1950},[101,76136,112],{"class":111},[101,76138,76139],{"class":216},"'p'",[101,76141,75298],{"class":111},[101,76143,76144],{"class":170},"\u002F\u002Ftrue   依然只能选一个\n",[101,76146,76147,76149,76151,76153,76155,76157,76160,76162,76164,76166,76168,76170,76172,76174],{"class":103,"line":9832},[101,76148,73742],{"class":111},[101,76150,58236],{"class":1950},[101,76152,112],{"class":111},[101,76154,695],{"class":216},[101,76156,1077],{"class":107},[101,76158,76159],{"class":160},"[A-Z]",[101,76161,413],{"class":107},[101,76163,695],{"class":216},[101,76165,669],{"class":111},[101,76167,75234],{"class":1950},[101,76169,112],{"class":111},[101,76171,76139],{"class":216},[101,76173,75298],{"class":111},[101,76175,75368],{"class":170},[101,76177,76178,76180,76182,76184,76186,76188,76190,76192,76194,76196,76198,76200,76203,76205],{"class":103,"line":9838},[101,76179,73742],{"class":111},[101,76181,58236],{"class":1950},[101,76183,112],{"class":111},[101,76185,695],{"class":216},[101,76187,1077],{"class":107},[101,76189,76159],{"class":160},[101,76191,413],{"class":107},[101,76193,695],{"class":216},[101,76195,669],{"class":111},[101,76197,75234],{"class":1950},[101,76199,112],{"class":111},[101,76201,76202],{"class":216},"'P'",[101,76204,75298],{"class":111},[101,76206,75245],{"class":170},[101,76208,76209,76211,76213,76215,76217,76219,76222,76224,76226,76228,76230,76232,76235,76237],{"class":103,"line":9852},[101,76210,73742],{"class":111},[101,76212,58236],{"class":1950},[101,76214,112],{"class":111},[101,76216,695],{"class":216},[101,76218,1077],{"class":107},[101,76220,76221],{"class":160},"[0-9]",[101,76223,413],{"class":107},[101,76225,695],{"class":216},[101,76227,669],{"class":111},[101,76229,75234],{"class":1950},[101,76231,112],{"class":111},[101,76233,76234],{"class":216},"'0'",[101,76236,75298],{"class":111},[101,76238,75245],{"class":170},[101,76240,76241,76243,76245,76247,76249,76251,76254,76256,76258,76260,76262,76264,76266,76268],{"class":103,"line":9858},[101,76242,73742],{"class":111},[101,76244,58236],{"class":1950},[101,76246,112],{"class":111},[101,76248,695],{"class":216},[101,76250,1077],{"class":107},[101,76252,76253],{"class":160},"[a-zA-Z0-9]",[101,76255,413],{"class":107},[101,76257,695],{"class":216},[101,76259,669],{"class":111},[101,76261,75234],{"class":1950},[101,76263,112],{"class":111},[101,76265,76139],{"class":216},[101,76267,75242],{"class":111},[101,76269,75245],{"class":170},[101,76271,76272,76274,76276],{"class":103,"line":9885},[101,76273,52406],{"class":111},[101,76275,51802],{"class":51289},[101,76277,51296],{"class":111},[101,76279,76280,76282,76284],{"class":103,"line":9894},[101,76281,51774],{"class":111},[101,76283,51789],{"class":51289},[101,76285,51296],{"class":111},[101,76287,76288],{"class":103,"line":9900},[101,76289,2387],{"emptyLinePlaceholder":27},[101,76291,76292,76294,76296],{"class":103,"line":9908},[101,76293,51774],{"class":111},[101,76295,50624],{"class":51289},[101,76297,51296],{"class":111},[21986,76299,76301],{"id":76300},"_3624-修饰符","3.6.2.4 修饰符",[10,76303,76304],{},[1449,76305],{"alt":20,"src":76306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[10,76308,76309],{},"replace是个方法，使用的时候一定不要忘记括号()",[10,76311,76312],{},[1449,76313],{"alt":20,"src":76314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[92,76316,76318],{"className":50622,"code":76317,"language":50624,"meta":20,"style":20},"\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",[98,76319,76320,76330,76344,76352,76366,76386,76398,76406,76414,76422,76454,76485,76490,76522,76533,76566,76575,76583,76591],{"__ignoreMap":20},[101,76321,76322,76324,76326,76328],{"class":103,"line":104},[101,76323,51286],{"class":111},[101,76325,51290],{"class":51289},[101,76327,51293],{"class":1950},[101,76329,51296],{"class":111},[101,76331,76332,76334,76336,76338,76340,76342],{"class":103,"line":21},[101,76333,1021],{"class":111},[101,76335,50624],{"class":51289},[101,76337,51305],{"class":1950},[101,76339,157],{"class":111},[101,76341,51310],{"class":216},[101,76343,51296],{"class":111},[101,76345,76346,76348,76350],{"class":103,"line":1166},[101,76347,1021],{"class":111},[101,76349,51323],{"class":51289},[101,76351,51296],{"class":111},[101,76353,76354,76356,76358,76360,76362,76364],{"class":103,"line":1181},[101,76355,52133],{"class":111},[101,76357,51333],{"class":51289},[101,76359,51336],{"class":1950},[101,76361,157],{"class":111},[101,76363,51341],{"class":216},[101,76365,51296],{"class":111},[101,76367,76368,76370,76372,76374,76376,76378,76380,76382,76384],{"class":103,"line":1187},[101,76369,52133],{"class":111},[101,76371,51333],{"class":51289},[101,76373,14908],{"class":1950},[101,76375,157],{"class":111},[101,76377,51380],{"class":216},[101,76379,51360],{"class":1950},[101,76381,157],{"class":111},[101,76383,51387],{"class":216},[101,76385,51296],{"class":111},[101,76387,76388,76390,76392,76394,76396],{"class":103,"line":1201},[101,76389,52133],{"class":111},[101,76391,51396],{"class":51289},[101,76393,51399],{"class":111},[101,76395,51396],{"class":51289},[101,76397,51296],{"class":111},[101,76399,76400,76402,76404],{"class":103,"line":1207},[101,76401,51774],{"class":111},[101,76403,51323],{"class":51289},[101,76405,51296],{"class":111},[101,76407,76408,76410,76412],{"class":103,"line":1298},[101,76409,1021],{"class":111},[101,76411,51789],{"class":51289},[101,76413,51296],{"class":111},[101,76415,76416,76418,76420],{"class":103,"line":1304},[101,76417,52133],{"class":111},[101,76419,51802],{"class":51289},[101,76421,51296],{"class":111},[101,76423,76424,76426,76428,76430,76432,76434,76437,76439,76441,76443,76445,76447,76450,76452],{"class":103,"line":1316},[101,76425,73742],{"class":111},[101,76427,58236],{"class":1950},[101,76429,112],{"class":111},[101,76431,695],{"class":216},[101,76433,1077],{"class":107},[101,76435,76436],{"class":47966},"java",[101,76438,413],{"class":107},[101,76440,695],{"class":216},[101,76442,669],{"class":111},[101,76444,75234],{"class":1950},[101,76446,112],{"class":111},[101,76448,76449],{"class":216},"'java'",[101,76451,75744],{"class":111},[101,76453,75245],{"class":170},[101,76455,76456,76458,76460,76462,76464,76466,76468,76470,76472,76474,76476,76478,76481,76483],{"class":103,"line":1599},[101,76457,73742],{"class":111},[101,76459,58236],{"class":1950},[101,76461,112],{"class":111},[101,76463,695],{"class":216},[101,76465,1077],{"class":107},[101,76467,76436],{"class":47966},[101,76469,413],{"class":107},[101,76471,695],{"class":216},[101,76473,669],{"class":111},[101,76475,75234],{"class":1950},[101,76477,112],{"class":111},[101,76479,76480],{"class":216},"'Java'",[101,76482,75744],{"class":111},[101,76484,75368],{"class":170},[101,76486,76487],{"class":103,"line":1604},[101,76488,76489],{"class":170},"    \u002F\u002F 不区分大小写、\n",[101,76491,76492,76494,76496,76498,76500,76502,76504,76506,76508,76510,76512,76514,76516,76518,76520],{"class":103,"line":1610},[101,76493,73742],{"class":111},[101,76495,58236],{"class":1950},[101,76497,112],{"class":111},[101,76499,695],{"class":216},[101,76501,1077],{"class":107},[101,76503,76436],{"class":47966},[101,76505,413],{"class":107},[101,76507,695],{"class":216},[101,76509,552],{"class":107},[101,76511,669],{"class":111},[101,76513,75234],{"class":1950},[101,76515,112],{"class":111},[101,76517,76480],{"class":216},[101,76519,75744],{"class":111},[101,76521,75245],{"class":170},[101,76523,76524,76526,76528,76530],{"class":103,"line":1615},[101,76525,11209],{"class":107},[101,76527,73908],{"class":160},[101,76529,13552],{"class":107},[101,76531,76532],{"class":216}," 'java是一门编程语言，学完java工资很高'\n",[101,76534,76535,76537,76540,76542,76545,76548,76550,76552,76554,76556,76559,76561,76564],{"class":103,"line":1629},[101,76536,11209],{"class":107},[101,76538,76539],{"class":160}," result",[101,76541,13552],{"class":107},[101,76543,76544],{"class":111}," str.",[101,76546,76547],{"class":1950},"replace",[101,76549,112],{"class":111},[101,76551,695],{"class":216},[101,76553,76436],{"class":47966},[101,76555,695],{"class":216},[101,76557,76558],{"class":107},"ig",[101,76560,12423],{"class":111},[101,76562,76563],{"class":216},"'前端'",[101,76565,118],{"class":111},[101,76567,76568,76570,76572],{"class":103,"line":1634},[101,76569,73742],{"class":111},[101,76571,58236],{"class":1950},[101,76573,76574],{"class":111},"(result)\n",[101,76576,76577,76579,76581],{"class":103,"line":1640},[101,76578,52406],{"class":111},[101,76580,51802],{"class":51289},[101,76582,51296],{"class":111},[101,76584,76585,76587,76589],{"class":103,"line":1661},[101,76586,51774],{"class":111},[101,76588,51789],{"class":51289},[101,76590,51296],{"class":111},[101,76592,76593,76595,76597],{"class":103,"line":1666},[101,76594,51774],{"class":111},[101,76596,50624],{"class":51289},[101,76598,51296],{"class":111},[5114,76600,76601],{},"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":20,"searchDepth":21,"depth":21,"links":76603},[76604,76614,76626,76643,76650,76658],{"id":53349,"depth":21,"text":53350,"children":76605},[76606,76607,76608,76609,76610,76611,76612,76613],{"id":53353,"depth":1166,"text":53354},{"id":53386,"depth":1166,"text":53387},{"id":53425,"depth":1166,"text":53426},{"id":53583,"depth":1166,"text":53584},{"id":53631,"depth":1166,"text":53632},{"id":53768,"depth":1166,"text":53769},{"id":54090,"depth":1166,"text":54091},{"id":57078,"depth":1166,"text":57079},{"id":57106,"depth":21,"text":57107,"children":76615},[76616,76617,76618,76619,76620,76621,76622,76623,76624,76625],{"id":57110,"depth":1166,"text":57111},{"id":57133,"depth":1166,"text":57134},{"id":58048,"depth":1166,"text":58049},{"id":58738,"depth":1166,"text":58739},{"id":59020,"depth":1166,"text":59021},{"id":63181,"depth":1166,"text":63182},{"id":63351,"depth":1166,"text":63352},{"id":63479,"depth":1166,"text":63480},{"id":63504,"depth":1166,"text":63505},{"id":64893,"depth":1166,"text":64894},{"id":66046,"depth":21,"text":66047,"children":76627},[76628,76629,76630,76631,76632,76633,76634,76635,76636,76637,76638,76639,76640,76641,76642],{"id":66050,"depth":1166,"text":66051},{"id":66704,"depth":1166,"text":66705},{"id":68399,"depth":1166,"text":68400},{"id":68440,"depth":1166,"text":68441},{"id":68482,"depth":1166,"text":68483},{"id":68496,"depth":1166,"text":68497},{"id":68545,"depth":1166,"text":68546},{"id":68557,"depth":1166,"text":68558},{"id":68572,"depth":1166,"text":68573},{"id":68608,"depth":1166,"text":68609},{"id":68689,"depth":1166,"text":68690},{"id":68817,"depth":1166,"text":68818},{"id":68829,"depth":1166,"text":68830},{"id":68848,"depth":1166,"text":68849},{"id":70959,"depth":1166,"text":70960},{"id":70978,"depth":21,"text":70979,"children":76644},[76645,76646,76647,76648,76649],{"id":70999,"depth":1166,"text":71000},{"id":71019,"depth":1166,"text":71020},{"id":71068,"depth":1166,"text":71069},{"id":71193,"depth":1166,"text":71194},{"id":71374,"depth":1166,"text":71375},{"id":71392,"depth":21,"text":71393,"children":76651},[76652,76653,76654,76655,76656,76657],{"id":71407,"depth":1166,"text":71408},{"id":71466,"depth":1166,"text":71467},{"id":71490,"depth":1166,"text":71491},{"id":71810,"depth":1166,"text":71811},{"id":71842,"depth":1166,"text":71843},{"id":71865,"depth":1166,"text":71866},{"id":74933,"depth":21,"text":74934,"children":76659},[76660,76661],{"id":74967,"depth":1166,"text":74968},{"id":75006,"depth":1166,"text":75007},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53321,"description":23365},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76668,"title":76669,"body":76670,"description":23365,"extension":24,"meta":92807,"navigation":27,"path":92808,"seo":92809,"stem":92810,"__hash__":92811},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76671,"toc":92743},[76672,76675,76678,76682,76686,76691,76696,76707,76711,76716,76719,76723,76726,76731,76735,76739,76742,76747,76750,76754,76757,76765,76768,76772,76777,76782,76785,76789,76794,76799,76802,76806,76811,76814,76819,76822,76827,76830,76835,76840,76843,76846,76850,76855,76860,76863,76867,76871,76874,76877,76880,76884,76888,76893,76898,76901,76905,76910,76915,76918,76921,76924,76927,76930,76933,76936,76939,76942,76947,76951,76956,76961,76964,76967,76970,76973,76976,76979,76982,76985,76989,76993,76996,76999,77002,77007,77009,77012,77015,77018,77021,77024,77027,77030,77033,77036,77039,77042,77045,77048,77053,77058,77063,77066,77070,77073,77078,77082,77084,77095,77100,77201,77204,77207,77210,77213,77216,77219,77222,77225,77227,77230,77233,77236,77239,77242,77244,77247,77250,77253,77256,77259,77262,77264,77267,77269,77271,77274,77278,77282,77285,77288,77291,77294,77297,77300,77303,77306,77309,77314,77434,77437,77440,77445,77448,77451,77454,77457,77462,77465,77468,77471,77474,77479,77482,77582,77647,77721,77725,77728,77731,77735,77738,77752,77781,77784,77787,77790,77793,77796,77799,77802,77804,77807,77810,77813,77816,77820,77825,77829,77834,77909,77912,78095,78098,78101,78104,78107,78110,78112,78115,78118,78121,78124,78127,78130,78132,78136,78139,78144,78147,78150,78153,78156,78158,78163,78166,78169,78172,78175,78177,78182,78185,78188,78190,78192,78195,78199,78202,78205,78210,78213,78216,78219,78269,78274,78278,78283,78286,78355,78358,78367,78371,78376,78379,78382,78390,78393,78410,80212,80216,80220,80225,80228,80232,80238,80244,80396,80401,80406,80409,80412,80415,80418,80421,80424,80427,80430,80433,80436,80439,80442,80447,80451,80454,80465,80469,80474,80477,80480,80483,80486,80489,80491,80494,80497,80500,80503,80505,80522,80525,80529,80532,80537,80542,80545,80548,80552,80555,80558,80567,80570,80574,80577,80582,80587,80654,80658,80661,80664,80669,80674,80760,80765,80769,80772,80775,80790,80793,80798,80802,80807,80916,80919,80930,81080,81084,81089,81198,81202,81207,81212,81217,81220,81227,81247,81283,81447,81452,81455,81460,81467,81470,81473,81476,81535,81591,81647,81651,81656,81971,81974,81978,81981,81986,82095,82100,82104,82109,82113,82184,82188,82190,82193,82196,82234,82510,82514,82531,82597,82631,82635,82638,82643,82672,82679,82688,82693,82708,82713,82722,82725,82862,82866,82928,82932,82937,83182,83186,83191,83194,83197,83200,83203,83207,83212,84793,84797,84801,84807,84810,84815,84819,84822,84827,84830,84841,84845,84850,84854,84859,84864,84867,84872,84876,84880,84883,84888,84893,84896,84899,84902,85024,85029,85131,85134,85137,85141,85146,85318,85323,85327,85330,85335,85401,85406,85409,85540,85543,85548,85551,85554,85645,85650,85653,85656,85659,85662,85667,85672,85675,85680,85685,85690,85694,85697,85700,85705,85710,85715,85720,85774,85777,85780,85785,85788,85791,85796,85801,85806,85810,85815,85829,85834,85837,85842,85846,85851,85856,85861,85866,85871,85876,85881,85886,85889,85893,85898,85901,85904,85907,85912,85917,85920,85923,85927,85930,85933,85938,85943,85948,85953,85956,85961,85966,86027,86032,86035,86040,87281,87286,87290,87294,87299,87302,87307,87312,87315,87320,87322,87327,87331,87334,87337,87348,87352,87357,87362,87417,87422,87427,87432,87643,87648,87652,87657,87660,87662,87665,87668,88115,88120,88127,88133,88136,88139,88403,88408,88412,88677,88682,88686,88691,88696,88701,88706,89037,89040,89045,89050,89053,89057,89061,89066,89071,89076,89081,89086,89091,89095,89098,89103,89108,89111,89185,89190,89195,89200,89202,89205,89575,89580,89585,89590,89593,89596,89698,89703,89708,89811,89815,89820,89824,89828,89833,89838,89841,89846,89849,89852,90245,90250,90253,90256,90259,90262,90782,90786,90791,90796,90801,90804,90809,90812,90815,91197,91202,91204,91206,91209,91212,91724,91728,91789,91792,91795,91798,91802,91805,91810,91815,92740],[39,76673,76669],{"id":76674},"_4js进阶",[10,76676,76677],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[43,76679,76681],{"id":76680},"_41-作用域","4.1 作用域",[72,76683,76685],{"id":76684},"_411-局部作用域","4.1.1 局部作用域",[10,76687,76688],{},[1449,76689],{"alt":20,"src":76690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[10,76692,76693],{},[1449,76694],{"alt":20,"src":76695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1118,76697,76698,76701,76704],{},[58,76699,76700],{},"函数作用域在函数内部",[58,76702,76703],{},"块级作用域在{}",[58,76705,76706],{},"对象的那个{}不是作用域，不是块作用域",[72,76708,76710],{"id":76709},"_412-全局作用域","4.1.2 全局作用域",[10,76712,76713],{},[1449,76714],{"alt":20,"src":76715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[10,76717,76718],{},"window.a=10不要这样写",[72,76720,76722],{"id":76721},"_413-作用域链","4.1.3 作用域链",[10,76724,76725],{},"变量查找机制",[10,76727,76728],{},[1449,76729],{"alt":20,"src":76730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[43,76732,76734],{"id":76733},"_42-垃圾回收机制","4.2 垃圾回收机制",[72,76736,76738],{"id":76737},"_421-大体介绍","4.2.1 大体介绍",[10,76740,76741],{},"垃圾回收机制(Garbage Collection) 简称 GC",[10,76743,76744],{},[1449,76745],{"alt":20,"src":76746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[10,76748,76749],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[72,76751,76753],{"id":76752},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[10,76755,76756],{},"堆栈空间分配区别：",[55,76758,76759,76762],{},[58,76760,76761],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[58,76763,76764],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[10,76766,76767],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21986,76769,76771],{"id":76770},"_4221-引用计数","4.2.2.1 引用计数",[10,76773,76774],{},[1449,76775],{"alt":20,"src":76776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[10,76778,76779],{},[1449,76780],{"alt":20,"src":76781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[10,76783,76784],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21986,76786,76788],{"id":76787},"_4222-标记清除法","4.2.2.2 标记清除法",[10,76790,76791],{},[1449,76792],{"alt":20,"src":76793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[10,76795,76796],{},[1449,76797],{"alt":20,"src":76798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[10,76800,76801],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[43,76803,76805],{"id":76804},"_43-闭包","4.3 闭包",[10,76807,76808],{},[1449,76809],{"alt":20,"src":76810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[10,76812,76813],{},"闭包：内层函数+外层函数的变量",[10,76815,76816],{},[1449,76817],{"alt":20,"src":76818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[10,76820,76821],{},"closure就是闭包",[10,76823,76824],{},[1449,76825],{"alt":20,"src":76826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[10,76828,76829],{},"内层函数必须包含外层函数的变量才是闭包",[10,76831,76832],{},[1449,76833],{"alt":20,"src":76834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[10,76836,76837],{},[1449,76838],{"alt":20,"src":76839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[10,76841,76842],{},"闭包可能会引起内存泄漏",[10,76844,76845],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[43,76847,76849],{"id":76848},"_44-变量提升","4.4 变量提升",[10,76851,76852],{},[1449,76853],{"alt":20,"src":76854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[10,76856,76857],{},[1449,76858],{"alt":20,"src":76859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[10,76861,76862],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[43,76864,76866],{"id":76865},"_45-函数进阶","4.5 函数进阶",[72,76868,76870],{"id":76869},"_451-函数提升","4.5.1 函数提升",[10,76872,76873],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[10,76875,76876],{},"只提升函数声明，不提升函数调用",[51802,76878,76879],{},"\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",[72,76881,76883],{"id":76882},"_452-函数参数","4.5.2 函数参数",[21986,76885,76887],{"id":76886},"_4521-动态参数","4.5.2.1 动态参数",[10,76889,76890],{},[1449,76891],{"alt":20,"src":76892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[10,76894,76895],{},[1449,76896],{"alt":20,"src":76897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[10,76899,76900],{},"箭头函数里边没有arguments",[21986,76902,76904],{"id":76903},"_4522-剩余参数","4.5.2.2 剩余参数",[10,76906,76907],{},[1449,76908],{"alt":20,"src":76909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[10,76911,76912],{},[1449,76913],{"alt":20,"src":76914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[10,76916,76917],{},"剩余参数使用的时候不需要写...",[10,76919,76920],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[10,76922,76923],{},"  function getSum(a,b,...arr) {",[10,76925,76926],{},"  console.log(11)",[10,76928,76929],{},"  }",[10,76931,76932],{},"  getSum(1,2,3,4)",[10,76934,76935],{},"  将1传给a，2传给b，剩下的传给剩余参数",[10,76937,76938],{},"  getSum(1,2)",[10,76940,76941],{},"  将1传给a，2传给b，剩余参数为一个空数组",[10,76943,76944],{},[1449,76945],{"alt":20,"src":76946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21986,76948,76950],{"id":76949},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[10,76952,76953],{},[1449,76954],{"alt":20,"src":76955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[10,76957,76958],{},[1449,76959],{"alt":20,"src":76960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[10,76962,76963],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[10,76965,76966],{},"展开运算符可以用于数组之间的合并：",[10,76968,76969],{},"const arr1 = [1, 2, 3]",[10,76971,76972],{},"const arr2 = [3, 4, 5]",[10,76974,76975],{},"const arr = [...arr1, ...arr2]",[10,76977,76978],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[10,76980,76981],{},"剩余参数：函数参数使用，得到真数组",[10,76983,76984],{},"展开运算符：数组中使用，数组展开",[72,76986,76988],{"id":76987},"_453-箭头函数","4.5.3 箭头函数",[21986,76990,76992],{"id":76991},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[10,76994,76995],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[10,76997,76998],{},"它不是万能的！！！",[10,77000,77001],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[10,77003,77004],{},[1449,77005],{"alt":20,"src":77006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[10,77008,141],{},[10,77010,77011],{},"① 只有一个形参的时候，可以省略小括号：",[10,77013,77014],{},"const fn=x=>{console.log(x)}",[10,77016,77017],{},"② 只有一行代码时可以省略大括号：",[10,77019,77020],{},"const fn=x=>console.log(11)",[10,77022,77023],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[10,77025,77026],{},"const fn=x=>x+x",[10,77028,77029],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[10,77031,77032],{},"⑤ 阻止表单默认提交：",[10,77034,77035],{},"const form = document.querySelector('form')",[10,77037,77038],{},"form.addEventListener('click', ev => ev.preventDefault())",[10,77040,77041],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[10,77043,77044],{},"const fn=uname=>({uname:uname})",[10,77046,77047],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[10,77049,77050],{},[1449,77051],{"alt":20,"src":77052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[10,77054,77055],{},[1449,77056],{"alt":20,"src":77057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[10,77059,77060],{},[1449,77061],{"alt":20,"src":77062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[10,77064,77065],{},"一定不要忘记用()，有()就理解为自带return",[21986,77067,77069],{"id":77068},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[10,77071,77072],{},"箭头函数是没有动态参数的arguments",[10,77074,77075],{},[1449,77076],{"alt":20,"src":77077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21986,77079,77081],{"id":77080},"_4533-箭头函数this","4.5.3.3 箭头函数this",[10,77083,11320],{},[55,77085,77086,77089,77092],{},[58,77087,77088],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[58,77090,77091],{},"事件回调函数使用箭头函数时，this 为全局的 window",[58,77093,77094],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[10,77096,77097],{},[1449,77098],{"alt":20,"src":77099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[92,77101,77103],{"className":53056,"code":77102,"language":53058,"meta":20,"style":20},"  \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",[98,77104,77105,77113,77118,77123,77128,77133,77138,77142,77147,77151,77155,77160,77165,77170,77174,77178,77183,77188,77193],{"__ignoreMap":20},[101,77106,77107,77109,77111],{"class":103,"line":104},[101,77108,52133],{"class":111},[101,77110,51802],{"class":51289},[101,77112,51296],{"class":111},[101,77114,77115],{"class":103,"line":21},[101,77116,77117],{"class":111},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[101,77119,77120],{"class":103,"line":1166},[101,77121,77122],{"class":111},"    console.log(this) \u002F\u002F指向window\n",[101,77124,77125],{"class":103,"line":1181},[101,77126,77127],{"class":111},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[101,77129,77130],{"class":103,"line":1187},[101,77131,77132],{"class":111},"    function fn() {\n",[101,77134,77135],{"class":103,"line":1201},[101,77136,77137],{"class":111},"      console.log(this)  \u002F\u002F指向window\n",[101,77139,77140],{"class":103,"line":1207},[101,77141,2174],{"class":111},[101,77143,77144],{"class":103,"line":1298},[101,77145,77146],{"class":111},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[101,77148,77149],{"class":103,"line":1304},[101,77150,2387],{"emptyLinePlaceholder":27},[101,77152,77153],{"class":103,"line":1316},[101,77154,71512],{"class":111},[101,77156,77157],{"class":103,"line":1599},[101,77158,77159],{"class":111},"      name: 'andy',\n",[101,77161,77162],{"class":103,"line":1604},[101,77163,77164],{"class":111},"      sayHai: function () {\n",[101,77166,77167],{"class":103,"line":1610},[101,77168,77169],{"class":111},"        console.log(this)\n",[101,77171,77172],{"class":103,"line":1615},[101,77173,52387],{"class":111},[101,77175,77176],{"class":103,"line":1629},[101,77177,2174],{"class":111},[101,77179,77180],{"class":103,"line":1634},[101,77181,77182],{"class":111},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[101,77184,77185],{"class":103,"line":1640},[101,77186,77187],{"class":111},"    \u002F\u002F 2.箭头函数的this\n",[101,77189,77190],{"class":103,"line":1661},[101,77191,77192],{"class":111},"    const fn = () => console.log(this)\n",[101,77194,77195,77197,77199],{"class":103,"line":1666},[101,77196,52406],{"class":111},[101,77198,51802],{"class":51289},[101,77200,51296],{"class":111},[10,77202,77203],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[10,77205,77206],{},"const fn = () => console.log(this)",[10,77208,77209],{},"fn() \u002F\u002F指向window",[10,77211,77212],{},"\u002F\u002F 3.对象方法箭头函数 this",[10,77214,77215],{},"①",[10,77217,77218],{},"const obj = {",[10,77220,77221],{},"uname: 'pink老师',",[10,77223,77224],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[10,77226,1057],{},[10,77228,77229],{},"调用对象里边的函数",[10,77231,77232],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[10,77234,77235],{},"obj.sayHai()",[10,77237,77238],{},"②",[10,77240,77241],{},"const obj1 = {",[10,77243,77221],{},[10,77245,77246],{},"sayHai: function () {",[10,77248,77249],{},"let i = 10",[10,77251,77252],{},"const count = () => {",[10,77254,77255],{},"console.log(this)",[10,77257,77258],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[10,77260,77261],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[10,77263,1057],{},[10,77265,77266],{},"count()",[10,77268,1057],{},[10,77270,1057],{},[10,77272,77273],{},"obj1.sayHai()",[43,77275,77277],{"id":77276},"_46-解构赋值","4.6 解构赋值",[72,77279,77281],{"id":77280},"_461-数组解构","4.6.1 数组解构",[10,77283,77284],{},"以前要是使用数组中的值的话：",[10,77286,77287],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[10,77289,77290],{},"const arr=[100,60,80]",[10,77292,77293],{},"const max=arr[0]",[10,77295,77296],{},"const min=arr[1]",[10,77298,77299],{},"const avg=arr[2]",[10,77301,77302],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[10,77304,77305],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[10,77307,77308],{},"这个写法就类似于上边的那种用很多const的方法",[10,77310,77311],{},[1449,77312],{"alt":20,"src":77313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[92,77315,77317],{"className":50622,"code":77316,"language":50624,"meta":20,"style":20},"①变量之间交换值:\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",[98,77318,77319,77324,77329,77334,77339,77344,77348,77352,77357,77361,77366,77371,77375,77380,77385,77396,77406,77411,77416,77421,77425,77429],{"__ignoreMap":20},[101,77320,77321],{"class":103,"line":104},[101,77322,77323],{"class":111},"①变量之间交换值:\n",[101,77325,77326],{"class":103,"line":21},[101,77327,77328],{"class":111},"let a=1\n",[101,77330,77331],{"class":103,"line":1166},[101,77332,77333],{"class":111},"let b=2;\n",[101,77335,77336],{"class":103,"line":1181},[101,77337,77338],{"class":111},"必须加这行代码，不然就会报错\n",[101,77340,77341],{"class":103,"line":1187},[101,77342,77343],{"class":111},"[b,a]=[a,b]\n",[101,77345,77346],{"class":103,"line":1201},[101,77347,2387],{"emptyLinePlaceholder":27},[101,77349,77350],{"class":103,"line":1207},[101,77351,2387],{"emptyLinePlaceholder":27},[101,77353,77354],{"class":103,"line":1298},[101,77355,77356],{"class":111},"可以写成下面的方式：\n",[101,77358,77359],{"class":103,"line":1304},[101,77360,77328],{"class":111},[101,77362,77363],{"class":103,"line":1316},[101,77364,77365],{"class":111},"let b=2\n",[101,77367,77368],{"class":103,"line":1599},[101,77369,77370],{"class":111},";[b,a]=[a,b]\n",[101,77372,77373],{"class":103,"line":1604},[101,77374,2387],{"emptyLinePlaceholder":27},[101,77376,77377],{"class":103,"line":1610},[101,77378,77379],{"class":111},"②排序\n",[101,77381,77382],{"class":103,"line":1615},[101,77383,77384],{"class":111},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[101,77386,77387,77390,77393],{"class":103,"line":1629},[101,77388,77389],{"class":111},"for (let i = 0; i ",[101,77391,1021],{"class":77392},"s7hpK",[101,77394,77395],{"class":111}," arr1.length; i++) {\n",[101,77397,77398,77401,77403],{"class":103,"line":1634},[101,77399,77400],{"class":111},"   for (let j = 0; j ",[101,77402,1021],{"class":77392},[101,77404,77405],{"class":111}," arr1.length - 1; j++) {\n",[101,77407,77408],{"class":103,"line":1640},[101,77409,77410],{"class":111},"      if (arr1[j] > arr1[j + 1]) {\n",[101,77412,77413],{"class":103,"line":1661},[101,77414,77415],{"class":111},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[101,77417,77418],{"class":103,"line":1666},[101,77419,77420],{"class":111},"       }\n",[101,77422,77423],{"class":103,"line":1680},[101,77424,4296],{"class":111},[101,77426,77427],{"class":103,"line":1685},[101,77428,1552],{"class":111},[101,77430,77431],{"class":103,"line":1714},[101,77432,77433],{"class":111},"console.log(arr1)\n",[10,77435,77436],{},"数组解构的细节：",[10,77438,77439],{},"①变量多，单元值少",[10,77441,77442],{},[1449,77443],{"alt":20,"src":77444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[10,77446,77447],{},"防止出现undefined的方法：",[10,77449,77450],{},"const [a=0,b=0] =[1]",[10,77452,77453],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[10,77455,77456],{},"②变量少，单元值多",[10,77458,77459],{},[1449,77460],{"alt":20,"src":77461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[10,77463,77464],{},"此时可以使用剩余参数来接收多余的值",[10,77466,77467],{},"const [a,b,...c]=[1,2,3,4]",[10,77469,77470],{},"console.log(c) 输出[3,4]",[10,77472,77473],{},"③可以按需导入，忽略某些返回值",[10,77475,77476],{},[1449,77477],{"alt":20,"src":77478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[10,77480,77481],{},"④支持多维数组的结构",[92,77483,77487],{"className":77484,"code":77485,"language":77486,"meta":20,"style":20},"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",[98,77488,77489,77517,77533,77548,77563],{"__ignoreMap":20},[101,77490,77491,77493,77495,77497,77499,77501,77503,77505,77508,77510,77512,77514],{"class":103,"line":104},[101,77492,6780],{"class":107},[101,77494,51822],{"class":111},[101,77496,157],{"class":107},[101,77498,52215],{"class":111},[101,77500,329],{"class":160},[101,77502,12423],{"class":111},[101,77504,189],{"class":160},[101,77506,77507],{"class":111},", [",[101,77509,183],{"class":160},[101,77511,12423],{"class":111},[101,77513,404],{"class":160},[101,77515,77516],{"class":111},"]]\n",[101,77518,77519,77522,77524,77526,77528,77530],{"class":103,"line":21},[101,77520,77521],{"class":111},"console.",[101,77523,58236],{"class":1950},[101,77525,3838],{"class":111},[101,77527,303],{"class":160},[101,77529,4203],{"class":111},[101,77531,77532],{"class":170},"  \u002F\u002F1\n",[101,77534,77535,77537,77539,77541,77543,77545],{"class":103,"line":1166},[101,77536,77521],{"class":111},[101,77538,58236],{"class":1950},[101,77540,3838],{"class":111},[101,77542,329],{"class":160},[101,77544,4203],{"class":111},[101,77546,77547],{"class":170},"  \u002F\u002F2\n",[101,77549,77550,77552,77554,77556,77558,77560],{"class":103,"line":1181},[101,77551,77521],{"class":111},[101,77553,58236],{"class":1950},[101,77555,3838],{"class":111},[101,77557,189],{"class":160},[101,77559,4203],{"class":111},[101,77561,77562],{"class":170},"  \u002F\u002F[3,4]\n",[101,77564,77565,77567,77569,77571,77573,77575,77577,77579],{"class":103,"line":1187},[101,77566,77521],{"class":111},[101,77568,58236],{"class":1950},[101,77570,3838],{"class":111},[101,77572,189],{"class":160},[101,77574,4888],{"class":111},[101,77576,303],{"class":160},[101,77578,4203],{"class":111},[101,77580,77581],{"class":170},"  \u002F\u002F3\n",[92,77583,77585],{"className":77484,"code":77584,"language":77486,"meta":20,"style":20},"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",[98,77586,77587,77614,77625,77636],{"__ignoreMap":20},[101,77588,77589,77591,77594,77596,77598,77600,77602,77604,77606,77608,77610,77612],{"class":103,"line":104},[101,77590,6780],{"class":107},[101,77592,77593],{"class":111}," [a, b, c] ",[101,77595,157],{"class":107},[101,77597,52215],{"class":111},[101,77599,329],{"class":160},[101,77601,12423],{"class":111},[101,77603,189],{"class":160},[101,77605,77507],{"class":111},[101,77607,183],{"class":160},[101,77609,12423],{"class":111},[101,77611,404],{"class":160},[101,77613,77516],{"class":111},[101,77615,77616,77618,77620,77623],{"class":103,"line":21},[101,77617,77521],{"class":111},[101,77619,58236],{"class":1950},[101,77621,77622],{"class":111},"(a)",[101,77624,77532],{"class":170},[101,77626,77627,77629,77631,77634],{"class":103,"line":1166},[101,77628,77521],{"class":111},[101,77630,58236],{"class":1950},[101,77632,77633],{"class":111},"(b)",[101,77635,77547],{"class":170},[101,77637,77638,77640,77642,77645],{"class":103,"line":1181},[101,77639,77521],{"class":111},[101,77641,58236],{"class":1950},[101,77643,77644],{"class":111},"(c)",[101,77646,77562],{"class":170},[92,77648,77650],{"className":77484,"code":77649,"language":77486,"meta":20,"style":20},"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",[98,77651,77652,77679,77689,77699,77709],{"__ignoreMap":20},[101,77653,77654,77656,77659,77661,77663,77665,77667,77669,77671,77673,77675,77677],{"class":103,"line":104},[101,77655,6780],{"class":107},[101,77657,77658],{"class":111}," [a, b, [c, d]] ",[101,77660,157],{"class":107},[101,77662,52215],{"class":111},[101,77664,329],{"class":160},[101,77666,12423],{"class":111},[101,77668,189],{"class":160},[101,77670,77507],{"class":111},[101,77672,183],{"class":160},[101,77674,12423],{"class":111},[101,77676,404],{"class":160},[101,77678,77516],{"class":111},[101,77680,77681,77683,77685,77687],{"class":103,"line":21},[101,77682,77521],{"class":111},[101,77684,58236],{"class":1950},[101,77686,77622],{"class":111},[101,77688,77532],{"class":170},[101,77690,77691,77693,77695,77697],{"class":103,"line":1166},[101,77692,77521],{"class":111},[101,77694,58236],{"class":1950},[101,77696,77633],{"class":111},[101,77698,77547],{"class":170},[101,77700,77701,77703,77705,77707],{"class":103,"line":1181},[101,77702,77521],{"class":111},[101,77704,58236],{"class":1950},[101,77706,77644],{"class":111},[101,77708,77581],{"class":170},[101,77710,77711,77713,77715,77718],{"class":103,"line":1187},[101,77712,77521],{"class":111},[101,77714,58236],{"class":1950},[101,77716,77717],{"class":111},"(d)",[101,77719,77720],{"class":170},"  \u002F\u002F4\n",[72,77722,77724],{"id":77723},"_462-对象解构","4.6.2 对象解构",[10,77726,77727],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[10,77729,77730],{},"用的非常非常多！！！！！！",[21986,77732,77734],{"id":77733},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[10,77736,77737],{},"基本语法：",[55,77739,77740,77743,77746,77749],{},[58,77741,77742],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[58,77744,77745],{},"对象属性的值将被赋值给与属性名相同的变量",[58,77747,77748],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[58,77750,77751],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[92,77753,77755],{"className":50622,"code":77754,"language":50624,"meta":20,"style":20},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[98,77756,77757,77762,77767,77772,77776],{"__ignoreMap":20},[101,77758,77759],{"class":103,"line":104},[101,77760,77761],{"class":111},"const obj = {\n",[101,77763,77764],{"class":103,"line":21},[101,77765,77766],{"class":111},"   uname: 'pink老师',\n",[101,77768,77769],{"class":103,"line":1166},[101,77770,77771],{"class":111},"   age: 18,\n",[101,77773,77774],{"class":103,"line":1181},[101,77775,1552],{"class":111},[101,77777,77778],{"class":103,"line":1187},[101,77779,77780],{"class":111},"const { uname, age } = obj\n",[10,77782,77783],{},"上方代码这样写等价于：",[10,77785,77786],{},"const uname等价于obj.uname",[10,77788,77789],{},"变量名可以重新改名：",[10,77791,77792],{},"const uname='red老师'",[10,77794,77795],{},"const user={",[10,77797,77798],{},"  uname:'pink老师',",[10,77800,77801],{},"  age:18",[10,77803,1057],{},[10,77805,77806],{},"const {uname,age}=user",[10,77808,77809],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[10,77811,77812],{},"const {旧变量名：新变量名}=对象",[10,77814,77815],{},"const {uname:username,age}=user",[21986,77817,77819],{"id":77818},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[10,77821,77822],{},[1449,77823],{"alt":20,"src":77824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21986,77826,77828],{"id":77827},"_4623-多级对象解构","4.6.2.3 多级对象解构",[10,77830,77831],{},[1449,77832],{"alt":20,"src":77833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[92,77835,77837],{"className":53056,"code":77836,"language":53058,"meta":20,"style":20},"  \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",[98,77838,77839,77847,77852,77857,77862,77867,77872,77877,77882,77887,77891,77896,77901],{"__ignoreMap":20},[101,77840,77841,77843,77845],{"class":103,"line":104},[101,77842,52133],{"class":111},[101,77844,51802],{"class":51289},[101,77846,51296],{"class":111},[101,77848,77849],{"class":103,"line":21},[101,77850,77851],{"class":111},"    const pig = {\n",[101,77853,77854],{"class":103,"line":1166},[101,77855,77856],{"class":111},"      name: '佩奇',\n",[101,77858,77859],{"class":103,"line":1181},[101,77860,77861],{"class":111},"      family: {\n",[101,77863,77864],{"class":103,"line":1187},[101,77865,77866],{"class":111},"        mother: '猪妈妈',\n",[101,77868,77869],{"class":103,"line":1201},[101,77870,77871],{"class":111},"        father: '猪爸爸',\n",[101,77873,77874],{"class":103,"line":1207},[101,77875,77876],{"class":111},"        sister: '乔治'\n",[101,77878,77879],{"class":103,"line":1298},[101,77880,77881],{"class":111},"      },\n",[101,77883,77884],{"class":103,"line":1304},[101,77885,77886],{"class":111},"      age: 6\n",[101,77888,77889],{"class":103,"line":1316},[101,77890,2174],{"class":111},[101,77892,77893],{"class":103,"line":1599},[101,77894,77895],{"class":111},"    \u002F\u002F 多级对象解构\n",[101,77897,77898],{"class":103,"line":1604},[101,77899,77900],{"class":111},"    const { name, family: { mother, father, sister }, age } = pig\n",[101,77902,77903,77905,77907],{"class":103,"line":1610},[101,77904,52406],{"class":111},[101,77906,51802],{"class":51289},[101,77908,51296],{"class":111},[10,77910,77911],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[92,77913,77916],{"className":77914,"code":77915,"language":76436,"meta":20,"style":20},"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",[98,77917,77918,77923,77934,77946,77958,77967,77971,77982,77994,78004,78009,78013,78023,78034,78043,78047,78051,78062,78073,78082,78086,78091],{"__ignoreMap":20},[101,77919,77920],{"class":103,"line":104},[101,77921,77922],{"class":170},"    \u002F\u002F 这是后台传递过来的数据\n",[101,77924,77925,77927,77930,77932],{"class":103,"line":21},[101,77926,11209],{"class":107},[101,77928,77929],{"class":111}," msg ",[101,77931,157],{"class":107},[101,77933,15560],{"class":111},[101,77935,77936,77939,77941,77944],{"class":103,"line":1166},[101,77937,77938],{"class":216},"      \"code\"",[101,77940,970],{"class":107},[101,77942,77943],{"class":160}," 200",[101,77945,31455],{"class":111},[101,77947,77948,77951,77953,77956],{"class":103,"line":1181},[101,77949,77950],{"class":216},"      \"msg\"",[101,77952,970],{"class":107},[101,77954,77955],{"class":216}," \"获取新闻列表成功\"",[101,77957,31455],{"class":111},[101,77959,77960,77963,77965],{"class":103,"line":1187},[101,77961,77962],{"class":216},"      \"data\"",[101,77964,970],{"class":107},[101,77966,55436],{"class":111},[101,77968,77969],{"class":103,"line":1201},[101,77970,2497],{"class":111},[101,77972,77973,77976,77978,77980],{"class":103,"line":1207},[101,77974,77975],{"class":216},"          \"id\"",[101,77977,970],{"class":107},[101,77979,25107],{"class":160},[101,77981,31455],{"class":111},[101,77983,77984,77987,77989,77992],{"class":103,"line":1298},[101,77985,77986],{"class":216},"          \"title\"",[101,77988,970],{"class":107},[101,77990,77991],{"class":216}," \"5G商用自己，三大运用商收入下降\"",[101,77993,31455],{"class":111},[101,77995,77996,77999,78001],{"class":103,"line":1304},[101,77997,77998],{"class":216},"          \"count\"",[101,78000,970],{"class":107},[101,78002,78003],{"class":160}," 58\n",[101,78005,78006],{"class":103,"line":1316},[101,78007,78008],{"class":111},"        },\n",[101,78010,78011],{"class":103,"line":1599},[101,78012,2497],{"class":111},[101,78014,78015,78017,78019,78021],{"class":103,"line":1604},[101,78016,77975],{"class":216},[101,78018,970],{"class":107},[101,78020,14743],{"class":160},[101,78022,31455],{"class":111},[101,78024,78025,78027,78029,78032],{"class":103,"line":1610},[101,78026,77986],{"class":216},[101,78028,970],{"class":107},[101,78030,78031],{"class":216}," \"国际媒体头条速览\"",[101,78033,31455],{"class":111},[101,78035,78036,78038,78040],{"class":103,"line":1615},[101,78037,77998],{"class":216},[101,78039,970],{"class":107},[101,78041,78042],{"class":160}," 56\n",[101,78044,78045],{"class":103,"line":1629},[101,78046,78008],{"class":111},[101,78048,78049],{"class":103,"line":1634},[101,78050,2497],{"class":111},[101,78052,78053,78055,78057,78060],{"class":103,"line":1640},[101,78054,77975],{"class":216},[101,78056,970],{"class":107},[101,78058,78059],{"class":160}," 3",[101,78061,31455],{"class":111},[101,78063,78064,78066,78068,78071],{"class":103,"line":1661},[101,78065,77986],{"class":216},[101,78067,970],{"class":107},[101,78069,78070],{"class":216}," \"乌克兰和俄罗斯持续冲突\"",[101,78072,31455],{"class":111},[101,78074,78075,78077,78079],{"class":103,"line":1666},[101,78076,77998],{"class":216},[101,78078,970],{"class":107},[101,78080,78081],{"class":160}," 1669\n",[101,78083,78084],{"class":103,"line":1680},[101,78085,78008],{"class":111},[101,78087,78088],{"class":103,"line":1685},[101,78089,78090],{"class":111},"      ]\n",[101,78092,78093],{"class":103,"line":1714},[101,78094,2174],{"class":111},[10,78096,78097],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[10,78099,78100],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[10,78102,78103],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[10,78105,78106],{},"function({data}) {",[10,78108,78109],{},"console.log(data)",[10,78111,1057],{},[10,78113,78114],{},"render(msg)",[10,78116,78117],{},"实参传递给形参的时候解构了",[10,78119,78120],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[10,78122,78123],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[10,78125,78126],{},"function render({data:mydata}) {",[10,78128,78129],{},"  console.log(data)",[10,78131,1057],{},[72,78133,78135],{"id":78134},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[10,78137,78138],{},"有两种情况：一个是数组结构，一个是立即执行函数",[55,78140,78141],{},[58,78142,78143],{},"如果对一个数组进行遍历，有两种方式：",[10,78145,78146],{},"①法1",[10,78148,78149],{},"const arr=[1,2,3]",[10,78151,78152],{},"arr.map(function(item,index) {",[10,78154,78155],{},"  console.log(item)",[10,78157,52453],{},[10,78159,78160],{},[1449,78161],{"alt":20,"src":78162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[10,78164,78165],{},"②法2",[10,78167,78168],{},"const str='pink'",[10,78170,78171],{},"[1,2,3].map(function(item,index) {",[10,78173,78174],{},"console.log(item)",[10,78176,52453],{},[10,78178,78179],{},[1449,78180],{"alt":20,"src":78181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[10,78183,78184],{},"此时会报错",[10,78186,78187],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[10,78189,78174],{},[10,78191,52453],{},[10,78193,78194],{},"内部会当成这样处理，所以我们用分号进行隔开",[43,78196,78198],{"id":78197},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[10,78200,78201],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[10,78203,78204],{},"可以理解为加强版的for循环",[10,78206,78207],{},[1449,78208],{"alt":20,"src":78209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[10,78211,78212],{},"里边不写return，不返回数组，只遍历不返回",[10,78214,78215],{},"map是返回数组",[10,78217,78218],{},"forEach主要用于遍历数组对象",[92,78220,78222],{"className":53056,"code":78221,"language":53058,"meta":20,"style":20},"  \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",[98,78223,78224,78232,78237,78242,78247,78252,78256,78261],{"__ignoreMap":20},[101,78225,78226,78228,78230],{"class":103,"line":104},[101,78227,52133],{"class":111},[101,78229,51802],{"class":51289},[101,78231,51296],{"class":111},[101,78233,78234],{"class":103,"line":21},[101,78235,78236],{"class":111},"    const arr = ['red', 'green', 'pink']\n",[101,78238,78239],{"class":103,"line":1166},[101,78240,78241],{"class":111},"    const result = arr.forEach(function (item, index) {\n",[101,78243,78244],{"class":103,"line":1181},[101,78245,78246],{"class":111},"      console.log(item)\n",[101,78248,78249],{"class":103,"line":1187},[101,78250,78251],{"class":111},"      console.log(index)\n",[101,78253,78254],{"class":103,"line":1201},[101,78255,33450],{"class":111},[101,78257,78258],{"class":103,"line":1207},[101,78259,78260],{"class":111},"    console.log(result)\n",[101,78262,78263,78265,78267],{"class":103,"line":1298},[101,78264,52406],{"class":111},[101,78266,51802],{"class":51289},[101,78268,51296],{"class":111},[10,78270,78271],{},[1449,78272],{"alt":20,"src":78273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[43,78275,78277],{"id":78276},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[10,78279,78280],{},[1449,78281],{"alt":20,"src":78282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[10,78284,78285],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[92,78287,78289],{"className":53056,"code":78288,"language":53058,"meta":20,"style":20},"\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",[98,78290,78291,78299,78307,78312,78317,78321,78325,78330,78334,78339,78347],{"__ignoreMap":20},[101,78292,78293,78295,78297],{"class":103,"line":104},[101,78294,1021],{"class":111},[101,78296,51789],{"class":51289},[101,78298,51296],{"class":111},[101,78300,78301,78303,78305],{"class":103,"line":21},[101,78302,52133],{"class":111},[101,78304,51802],{"class":51289},[101,78306,51296],{"class":111},[101,78308,78309],{"class":103,"line":1166},[101,78310,78311],{"class":111},"    const arr = [10, 20, 30]\n",[101,78313,78314],{"class":103,"line":1181},[101,78315,78316],{"class":111},"    const newArr = arr.filter(function (item, index) {\n",[101,78318,78319],{"class":103,"line":1187},[101,78320,78246],{"class":111},[101,78322,78323],{"class":103,"line":1201},[101,78324,78251],{"class":111},[101,78326,78327],{"class":103,"line":1207},[101,78328,78329],{"class":111},"      return item >= 20\n",[101,78331,78332],{"class":103,"line":1298},[101,78333,33450],{"class":111},[101,78335,78336],{"class":103,"line":1304},[101,78337,78338],{"class":111},"    console.log(newArr)\n",[101,78340,78341,78343,78345],{"class":103,"line":1316},[101,78342,52406],{"class":111},[101,78344,51802],{"class":51289},[101,78346,51296],{"class":111},[101,78348,78349,78351,78353],{"class":103,"line":1599},[101,78350,51774],{"class":111},[101,78352,51789],{"class":51289},[101,78354,51296],{"class":111},[10,78356,78357],{},"这个也可以写成箭头函数：",[92,78359,78361],{"className":50622,"code":78360,"language":50624,"meta":20,"style":20},"const newArr = arr.filter(item => item >= 20)\n",[98,78362,78363],{"__ignoreMap":20},[101,78364,78365],{"class":103,"line":104},[101,78366,78360],{"class":111},[43,78368,78370],{"id":78369},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[10,78372,78373],{},[1449,78374],{"alt":20,"src":78375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[10,78377,78378],{},"步骤：",[10,78380,78381],{},"①：渲染页面模块",[1118,78383,78384,78387],{},[58,78385,78386],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[58,78388,78389],{},"用forEach+字符串的形式",[10,78391,78392],{},"②：点击不同需求，显示不同页面内容",[1118,78394,78395,78398,78401,78404,78407],{},[58,78396,78397],{},"点击采取事件委托方式 .filter",[58,78399,78400],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[58,78402,78403],{},"筛选条件是根据点击的 data-index 来判断",[58,78405,78406],{},"可以使用对象解构，把事件对象解构",[58,78408,78409],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[92,78411,78413],{"className":50622,"code":78412,"language":50624,"meta":20,"style":20},"\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",[98,78414,78415,78425,78439,78443,78451,78465,78485,78497,78505,78511,78521,78531,78541,78545,78549,78555,78568,78580,78590,78602,78606,78610,78617,78630,78642,78659,78677,78690,78694,78698,78710,78720,78724,78728,78735,78776,78803,78813,78817,78821,78829,78841,78845,78849,78857,78869,78881,78892,78896,78900,78909,78921,78932,78936,78940,78949,78961,78973,78977,78981,78988,78998,79010,79022,79037,79041,79045,79053,79069,79079,79089,79099,79111,79115,79119,79129,79140,79150,79154,79162,79170,79174,79182,79197,79223,79248,79273,79292,79300,79314,79319,79324,79329,79334,79339,79347,79355,79360,79371,79376,79386,79396,79406,79416,79420,79424,79433,79442,79451,79460,79464,79468,79477,79486,79495,79504,79508,79512,79521,79530,79539,79548,79552,79556,79565,79574,79583,79592,79596,79600,79609,79618,79627,79636,79640,79644,79653,79662,79671,79680,79684,79688,79697,79706,79714,79723,79727,79731,79735,79740,79752,79757,79769,79773,79790,79818,79827,79832,79842,79852,79861,79866,79871,79875,79880,79897,79901,79906,79914,79919,79946,79951,79971,79976,79988,79993,79998,80003,80014,80028,80065,80083,80116,80133,80157,80161,80166,80172,80176,80180,80184,80192,80200,80204],{"__ignoreMap":20},[101,78416,78417,78419,78421,78423],{"class":103,"line":104},[101,78418,51286],{"class":111},[101,78420,51290],{"class":51289},[101,78422,51293],{"class":1950},[101,78424,51296],{"class":111},[101,78426,78427,78429,78431,78433,78435,78437],{"class":103,"line":21},[101,78428,1021],{"class":111},[101,78430,50624],{"class":51289},[101,78432,51305],{"class":1950},[101,78434,157],{"class":111},[101,78436,51310],{"class":216},[101,78438,51296],{"class":111},[101,78440,78441],{"class":103,"line":1166},[101,78442,2387],{"emptyLinePlaceholder":27},[101,78444,78445,78447,78449],{"class":103,"line":1181},[101,78446,1021],{"class":111},[101,78448,51323],{"class":51289},[101,78450,51296],{"class":111},[101,78452,78453,78455,78457,78459,78461,78463],{"class":103,"line":1187},[101,78454,52133],{"class":111},[101,78456,51333],{"class":51289},[101,78458,51336],{"class":1950},[101,78460,157],{"class":111},[101,78462,51341],{"class":216},[101,78464,51296],{"class":111},[101,78466,78467,78469,78471,78473,78475,78477,78479,78481,78483],{"class":103,"line":1201},[101,78468,52133],{"class":111},[101,78470,51333],{"class":51289},[101,78472,14908],{"class":1950},[101,78474,157],{"class":111},[101,78476,51380],{"class":216},[101,78478,51360],{"class":1950},[101,78480,157],{"class":111},[101,78482,51387],{"class":216},[101,78484,51296],{"class":111},[101,78486,78487,78489,78491,78493,78495],{"class":103,"line":1207},[101,78488,52133],{"class":111},[101,78490,51396],{"class":51289},[101,78492,51399],{"class":111},[101,78494,51396],{"class":51289},[101,78496,51296],{"class":111},[101,78498,78499,78501,78503],{"class":103,"line":1298},[101,78500,52133],{"class":111},[101,78502,5114],{"class":51289},[101,78504,51296],{"class":111},[101,78506,78507,78509],{"class":103,"line":1304},[101,78508,6391],{"class":51289},[101,78510,15560],{"class":111},[101,78512,78513,78515,78517,78519],{"class":103,"line":1316},[101,78514,54684],{"class":160},[101,78516,51426],{"class":111},[101,78518,303],{"class":160},[101,78520,1277],{"class":111},[101,78522,78523,78525,78527,78529],{"class":103,"line":1599},[101,78524,54695],{"class":160},[101,78526,51426],{"class":111},[101,78528,303],{"class":160},[101,78530,1277],{"class":111},[101,78532,78533,78535,78537,78539],{"class":103,"line":1604},[101,78534,72585],{"class":160},[101,78536,51426],{"class":111},[101,78538,60494],{"class":160},[101,78540,1277],{"class":111},[101,78542,78543],{"class":103,"line":1610},[101,78544,2174],{"class":111},[101,78546,78547],{"class":103,"line":1615},[101,78548,2387],{"emptyLinePlaceholder":27},[101,78550,78551,78553],{"class":103,"line":1629},[101,78552,62112],{"class":1950},[101,78554,15560],{"class":111},[101,78556,78557,78559,78561,78564,78566],{"class":103,"line":1634},[101,78558,54760],{"class":160},[101,78560,51426],{"class":111},[101,78562,78563],{"class":160},"990",[101,78565,51481],{"class":107},[101,78567,1277],{"class":111},[101,78569,78570,78572,78574,78576,78578],{"class":103,"line":1640},[101,78571,54695],{"class":160},[101,78573,51426],{"class":111},[101,78575,303],{"class":160},[101,78577,51545],{"class":160},[101,78579,1277],{"class":111},[101,78581,78582,78584,78586,78588],{"class":103,"line":1661},[101,78583,54998],{"class":160},[101,78585,51426],{"class":111},[101,78587,51466],{"class":160},[101,78589,1277],{"class":111},[101,78591,78592,78595,78597,78600],{"class":103,"line":1666},[101,78593,78594],{"class":160},"      flex-wrap",[101,78596,51426],{"class":111},[101,78598,78599],{"class":160},"wrap",[101,78601,1277],{"class":111},[101,78603,78604],{"class":103,"line":1680},[101,78605,2174],{"class":111},[101,78607,78608],{"class":103,"line":1685},[101,78609,2387],{"emptyLinePlaceholder":27},[101,78611,78612,78615],{"class":103,"line":1714},[101,78613,78614],{"class":1950},"    .item",[101,78616,15560],{"class":111},[101,78618,78619,78621,78623,78626,78628],{"class":103,"line":1719},[101,78620,54760],{"class":160},[101,78622,51426],{"class":111},[101,78624,78625],{"class":160},"240",[101,78627,51481],{"class":107},[101,78629,1277],{"class":111},[101,78631,78632,78634,78636,78638,78640],{"class":103,"line":1736},[101,78633,61989],{"class":160},[101,78635,51426],{"class":111},[101,78637,557],{"class":160},[101,78639,51481],{"class":107},[101,78641,1277],{"class":111},[101,78643,78644,78646,78648,78650,78652,78655,78657],{"class":103,"line":1741},[101,78645,54684],{"class":160},[101,78647,51426],{"class":111},[101,78649,811],{"class":160},[101,78651,51481],{"class":107},[101,78653,78654],{"class":160}," 30",[101,78656,51481],{"class":107},[101,78658,1277],{"class":111},[101,78660,78661,78663,78665,78667,78670,78673,78675],{"class":103,"line":1746},[101,78662,61849],{"class":160},[101,78664,51426],{"class":111},[101,78666,28110],{"class":160},[101,78668,78669],{"class":160}," ease",[101,78671,78672],{"class":160}," .5",[101,78674,806],{"class":107},[101,78676,1277],{"class":111},[101,78678,78679,78682,78684,78686,78688],{"class":103,"line":1751},[101,78680,78681],{"class":160},"      margin-bottom",[101,78683,51426],{"class":111},[101,78685,811],{"class":160},[101,78687,51481],{"class":107},[101,78689,1277],{"class":111},[101,78691,78692],{"class":103,"line":1765},[101,78693,2174],{"class":111},[101,78695,78696],{"class":103,"line":1770},[101,78697,2387],{"emptyLinePlaceholder":27},[101,78699,78700,78703,78705,78708],{"class":103,"line":2564},[101,78701,78702],{"class":1950},"    .item:nth-child",[101,78704,112],{"class":111},[101,78706,78707],{"class":160},"4n",[101,78709,12430],{"class":111},[101,78711,78712,78714,78716,78718],{"class":103,"line":2578},[101,78713,61989],{"class":160},[101,78715,51426],{"class":111},[101,78717,303],{"class":160},[101,78719,1277],{"class":111},[101,78721,78722],{"class":103,"line":2586},[101,78723,2174],{"class":111},[101,78725,78726],{"class":103,"line":2591},[101,78727,2387],{"emptyLinePlaceholder":27},[101,78729,78730,78733],{"class":103,"line":2597},[101,78731,78732],{"class":1950},"    .item:hover",[101,78734,15560],{"class":111},[101,78736,78737,78740,78742,78744,78746,78748,78750,78752,78754,78757,78759,78761,78763,78765,78767,78769,78771,78774],{"class":103,"line":2603},[101,78738,78739],{"class":160},"      box-shadow",[101,78741,51426],{"class":111},[101,78743,303],{"class":160},[101,78745,51481],{"class":107},[101,78747,4080],{"class":160},[101,78749,51481],{"class":107},[101,78751,2135],{"class":160},[101,78753,51481],{"class":107},[101,78755,78756],{"class":160}," rgba",[101,78758,112],{"class":111},[101,78760,303],{"class":160},[101,78762,12423],{"class":111},[101,78764,303],{"class":160},[101,78766,12423],{"class":111},[101,78768,303],{"class":160},[101,78770,12423],{"class":111},[101,78772,78773],{"class":160},".2",[101,78775,2706],{"class":111},[101,78777,78778,78781,78783,78786,78788,78790,78792,78795,78797,78799,78801],{"class":103,"line":2608},[101,78779,78780],{"class":160},"      transform",[101,78782,51426],{"class":111},[101,78784,78785],{"class":160},"translate3d",[101,78787,112],{"class":111},[101,78789,303],{"class":160},[101,78791,12423],{"class":111},[101,78793,78794],{"class":160},"-4",[101,78796,51481],{"class":107},[101,78798,12423],{"class":111},[101,78800,303],{"class":160},[101,78802,2706],{"class":111},[101,78804,78805,78807,78809,78811],{"class":103,"line":7936},[101,78806,62014],{"class":160},[101,78808,51426],{"class":111},[101,78810,62019],{"class":160},[101,78812,1277],{"class":111},[101,78814,78815],{"class":103,"line":7960},[101,78816,2174],{"class":111},[101,78818,78819],{"class":103,"line":7965},[101,78820,2387],{"emptyLinePlaceholder":27},[101,78822,78823,78825,78827],{"class":103,"line":7971},[101,78824,78614],{"class":1950},[101,78826,55604],{"class":51289},[101,78828,15560],{"class":111},[101,78830,78831,78833,78835,78837,78839],{"class":103,"line":7998},[101,78832,54760],{"class":160},[101,78834,51426],{"class":111},[101,78836,422],{"class":160},[101,78838,439],{"class":107},[101,78840,1277],{"class":111},[101,78842,78843],{"class":103,"line":8003},[101,78844,2174],{"class":111},[101,78846,78847],{"class":103,"line":8009},[101,78848,2387],{"emptyLinePlaceholder":27},[101,78850,78851,78853,78855],{"class":103,"line":8021},[101,78852,78614],{"class":1950},[101,78854,62293],{"class":1950},[101,78856,15560],{"class":111},[101,78858,78859,78861,78863,78865,78867],{"class":103,"line":8033},[101,78860,54911],{"class":160},[101,78862,51426],{"class":111},[101,78864,761],{"class":160},[101,78866,51481],{"class":107},[101,78868,1277],{"class":111},[101,78870,78871,78873,78875,78877,78879],{"class":103,"line":8045},[101,78872,78681],{"class":160},[101,78874,51426],{"class":111},[101,78876,557],{"class":160},[101,78878,51481],{"class":107},[101,78880,1277],{"class":111},[101,78882,78883,78885,78887,78890],{"class":103,"line":9704},[101,78884,57405],{"class":160},[101,78886,51426],{"class":111},[101,78888,78889],{"class":160},"#666",[101,78891,1277],{"class":111},[101,78893,78894],{"class":103,"line":9729},[101,78895,2174],{"class":111},[101,78897,78898],{"class":103,"line":9752},[101,78899,2387],{"emptyLinePlaceholder":27},[101,78901,78902,78904,78907],{"class":103,"line":9776},[101,78903,78614],{"class":1950},[101,78905,78906],{"class":1950}," .price",[101,78908,15560],{"class":111},[101,78910,78911,78913,78915,78917,78919],{"class":103,"line":9781},[101,78912,54911],{"class":160},[101,78914,51426],{"class":111},[101,78916,861],{"class":160},[101,78918,51481],{"class":107},[101,78920,1277],{"class":111},[101,78922,78923,78925,78927,78930],{"class":103,"line":9786},[101,78924,57405],{"class":160},[101,78926,51426],{"class":111},[101,78928,78929],{"class":160},"firebrick",[101,78931,1277],{"class":111},[101,78933,78934],{"class":103,"line":9791},[101,78935,2174],{"class":111},[101,78937,78938],{"class":103,"line":9800},[101,78939,2387],{"emptyLinePlaceholder":27},[101,78941,78942,78944,78947],{"class":103,"line":9805},[101,78943,78614],{"class":1950},[101,78945,78946],{"class":1950}," .price::before",[101,78948,15560],{"class":111},[101,78950,78951,78954,78956,78959],{"class":103,"line":9811},[101,78952,78953],{"class":160},"      content",[101,78955,51426],{"class":111},[101,78957,78958],{"class":216},"'￥'",[101,78960,1277],{"class":111},[101,78962,78963,78965,78967,78969,78971],{"class":103,"line":9832},[101,78964,54911],{"class":160},[101,78966,51426],{"class":111},[101,78968,660],{"class":160},[101,78970,51481],{"class":107},[101,78972,1277],{"class":111},[101,78974,78975],{"class":103,"line":9838},[101,78976,2174],{"class":111},[101,78978,78979],{"class":103,"line":9852},[101,78980,2387],{"emptyLinePlaceholder":27},[101,78982,78983,78986],{"class":103,"line":9858},[101,78984,78985],{"class":1950},"    .filter",[101,78987,15560],{"class":111},[101,78989,78990,78992,78994,78996],{"class":103,"line":9885},[101,78991,54998],{"class":160},[101,78993,51426],{"class":111},[101,78995,51466],{"class":160},[101,78997,1277],{"class":111},[101,78999,79000,79002,79004,79006,79008],{"class":103,"line":9894},[101,79001,54760],{"class":160},[101,79003,51426],{"class":111},[101,79005,78563],{"class":160},[101,79007,51481],{"class":107},[101,79009,1277],{"class":111},[101,79011,79012,79014,79016,79018,79020],{"class":103,"line":9900},[101,79013,54695],{"class":160},[101,79015,51426],{"class":111},[101,79017,303],{"class":160},[101,79019,51545],{"class":160},[101,79021,1277],{"class":111},[101,79023,79024,79026,79028,79030,79032,79034],{"class":103,"line":9908},[101,79025,54684],{"class":160},[101,79027,51426],{"class":111},[101,79029,767],{"class":160},[101,79031,51481],{"class":107},[101,79033,78654],{"class":160},[101,79035,79036],{"class":107},"px\n",[101,79038,79039],{"class":103,"line":9913},[101,79040,2174],{"class":111},[101,79042,79043],{"class":103,"line":16592},[101,79044,2387],{"emptyLinePlaceholder":27},[101,79046,79047,79049,79051],{"class":103,"line":16598},[101,79048,78985],{"class":1950},[101,79050,1385],{"class":51289},[101,79052,15560],{"class":111},[101,79054,79055,79057,79059,79061,79063,79065,79067],{"class":103,"line":16621},[101,79056,54684],{"class":160},[101,79058,51426],{"class":111},[101,79060,557],{"class":160},[101,79062,51481],{"class":107},[101,79064,8938],{"class":160},[101,79066,51481],{"class":107},[101,79068,1277],{"class":111},[101,79070,79071,79073,79075,79077],{"class":103,"line":16627},[101,79072,61710],{"class":160},[101,79074,51426],{"class":111},[101,79076,61807],{"class":160},[101,79078,1277],{"class":111},[101,79080,79081,79083,79085,79087],{"class":103,"line":16650},[101,79082,57405],{"class":160},[101,79084,51426],{"class":111},[101,79086,78889],{"class":160},[101,79088,1277],{"class":111},[101,79090,79091,79093,79095,79097],{"class":103,"line":16664},[101,79092,63959],{"class":160},[101,79094,51426],{"class":111},[101,79096,54726],{"class":160},[101,79098,1277],{"class":111},[101,79100,79101,79103,79105,79107,79109],{"class":103,"line":16684},[101,79102,61739],{"class":160},[101,79104,51426],{"class":111},[101,79106,811],{"class":160},[101,79108,51481],{"class":107},[101,79110,1277],{"class":111},[101,79112,79113],{"class":103,"line":16690},[101,79114,2174],{"class":111},[101,79116,79117],{"class":103,"line":16701},[101,79118,2387],{"emptyLinePlaceholder":27},[101,79120,79121,79123,79125,79127],{"class":103,"line":16724},[101,79122,78985],{"class":1950},[101,79124,1385],{"class":51289},[101,79126,61889],{"class":1950},[101,79128,15560],{"class":111},[101,79130,79131,79133,79135,79138],{"class":103,"line":16746},[101,79132,54873],{"class":160},[101,79134,51426],{"class":111},[101,79136,79137],{"class":160},"#05943c",[101,79139,1277],{"class":111},[101,79141,79142,79144,79146,79148],{"class":103,"line":16751},[101,79143,57405],{"class":160},[101,79145,51426],{"class":111},[101,79147,60831],{"class":160},[101,79149,1277],{"class":111},[101,79151,79152],{"class":103,"line":16757},[101,79153,2174],{"class":111},[101,79155,79156,79158,79160],{"class":103,"line":16771},[101,79157,52406],{"class":111},[101,79159,5114],{"class":51289},[101,79161,51296],{"class":111},[101,79163,79164,79166,79168],{"class":103,"line":16784},[101,79165,51774],{"class":111},[101,79167,51323],{"class":51289},[101,79169,51296],{"class":111},[101,79171,79172],{"class":103,"line":16789},[101,79173,2387],{"emptyLinePlaceholder":27},[101,79175,79176,79178,79180],{"class":103,"line":16803},[101,79177,1021],{"class":111},[101,79179,51789],{"class":51289},[101,79181,51296],{"class":111},[101,79183,79184,79186,79188,79190,79192,79195],{"class":103,"line":16808},[101,79185,52133],{"class":111},[101,79187,51600],{"class":51289},[101,79189,53475],{"class":1950},[101,79191,157],{"class":111},[101,79193,79194],{"class":216},"\"filter\"",[101,79196,51296],{"class":111},[101,79198,79199,79201,79203,79205,79207,79209,79212,79214,79216,79219,79221],{"class":103,"line":16814},[101,79200,51330],{"class":111},[101,79202,14],{"class":51289},[101,79204,61046],{"class":1950},[101,79206,157],{"class":111},[101,79208,61051],{"class":216},[101,79210,79211],{"class":1950}," data-index",[101,79213,157],{"class":111},[101,79215,3665],{"class":216},[101,79217,79218],{"class":111},">0-100元\u003C\u002F",[101,79220,14],{"class":51289},[101,79222,51296],{"class":111},[101,79224,79225,79227,79229,79231,79233,79235,79237,79239,79241,79244,79246],{"class":103,"line":16819},[101,79226,51330],{"class":111},[101,79228,14],{"class":51289},[101,79230,61046],{"class":1950},[101,79232,157],{"class":111},[101,79234,61051],{"class":216},[101,79236,79211],{"class":1950},[101,79238,157],{"class":111},[101,79240,3688],{"class":216},[101,79242,79243],{"class":111},">100-300元\u003C\u002F",[101,79245,14],{"class":51289},[101,79247,51296],{"class":111},[101,79249,79250,79252,79254,79256,79258,79260,79262,79264,79266,79269,79271],{"class":103,"line":16833},[101,79251,51330],{"class":111},[101,79253,14],{"class":51289},[101,79255,61046],{"class":1950},[101,79257,157],{"class":111},[101,79259,61051],{"class":216},[101,79261,79211],{"class":1950},[101,79263,157],{"class":111},[101,79265,3701],{"class":216},[101,79267,79268],{"class":111},">300元以上\u003C\u002F",[101,79270,14],{"class":51289},[101,79272,51296],{"class":111},[101,79274,79275,79277,79279,79281,79283,79285,79288,79290],{"class":103,"line":16838},[101,79276,51330],{"class":111},[101,79278,14],{"class":51289},[101,79280,61046],{"class":1950},[101,79282,157],{"class":111},[101,79284,61051],{"class":216},[101,79286,79287],{"class":111},">全部区间\u003C\u002F",[101,79289,14],{"class":51289},[101,79291,51296],{"class":111},[101,79293,79294,79296,79298],{"class":103,"line":16843},[101,79295,52406],{"class":111},[101,79297,51600],{"class":51289},[101,79299,51296],{"class":111},[101,79301,79302,79304,79306,79308,79310,79312],{"class":103,"line":16857},[101,79303,52133],{"class":111},[101,79305,51600],{"class":51289},[101,79307,53475],{"class":1950},[101,79309,157],{"class":111},[101,79311,62597],{"class":216},[101,79313,51296],{"class":111},[101,79315,79316],{"class":103,"line":16869},[101,79317,79318],{"class":170},"    \u003C!-- \u003Cdiv class=\"item\">\n",[101,79320,79321],{"class":103,"line":16874},[101,79322,79323],{"class":170},"      \u003Cimg src=\"\" alt=\"\">\n",[101,79325,79326],{"class":103,"line":16887},[101,79327,79328],{"class":170},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[101,79330,79331],{"class":103,"line":16892},[101,79332,79333],{"class":170},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[101,79335,79336],{"class":103,"line":16897},[101,79337,79338],{"class":170},"    \u003C\u002Fdiv> -->\n",[101,79340,79341,79343,79345],{"class":103,"line":16902},[101,79342,52406],{"class":111},[101,79344,51600],{"class":51289},[101,79346,51296],{"class":111},[101,79348,79349,79351,79353],{"class":103,"line":16915},[101,79350,52133],{"class":111},[101,79352,51802],{"class":51289},[101,79354,51296],{"class":111},[101,79356,79357],{"class":103,"line":16920},[101,79358,79359],{"class":170},"    \u002F\u002F 2. 初始化数据\n",[101,79361,79362,79364,79367,79369],{"class":103,"line":32622},[101,79363,11209],{"class":107},[101,79365,79366],{"class":160}," goodsList",[101,79368,13552],{"class":107},[101,79370,55436],{"class":111},[101,79372,79373],{"class":103,"line":32628},[101,79374,79375],{"class":111},"      {\n",[101,79377,79378,79381,79384],{"class":103,"line":32634},[101,79379,79380],{"class":111},"        id: ",[101,79382,79383],{"class":216},"'4001172'",[101,79385,31455],{"class":111},[101,79387,79388,79391,79394],{"class":103,"line":32640},[101,79389,79390],{"class":111},"        name: ",[101,79392,79393],{"class":216},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[101,79395,31455],{"class":111},[101,79397,79398,79401,79404],{"class":103,"line":32646},[101,79399,79400],{"class":111},"        price: ",[101,79402,79403],{"class":216},"'289.00'",[101,79405,31455],{"class":111},[101,79407,79408,79411,79414],{"class":103,"line":32657},[101,79409,79410],{"class":111},"        picture: ",[101,79412,79413],{"class":216},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[101,79415,31455],{"class":111},[101,79417,79418],{"class":103,"line":32663},[101,79419,77881],{"class":111},[101,79421,79422],{"class":103,"line":32683},[101,79423,79375],{"class":111},[101,79425,79426,79428,79431],{"class":103,"line":32689},[101,79427,79380],{"class":111},[101,79429,79430],{"class":216},"'4001594'",[101,79432,31455],{"class":111},[101,79434,79435,79437,79440],{"class":103,"line":32700},[101,79436,79390],{"class":111},[101,79438,79439],{"class":216},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[101,79441,31455],{"class":111},[101,79443,79444,79446,79449],{"class":103,"line":32706},[101,79445,79400],{"class":111},[101,79447,79448],{"class":216},"'288.00'",[101,79450,31455],{"class":111},[101,79452,79453,79455,79458],{"class":103,"line":32712},[101,79454,79410],{"class":111},[101,79456,79457],{"class":216},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[101,79459,31455],{"class":111},[101,79461,79462],{"class":103,"line":32718},[101,79463,77881],{"class":111},[101,79465,79466],{"class":103,"line":32724},[101,79467,79375],{"class":111},[101,79469,79470,79472,79475],{"class":103,"line":32730},[101,79471,79380],{"class":111},[101,79473,79474],{"class":216},"'4001009'",[101,79476,31455],{"class":111},[101,79478,79479,79481,79484],{"class":103,"line":32736},[101,79480,79390],{"class":111},[101,79482,79483],{"class":216},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[101,79485,31455],{"class":111},[101,79487,79488,79490,79493],{"class":103,"line":32742},[101,79489,79400],{"class":111},[101,79491,79492],{"class":216},"'109.00'",[101,79494,31455],{"class":111},[101,79496,79497,79499,79502],{"class":103,"line":32762},[101,79498,79410],{"class":111},[101,79500,79501],{"class":216},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[101,79503,31455],{"class":111},[101,79505,79506],{"class":103,"line":32768},[101,79507,77881],{"class":111},[101,79509,79510],{"class":103,"line":32784},[101,79511,79375],{"class":111},[101,79513,79514,79516,79519],{"class":103,"line":32790},[101,79515,79380],{"class":111},[101,79517,79518],{"class":216},"'4001874'",[101,79520,31455],{"class":111},[101,79522,79523,79525,79528],{"class":103,"line":32804},[101,79524,79390],{"class":111},[101,79526,79527],{"class":216},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[101,79529,31455],{"class":111},[101,79531,79532,79534,79537],{"class":103,"line":32810},[101,79533,79400],{"class":111},[101,79535,79536],{"class":216},"'488.00'",[101,79538,31455],{"class":111},[101,79540,79541,79543,79546],{"class":103,"line":32825},[101,79542,79410],{"class":111},[101,79544,79545],{"class":216},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[101,79547,31455],{"class":111},[101,79549,79550],{"class":103,"line":32831},[101,79551,77881],{"class":111},[101,79553,79554],{"class":103,"line":32840},[101,79555,79375],{"class":111},[101,79557,79558,79560,79563],{"class":103,"line":32846},[101,79559,79380],{"class":111},[101,79561,79562],{"class":216},"'4001649'",[101,79564,31455],{"class":111},[101,79566,79567,79569,79572],{"class":103,"line":32855},[101,79568,79390],{"class":111},[101,79570,79571],{"class":216},"'大师监制龙泉青瓷茶叶罐'",[101,79573,31455],{"class":111},[101,79575,79576,79578,79581],{"class":103,"line":32861},[101,79577,79400],{"class":111},[101,79579,79580],{"class":216},"'139.00'",[101,79582,31455],{"class":111},[101,79584,79585,79587,79590],{"class":103,"line":32867},[101,79586,79410],{"class":111},[101,79588,79589],{"class":216},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[101,79591,31455],{"class":111},[101,79593,79594],{"class":103,"line":32876},[101,79595,77881],{"class":111},[101,79597,79598],{"class":103,"line":32882},[101,79599,79375],{"class":111},[101,79601,79602,79604,79607],{"class":103,"line":32893},[101,79603,79380],{"class":111},[101,79605,79606],{"class":216},"'3997185'",[101,79608,31455],{"class":111},[101,79610,79611,79613,79616],{"class":103,"line":32899},[101,79612,79390],{"class":111},[101,79614,79615],{"class":216},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[101,79617,31455],{"class":111},[101,79619,79620,79622,79625],{"class":103,"line":32918},[101,79621,79400],{"class":111},[101,79623,79624],{"class":216},"'108.00'",[101,79626,31455],{"class":111},[101,79628,79629,79631,79634],{"class":103,"line":32924},[101,79630,79410],{"class":111},[101,79632,79633],{"class":216},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[101,79635,31455],{"class":111},[101,79637,79638],{"class":103,"line":32935},[101,79639,77881],{"class":111},[101,79641,79642],{"class":103,"line":32941},[101,79643,79375],{"class":111},[101,79645,79646,79648,79651],{"class":103,"line":32961},[101,79647,79380],{"class":111},[101,79649,79650],{"class":216},"'3997403'",[101,79652,31455],{"class":111},[101,79654,79655,79657,79660],{"class":103,"line":32977},[101,79656,79390],{"class":111},[101,79658,79659],{"class":216},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[101,79661,31455],{"class":111},[101,79663,79664,79666,79669],{"class":103,"line":32983},[101,79665,79400],{"class":111},[101,79667,79668],{"class":216},"'100.00'",[101,79670,31455],{"class":111},[101,79672,79673,79675,79678],{"class":103,"line":32997},[101,79674,79410],{"class":111},[101,79676,79677],{"class":216},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[101,79679,31455],{"class":111},[101,79681,79682],{"class":103,"line":33003},[101,79683,77881],{"class":111},[101,79685,79686],{"class":103,"line":33009},[101,79687,79375],{"class":111},[101,79689,79690,79692,79695],{"class":103,"line":33020},[101,79691,79380],{"class":111},[101,79693,79694],{"class":216},"'3998274'",[101,79696,31455],{"class":111},[101,79698,79699,79701,79704],{"class":103,"line":33026},[101,79700,79390],{"class":111},[101,79702,79703],{"class":216},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[101,79705,31455],{"class":111},[101,79707,79708,79710,79712],{"class":103,"line":33032},[101,79709,79400],{"class":111},[101,79711,79580],{"class":216},[101,79713,31455],{"class":111},[101,79715,79716,79718,79721],{"class":103,"line":33042},[101,79717,79410],{"class":111},[101,79719,79720],{"class":216},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[101,79722,31455],{"class":111},[101,79724,79725],{"class":103,"line":33048},[101,79726,77881],{"class":111},[101,79728,79729],{"class":103,"line":33059},[101,79730,53098],{"class":111},[101,79732,79733],{"class":103,"line":33065},[101,79734,2387],{"emptyLinePlaceholder":27},[101,79736,79737],{"class":103,"line":33075},[101,79738,79739],{"class":170},"    \u002F\u002F 1.渲染函数\n",[101,79741,79742,79744,79746,79748,79750],{"class":103,"line":33080},[101,79743,70073],{"class":107},[101,79745,70076],{"class":1950},[101,79747,112],{"class":111},[101,79749,3867],{"class":5204},[101,79751,12430],{"class":111},[101,79753,79754],{"class":103,"line":33086},[101,79755,79756],{"class":170},"      \u002F\u002F 声明空字符串\n",[101,79758,79759,79762,79765,79767],{"class":103,"line":33135},[101,79760,79761],{"class":107},"      let",[101,79763,79764],{"class":111}," str ",[101,79766,157],{"class":107},[101,79768,70093],{"class":216},[101,79770,79771],{"class":103,"line":33182},[101,79772,70098],{"class":170},[101,79774,79775,79777,79780,79782,79785,79788],{"class":103,"line":33187},[101,79776,57996],{"class":111},[101,79778,79779],{"class":1950},"forEach",[101,79781,112],{"class":111},[101,79783,79784],{"class":5204},"item",[101,79786,79787],{"class":107}," =>",[101,79789,15560],{"class":111},[101,79791,79792,79794,79797,79800,79802,79805,79807,79810,79813,79815],{"class":103,"line":33193},[101,79793,61259],{"class":107},[101,79795,79796],{"class":111}," { ",[101,79798,79799],{"class":160},"name",[101,79801,12423],{"class":111},[101,79803,79804],{"class":160},"price",[101,79806,12423],{"class":111},[101,79808,79809],{"class":160},"picture",[101,79811,79812],{"class":111}," } ",[101,79814,157],{"class":107},[101,79816,79817],{"class":111}," item\n",[101,79819,79820,79823,79825],{"class":103,"line":33212},[101,79821,79822],{"class":111},"        str ",[101,79824,9465],{"class":107},[101,79826,70157],{"class":216},[101,79828,79829],{"class":103,"line":33218},[101,79830,79831],{"class":216},"          \u003Cdiv class=\"item\">\n",[101,79833,79834,79837,79839],{"class":103,"line":33238},[101,79835,79836],{"class":216},"            \u003Cimg src=\"${",[101,79838,79809],{"class":111},[101,79840,79841],{"class":216},"}\" alt=\"\">\n",[101,79843,79844,79847,79849],{"class":103,"line":33244},[101,79845,79846],{"class":216},"            \u003Cp class=\"name\">${",[101,79848,79799],{"class":111},[101,79850,79851],{"class":216},"}\u003C\u002Fp>\n",[101,79853,79854,79857,79859],{"class":103,"line":33250},[101,79855,79856],{"class":216},"            \u003Cp class=\"price\">${",[101,79858,79804],{"class":111},[101,79860,79851],{"class":216},[101,79862,79863],{"class":103,"line":33260},[101,79864,79865],{"class":216},"          \u003C\u002Fdiv>\n",[101,79867,79868],{"class":103,"line":33265},[101,79869,79870],{"class":216},"        `\n",[101,79872,79873],{"class":103,"line":33271},[101,79874,64804],{"class":111},[101,79876,79877],{"class":103,"line":33287},[101,79878,79879],{"class":170},"      \u002F\u002F 追加给List\n",[101,79881,79882,79884,79886,79888,79891,79893,79895],{"class":103,"line":33332},[101,79883,55760],{"class":111},[101,79885,54388],{"class":1950},[101,79887,112],{"class":111},[101,79889,79890],{"class":216},"'.list'",[101,79892,74238],{"class":111},[101,79894,157],{"class":107},[101,79896,73974],{"class":111},[101,79898,79899],{"class":103,"line":33338},[101,79900,2174],{"class":111},[101,79902,79903],{"class":103,"line":33344},[101,79904,79905],{"class":170},"    \u002F\u002F 页面一打开就需要渲染\n",[101,79907,79908,79911],{"class":103,"line":33350},[101,79909,79910],{"class":1950},"    render",[101,79912,79913],{"class":111},"(goodsList)\n",[101,79915,79916],{"class":103,"line":33361},[101,79917,79918],{"class":170},"    \u002F\u002F 2.过滤筛选\n",[101,79920,79921,79923,79925,79927,79930,79932,79934,79936,79938,79940,79942,79944],{"class":103,"line":33367},[101,79922,52396],{"class":111},[101,79924,54388],{"class":1950},[101,79926,112],{"class":111},[101,79928,79929],{"class":216},"'.filter'",[101,79931,30815],{"class":111},[101,79933,57802],{"class":1950},[101,79935,112],{"class":111},[101,79937,57807],{"class":216},[101,79939,12423],{"class":111},[101,79941,186],{"class":5204},[101,79943,79787],{"class":107},[101,79945,15560],{"class":111},[101,79947,79948],{"class":103,"line":33373},[101,79949,79950],{"class":170},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[101,79952,79953,79955,79957,79960,79962,79964,79966,79968],{"class":103,"line":33379},[101,79954,58217],{"class":107},[101,79956,79796],{"class":111},[101,79958,79959],{"class":160},"tagName",[101,79961,12423],{"class":111},[101,79963,31526],{"class":160},[101,79965,79812],{"class":111},[101,79967,157],{"class":107},[101,79969,79970],{"class":111}," e.target\n",[101,79972,79973],{"class":103,"line":33397},[101,79974,79975],{"class":170},"      \u002F\u002F 判断\n",[101,79977,79978,79980,79982,79984,79986],{"class":103,"line":33411},[101,79979,54469],{"class":107},[101,79981,67023],{"class":111},[101,79983,54475],{"class":107},[101,79985,68245],{"class":216},[101,79987,12430],{"class":111},[101,79989,79990],{"class":103,"line":33420},[101,79991,79992],{"class":170},"        \u002F\u002F console.log(11)\n",[101,79994,79995],{"class":103,"line":33429},[101,79996,79997],{"class":170},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[101,79999,80000],{"class":103,"line":33438},[101,80001,80002],{"class":170},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[101,80004,80005,80007,80009,80011],{"class":103,"line":33447},[101,80006,51819],{"class":107},[101,80008,51822],{"class":111},[101,80010,157],{"class":107},[101,80012,80013],{"class":111}," goodsList\n",[101,80015,80016,80018,80021,80023,80026],{"class":103,"line":33453},[101,80017,2484],{"class":107},[101,80019,80020],{"class":111}," (dataset.index ",[101,80022,54475],{"class":107},[101,80024,80025],{"class":216}," '1'",[101,80027,12430],{"class":111},[101,80029,80030,80033,80035,80038,80041,80043,80045,80047,80050,80052,80054,80057,80059,80061,80063],{"class":103,"line":33459},[101,80031,80032],{"class":111},"          arr ",[101,80034,157],{"class":107},[101,80036,80037],{"class":111}," goodsList.",[101,80039,80040],{"class":1950},"filter",[101,80042,112],{"class":111},[101,80044,79784],{"class":5204},[101,80046,79787],{"class":107},[101,80048,80049],{"class":111}," item.price ",[101,80051,1697],{"class":107},[101,80053,4080],{"class":160},[101,80055,80056],{"class":107}," &&",[101,80058,80049],{"class":111},[101,80060,1575],{"class":107},[101,80062,5742],{"class":160},[101,80064,118],{"class":111},[101,80066,80067,80070,80072,80074,80076,80078,80081],{"class":103,"line":33467},[101,80068,80069],{"class":111},"        } ",[101,80071,1688],{"class":107},[101,80073,1691],{"class":107},[101,80075,80020],{"class":111},[101,80077,54475],{"class":107},[101,80079,80080],{"class":216}," '2'",[101,80082,12430],{"class":111},[101,80084,80085,80087,80089,80091,80093,80095,80097,80099,80101,80103,80105,80107,80109,80111,80114],{"class":103,"line":33472},[101,80086,80032],{"class":111},[101,80088,157],{"class":107},[101,80090,80037],{"class":111},[101,80092,80040],{"class":1950},[101,80094,112],{"class":111},[101,80096,79784],{"class":5204},[101,80098,79787],{"class":107},[101,80100,80049],{"class":111},[101,80102,1697],{"class":107},[101,80104,5742],{"class":160},[101,80106,80056],{"class":107},[101,80108,80049],{"class":111},[101,80110,1575],{"class":107},[101,80112,80113],{"class":160}," 300",[101,80115,118],{"class":111},[101,80117,80118,80120,80122,80124,80126,80128,80131],{"class":103,"line":33478},[101,80119,80069],{"class":111},[101,80121,1688],{"class":107},[101,80123,1691],{"class":107},[101,80125,80020],{"class":111},[101,80127,54475],{"class":107},[101,80129,80130],{"class":216}," '3'",[101,80132,12430],{"class":111},[101,80134,80135,80137,80139,80141,80143,80145,80147,80149,80151,80153,80155],{"class":103,"line":33489},[101,80136,80032],{"class":111},[101,80138,157],{"class":107},[101,80140,80037],{"class":111},[101,80142,80040],{"class":1950},[101,80144,112],{"class":111},[101,80146,79784],{"class":5204},[101,80148,79787],{"class":107},[101,80150,80049],{"class":111},[101,80152,1697],{"class":107},[101,80154,80113],{"class":160},[101,80156,118],{"class":111},[101,80158,80159],{"class":103,"line":33495},[101,80160,2516],{"class":111},[101,80162,80163],{"class":103,"line":33515},[101,80164,80165],{"class":170},"        \u002F\u002F 渲染函数\n",[101,80167,80168,80170],{"class":103,"line":33521},[101,80169,70397],{"class":1950},[101,80171,52401],{"class":111},[101,80173,80174],{"class":103,"line":33527},[101,80175,52387],{"class":111},[101,80177,80178],{"class":103,"line":33533},[101,80179,2387],{"emptyLinePlaceholder":27},[101,80181,80182],{"class":103,"line":33550},[101,80183,33450],{"class":111},[101,80185,80186,80188,80190],{"class":103,"line":33556},[101,80187,52406],{"class":111},[101,80189,51802],{"class":51289},[101,80191,51296],{"class":111},[101,80193,80194,80196,80198],{"class":103,"line":33562},[101,80195,51774],{"class":111},[101,80197,51789],{"class":51289},[101,80199,51296],{"class":111},[101,80201,80202],{"class":103,"line":33568},[101,80203,2387],{"emptyLinePlaceholder":27},[101,80205,80206,80208,80210],{"class":103,"line":33574},[101,80207,51774],{"class":111},[101,80209,50624],{"class":51289},[101,80211,51296],{"class":111},[43,80213,80215],{"id":80214},"_410-深入了解对象","4.10 深入了解对象",[72,80217,80219],{"id":80218},"_4101-创建对象","4.10.1 创建对象",[10,80221,80222],{},[1449,80223],{"alt":20,"src":80224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[10,80226,80227],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[72,80229,80231],{"id":80230},"_4102-构造函数","4.10.2 构造函数",[10,80233,80234,80237],{},[261,80235,80236],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[10,80239,80240,80243],{},[261,80241,80242],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[92,80245,80247],{"className":50622,"code":80246,"language":50624,"meta":20,"style":20},"\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",[98,80248,80249,80257,80262,80283,80296,80308,80320,80324,80329,80356,80361,80388],{"__ignoreMap":20},[101,80250,80251,80253,80255],{"class":103,"line":104},[101,80252,1021],{"class":111},[101,80254,51802],{"class":51289},[101,80256,51296],{"class":111},[101,80258,80259],{"class":103,"line":21},[101,80260,80261],{"class":170},"\u002F\u002F例：\n",[101,80263,80264,80266,80269,80271,80273,80275,80277,80279,80281],{"class":103,"line":1166},[101,80265,54438],{"class":107},[101,80267,80268],{"class":1950}," Pig",[101,80270,112],{"class":111},[101,80272,79799],{"class":5204},[101,80274,489],{"class":111},[101,80276,70210],{"class":5204},[101,80278,489],{"class":111},[101,80280,70227],{"class":5204},[101,80282,12430],{"class":111},[101,80284,80285,80288,80291,80293],{"class":103,"line":1181},[101,80286,80287],{"class":160},"    this",[101,80289,80290],{"class":111},".name",[101,80292,157],{"class":107},[101,80294,80295],{"class":111},"name\n",[101,80297,80298,80300,80303,80305],{"class":103,"line":1187},[101,80299,80287],{"class":160},[101,80301,80302],{"class":111},".age",[101,80304,157],{"class":107},[101,80306,80307],{"class":111},"age\n",[101,80309,80310,80312,80315,80317],{"class":103,"line":1201},[101,80311,80287],{"class":160},[101,80313,80314],{"class":111},".gender",[101,80316,157],{"class":107},[101,80318,80319],{"class":111},"gender    \n",[101,80321,80322],{"class":103,"line":1207},[101,80323,1552],{"class":111},[101,80325,80326],{"class":103,"line":1298},[101,80327,80328],{"class":170},"\u002F\u002F创建佩奇对象\n",[101,80330,80331,80333,80336,80338,80340,80342,80345,80347,80349,80351,80354],{"class":103,"line":1304},[101,80332,6780],{"class":107},[101,80334,80335],{"class":160}," Peppa",[101,80337,11705],{"class":107},[101,80339,80268],{"class":1950},[101,80341,112],{"class":111},[101,80343,80344],{"class":216},"'佩奇'",[101,80346,489],{"class":111},[101,80348,455],{"class":160},[101,80350,489],{"class":111},[101,80352,80353],{"class":216},"'女'",[101,80355,118],{"class":111},[101,80357,80358],{"class":103,"line":1316},[101,80359,80360],{"class":170},"\u002F\u002F创建乔治对象\n",[101,80362,80363,80365,80368,80370,80372,80374,80377,80379,80381,80383,80386],{"class":103,"line":1599},[101,80364,6780],{"class":107},[101,80366,80367],{"class":160}," George",[101,80369,11705],{"class":107},[101,80371,80268],{"class":1950},[101,80373,112],{"class":111},[101,80375,80376],{"class":216},"'乔治'",[101,80378,489],{"class":111},[101,80380,183],{"class":160},[101,80382,489],{"class":111},[101,80384,80385],{"class":216},"'男'",[101,80387,118],{"class":111},[101,80389,80390,80392,80394],{"class":103,"line":1604},[101,80391,51774],{"class":111},[101,80393,51802],{"class":51289},[101,80395,51296],{"class":111},[10,80397,80398],{},[1449,80399],{"alt":20,"src":80400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[10,80402,80403],{},[1449,80404],{"alt":20,"src":80405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[10,80407,80408],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[10,80410,80411],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[10,80413,80414],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[10,80416,80417],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[10,80419,80420],{},"这里用等号是因为：对象.属性=值",[10,80422,80423],{},"①利用对象字面量创建对象",[10,80425,80426],{},"const o={",[10,80428,80429],{},"name:'pink'",[10,80431,80432],{},"} ②利用new Object创建对象",[10,80434,80435],{},"const o=new Object({name:'pink'})",[10,80437,80438],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[10,80440,80441],{},"构造函数创建对象的执行过程：",[10,80443,80444],{},[1449,80445],{"alt":20,"src":80446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[72,80448,80450],{"id":80449},"_4103-实例成员","4.10.3 实例成员",[10,80452,80453],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[55,80455,80456,80459,80462],{},[58,80457,80458],{},"实例对象的属性和方法即为实例成员",[58,80460,80461],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[58,80463,80464],{},"构造函数创建的实例对象彼此独立互不影响",[72,80466,80468],{"id":80467},"_4104-静态成员","4.10.4 静态成员",[10,80470,80471],{},[1449,80472],{"alt":20,"src":80473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[10,80475,80476],{},"静态成员有Date.now() Math.PI Math.random()",[10,80478,80479],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[10,80481,80482],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[10,80484,80485],{},"function Pig(name) n {",[10,80487,80488],{},"this.name=name",[10,80490,1057],{},[10,80492,80493],{},"Pig.eyes=2",[10,80495,80496],{},"Pig.sayHai=function () { console.log(this) }",[10,80498,80499],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[10,80501,80502],{},"console.log(Pig.eyes) \u002F\u002F2",[10,80504,11320],{},[55,80506,80507,80510,80513,80516,80519],{},[58,80508,80509],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[58,80511,80512],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[58,80514,80515],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[58,80517,80518],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[58,80520,80521],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[10,80523,80524],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[72,80526,80528],{"id":80527},"_4105-内置构造函数","4.10.5 内置构造函数",[10,80530,80531],{},"内置构造函数包含：",[10,80533,80534],{},[1449,80535],{"alt":20,"src":80536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[10,80538,80539],{},[1449,80540],{"alt":20,"src":80541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[10,80543,80544],{},"这些基本数据类型，js对他们进行了包装",[51802,80546,80547],{},"\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",[21986,80549,80551],{"id":80550},"_41051-object","4.10.5.1 Object",[10,80553,80554],{},"Object 是内置的构造函数，用于创建普通对象",[10,80556,80557],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[92,80559,80561],{"className":50622,"code":80560,"language":50624,"meta":20,"style":20},"const user=new Object({name:'小明',age:15})\n",[98,80562,80563],{"__ignoreMap":20},[101,80564,80565],{"class":103,"line":104},[101,80566,80560],{"class":111},[10,80568,80569],{},"三个常用的静态方法：",[22898,80571,80573],{"id":80572},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[10,80575,80576],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[10,80578,80579],{},[1449,80580],{"alt":20,"src":80581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[10,80583,80584],{},[1449,80585],{"alt":20,"src":80586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[92,80588,80590],{"className":53056,"code":80589,"language":53058,"meta":20,"style":20},"\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",[98,80591,80592,80600,80608,80613,80618,80623,80628,80633,80638,80646],{"__ignoreMap":20},[101,80593,80594,80596,80598],{"class":103,"line":104},[101,80595,1021],{"class":111},[101,80597,51789],{"class":51289},[101,80599,51296],{"class":111},[101,80601,80602,80604,80606],{"class":103,"line":21},[101,80603,52133],{"class":111},[101,80605,51802],{"class":51289},[101,80607,51296],{"class":111},[101,80609,80610],{"class":103,"line":1166},[101,80611,80612],{"class":111},"    const o = { name: 'pink', age: 6 }\n",[101,80614,80615],{"class":103,"line":1181},[101,80616,80617],{"class":111},"    \u002F\u002F 获得所有属性名\n",[101,80619,80620],{"class":103,"line":1187},[101,80621,80622],{"class":111},"    const arr = Object.keys(o)\n",[101,80624,80625],{"class":103,"line":1201},[101,80626,80627],{"class":111},"    console.log(arr)\n",[101,80629,80630],{"class":103,"line":1207},[101,80631,80632],{"class":111},"    \u002F\u002F 获得所有属性值\n",[101,80634,80635],{"class":103,"line":1298},[101,80636,80637],{"class":111},"    console.log(Object.values(o))\n",[101,80639,80640,80642,80644],{"class":103,"line":1304},[101,80641,52406],{"class":111},[101,80643,51802],{"class":51289},[101,80645,51296],{"class":111},[101,80647,80648,80650,80652],{"class":103,"line":1316},[101,80649,51774],{"class":111},[101,80651,51789],{"class":51289},[101,80653,51296],{"class":111},[22898,80655,80657],{"id":80656},"_410512-object-assign","4.10.5.1.2 Object. assign",[10,80659,80660],{},"Object.assign(oo,o)",[10,80662,80663],{},"后的东西添加给前 是追加",[10,80665,80666],{},[1449,80667],{"alt":20,"src":80668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[10,80670,80671],{},[1449,80672],{"alt":20,"src":80673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[92,80675,80677],{"className":53056,"code":80676,"language":53058,"meta":20,"style":20},"\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",[98,80678,80679,80687,80695,80699,80703,80707,80711,80715,80719,80724,80729,80734,80739,80744,80752],{"__ignoreMap":20},[101,80680,80681,80683,80685],{"class":103,"line":104},[101,80682,1021],{"class":111},[101,80684,51789],{"class":51289},[101,80686,51296],{"class":111},[101,80688,80689,80691,80693],{"class":103,"line":21},[101,80690,52133],{"class":111},[101,80692,51802],{"class":51289},[101,80694,51296],{"class":111},[101,80696,80697],{"class":103,"line":1166},[101,80698,80612],{"class":111},[101,80700,80701],{"class":103,"line":1181},[101,80702,80617],{"class":111},[101,80704,80705],{"class":103,"line":1187},[101,80706,80622],{"class":111},[101,80708,80709],{"class":103,"line":1201},[101,80710,80627],{"class":111},[101,80712,80713],{"class":103,"line":1207},[101,80714,80632],{"class":111},[101,80716,80717],{"class":103,"line":1298},[101,80718,80637],{"class":111},[101,80720,80721],{"class":103,"line":1304},[101,80722,80723],{"class":111},"    const oo = {}\n",[101,80725,80726],{"class":103,"line":1316},[101,80727,80728],{"class":111},"    Object.assign(oo, o)\n",[101,80730,80731],{"class":103,"line":1599},[101,80732,80733],{"class":111},"    console.log(oo)\n",[101,80735,80736],{"class":103,"line":1604},[101,80737,80738],{"class":111},"    Object.assign(o, { gender: '女' })\n",[101,80740,80741],{"class":103,"line":1610},[101,80742,80743],{"class":111},"    console.log(o)\n",[101,80745,80746,80748,80750],{"class":103,"line":1615},[101,80747,52406],{"class":111},[101,80749,51802],{"class":51289},[101,80751,51296],{"class":111},[101,80753,80754,80756,80758],{"class":103,"line":1629},[101,80755,51774],{"class":111},[101,80757,51789],{"class":51289},[101,80759,51296],{"class":111},[10,80761,80762],{},[1449,80763],{"alt":20,"src":80764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21986,80766,80768],{"id":80767},"_41052-array","4.10.5.2 Array",[10,80770,80771],{},"Array 是内置的构造函数，用于创建数组",[10,80773,80774],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[92,80776,80778],{"className":50622,"code":80777,"language":50624,"meta":20,"style":20},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[98,80779,80780,80785],{"__ignoreMap":20},[101,80781,80782],{"class":103,"line":104},[101,80783,80784],{"class":111},"const arr=new Array(3,5)\n",[101,80786,80787],{"class":103,"line":21},[101,80788,80789],{"class":111},"console.log(arr)  \u002F\u002F[3,5]\n",[10,80791,80792],{},"Array的实例方法，这个方法是实例成员",[10,80794,80795],{},[1449,80796],{"alt":20,"src":80797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22898,80799,80801],{"id":80800},"_410521-reduce","4.10.5.2.1 reduce",[10,80803,80804],{},[1449,80805],{"alt":20,"src":80806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[92,80808,80810],{"className":53056,"code":80809,"language":53058,"meta":20,"style":20},"\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",[98,80811,80812,80820,80828,80833,80838,80843,80848,80852,80857,80862,80867,80871,80876,80881,80885,80890,80895,80900,80908],{"__ignoreMap":20},[101,80813,80814,80816,80818],{"class":103,"line":104},[101,80815,1021],{"class":111},[101,80817,51789],{"class":51289},[101,80819,51296],{"class":111},[101,80821,80822,80824,80826],{"class":103,"line":21},[101,80823,52133],{"class":111},[101,80825,51802],{"class":51289},[101,80827,51296],{"class":111},[101,80829,80830],{"class":103,"line":1166},[101,80831,80832],{"class":111},"    const arr = [1, 5, 8]\n",[101,80834,80835],{"class":103,"line":1181},[101,80836,80837],{"class":111},"    \u002F\u002F 1.没有初始值\n",[101,80839,80840],{"class":103,"line":1187},[101,80841,80842],{"class":111},"    const total = arr.reduce(function (prev, current) {\n",[101,80844,80845],{"class":103,"line":1201},[101,80846,80847],{"class":111},"      return prev + current\n",[101,80849,80850],{"class":103,"line":1207},[101,80851,33450],{"class":111},[101,80853,80854],{"class":103,"line":1298},[101,80855,80856],{"class":111},"    console.log(total)   \u002F\u002F14\n",[101,80858,80859],{"class":103,"line":1304},[101,80860,80861],{"class":111},"    \u002F\u002F 2.有初始值\n",[101,80863,80864],{"class":103,"line":1316},[101,80865,80866],{"class":111},"    const total1 = arr.reduce(function (prev, current) {\n",[101,80868,80869],{"class":103,"line":1599},[101,80870,80847],{"class":111},[101,80872,80873],{"class":103,"line":1604},[101,80874,80875],{"class":111},"    }, 10)\n",[101,80877,80878],{"class":103,"line":1610},[101,80879,80880],{"class":111},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[101,80882,80883],{"class":103,"line":1615},[101,80884,2387],{"emptyLinePlaceholder":27},[101,80886,80887],{"class":103,"line":1629},[101,80888,80889],{"class":111},"    \u002F\u002F 3.箭头函数写法\n",[101,80891,80892],{"class":103,"line":1634},[101,80893,80894],{"class":111},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[101,80896,80897],{"class":103,"line":1640},[101,80898,80899],{"class":111},"    console.log(total2)   \u002F\u002F24\n",[101,80901,80902,80904,80906],{"class":103,"line":1661},[101,80903,52406],{"class":111},[101,80905,51802],{"class":51289},[101,80907,51296],{"class":111},[101,80909,80910,80912,80914],{"class":103,"line":1666},[101,80911,51774],{"class":111},[101,80913,51789],{"class":51289},[101,80915,51296],{"class":111},[10,80917,80918],{},"执行过程：",[55,80920,80921,80924,80927],{},[58,80922,80923],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[58,80925,80926],{},"每一次循环，把返回值给作为下一次循环的上一次值",[58,80928,80929],{},"如果有起始值，则起始值作为上一次值",[92,80931,80933],{"className":53056,"code":80932,"language":53058,"meta":20,"style":20},"\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",[98,80934,80935,80943,80951,80955,80959,80963,80967,80971,80975,80980,80985,80990,80995,81000,81004,81008,81012,81016,81020,81024,81029,81033,81038,81042,81047,81052,81056,81060,81064,81072],{"__ignoreMap":20},[101,80936,80937,80939,80941],{"class":103,"line":104},[101,80938,1021],{"class":111},[101,80940,51789],{"class":51289},[101,80942,51296],{"class":111},[101,80944,80945,80947,80949],{"class":103,"line":21},[101,80946,52133],{"class":111},[101,80948,51802],{"class":51289},[101,80950,51296],{"class":111},[101,80952,80953],{"class":103,"line":1166},[101,80954,80832],{"class":111},[101,80956,80957],{"class":103,"line":1181},[101,80958,80837],{"class":111},[101,80960,80961],{"class":103,"line":1187},[101,80962,80842],{"class":111},[101,80964,80965],{"class":103,"line":1201},[101,80966,80847],{"class":111},[101,80968,80969],{"class":103,"line":1207},[101,80970,33450],{"class":111},[101,80972,80973],{"class":103,"line":1298},[101,80974,80856],{"class":111},[101,80976,80977],{"class":103,"line":1304},[101,80978,80979],{"class":111},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[101,80981,80982],{"class":103,"line":1316},[101,80983,80984],{"class":111},"    \u002F\u002F     1              5                    6\n",[101,80986,80987],{"class":103,"line":1599},[101,80988,80989],{"class":111},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[101,80991,80992],{"class":103,"line":1604},[101,80993,80994],{"class":111},"    \u002F\u002F     6              8                    14\n",[101,80996,80997],{"class":103,"line":1610},[101,80998,80999],{"class":111},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[101,81001,81002],{"class":103,"line":1615},[101,81003,80861],{"class":111},[101,81005,81006],{"class":103,"line":1629},[101,81007,80866],{"class":111},[101,81009,81010],{"class":103,"line":1634},[101,81011,80847],{"class":111},[101,81013,81014],{"class":103,"line":1640},[101,81015,80875],{"class":111},[101,81017,81018],{"class":103,"line":1661},[101,81019,80880],{"class":111},[101,81021,81022],{"class":103,"line":1666},[101,81023,80979],{"class":111},[101,81025,81026],{"class":103,"line":1680},[101,81027,81028],{"class":111},"    \u002F\u002F     10             1                     11\n",[101,81030,81031],{"class":103,"line":1685},[101,81032,80989],{"class":111},[101,81034,81035],{"class":103,"line":1714},[101,81036,81037],{"class":111},"    \u002F\u002F     11             5                    16\n",[101,81039,81040],{"class":103,"line":1719},[101,81041,80989],{"class":111},[101,81043,81044],{"class":103,"line":1736},[101,81045,81046],{"class":111},"    \u002F\u002F     16             8                    24\n",[101,81048,81049],{"class":103,"line":1741},[101,81050,81051],{"class":111},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[101,81053,81054],{"class":103,"line":1746},[101,81055,80889],{"class":111},[101,81057,81058],{"class":103,"line":1751},[101,81059,80894],{"class":111},[101,81061,81062],{"class":103,"line":1765},[101,81063,80899],{"class":111},[101,81065,81066,81068,81070],{"class":103,"line":1770},[101,81067,52406],{"class":111},[101,81069,51802],{"class":51289},[101,81071,51296],{"class":111},[101,81073,81074,81076,81078],{"class":103,"line":2564},[101,81075,51774],{"class":111},[101,81077,51789],{"class":51289},[101,81079,51296],{"class":111},[22898,81081,81083],{"id":81082},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[10,81085,81086],{},[1449,81087],{"alt":20,"src":81088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[92,81090,81092],{"className":53056,"code":81091,"language":53058,"meta":20,"style":20},"\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",[98,81093,81094,81102,81110,81115,81120,81125,81130,81134,81139,81144,81149,81154,81159,81164,81168,81173,81177,81182,81190],{"__ignoreMap":20},[101,81095,81096,81098,81100],{"class":103,"line":104},[101,81097,1021],{"class":111},[101,81099,51789],{"class":51289},[101,81101,51296],{"class":111},[101,81103,81104,81106,81108],{"class":103,"line":21},[101,81105,52133],{"class":111},[101,81107,51802],{"class":51289},[101,81109,51296],{"class":111},[101,81111,81112],{"class":103,"line":1166},[101,81113,81114],{"class":111},"    const arr = [\n",[101,81116,81117],{"class":103,"line":1181},[101,81118,81119],{"class":111},"      { name: '张三', salary: 10000 },\n",[101,81121,81122],{"class":103,"line":1187},[101,81123,81124],{"class":111},"      { name: '李四', salary: 10000 },\n",[101,81126,81127],{"class":103,"line":1201},[101,81128,81129],{"class":111},"      { name: '王五', salary: 10000 }\n",[101,81131,81132],{"class":103,"line":1207},[101,81133,53098],{"class":111},[101,81135,81136],{"class":103,"line":1298},[101,81137,81138],{"class":111},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[101,81140,81141],{"class":103,"line":1304},[101,81142,81143],{"class":111},"    \u002F\u002F prev是累计值\n",[101,81145,81146],{"class":103,"line":1316},[101,81147,81148],{"class":111},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[101,81150,81151],{"class":103,"line":1599},[101,81152,81153],{"class":111},"    console.log(total)\n",[101,81155,81156],{"class":103,"line":1604},[101,81157,81158],{"class":111},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[101,81160,81161],{"class":103,"line":1610},[101,81162,81163],{"class":111},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[101,81165,81166],{"class":103,"line":1615},[101,81167,81158],{"class":111},[101,81169,81170],{"class":103,"line":1629},[101,81171,81172],{"class":111},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[101,81174,81175],{"class":103,"line":1634},[101,81176,81158],{"class":111},[101,81178,81179],{"class":103,"line":1640},[101,81180,81181],{"class":111},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[101,81183,81184,81186,81188],{"class":103,"line":1661},[101,81185,52406],{"class":111},[101,81187,51802],{"class":51289},[101,81189,51296],{"class":111},[101,81191,81192,81194,81196],{"class":103,"line":1666},[101,81193,51774],{"class":111},[101,81195,51789],{"class":51289},[101,81197,51296],{"class":111},[22898,81199,81201],{"id":81200},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[10,81203,81204],{},[1449,81205],{"alt":20,"src":81206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[10,81208,81209],{},[1449,81210],{"alt":20,"src":81211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[55,81213,81214],{},[58,81215,81216],{},"find()",[10,81218,81219],{},"循环查找，找到第一个就ok",[10,81221,81222],{},[14,81223,81226],{"href":81224,"rel":81225},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[18],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[92,81228,81230],{"className":50622,"code":81229,"language":50624,"meta":20,"style":20},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[98,81231,81232,81237,81242],{"__ignoreMap":20},[101,81233,81234],{"class":103,"line":104},[101,81235,81236],{"class":111},"const array1 = [5, 12, 8, 130, 44]\n",[101,81238,81239],{"class":103,"line":21},[101,81240,81241],{"class":111},"const found = array1.find((element) => element > 10)\n",[101,81243,81244],{"class":103,"line":1166},[101,81245,81246],{"class":111},"console.log(found)  \u002F\u002F12\n",[10,81248,81249,81251,81252,81257,81258,81261,81262,81264,81265,81270,81271,81273,81274,81276,81277,81279,81280],{},[98,81250,81216],{}," 方法是一个",[14,81253,81256],{"href":81254,"rel":81255},"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",[18],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[98,81259,81260],{},"callbackFn"," 函数，直到 ",[98,81263,81260],{}," 返回一个",[14,81266,81269],{"href":81267,"rel":81268},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[18],"真值","。然后 ",[98,81272,81216],{}," 返回该元素并停止迭代数组。如果 ",[98,81275,81260],{}," 从未返回真值，则 ",[98,81278,81216],{}," 返回 ",[98,81281,81282],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[92,81284,81286],{"className":53056,"code":81285,"language":53058,"meta":20,"style":20},"\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",[98,81287,81288,81296,81304,81309,81314,81319,81323,81328,81333,81337,81342,81347,81351,81355,81360,81365,81369,81373,81378,81383,81388,81393,81398,81402,81407,81412,81417,81422,81426,81431,81439],{"__ignoreMap":20},[101,81289,81290,81292,81294],{"class":103,"line":104},[101,81291,1021],{"class":111},[101,81293,51789],{"class":51289},[101,81295,51296],{"class":111},[101,81297,81298,81300,81302],{"class":103,"line":21},[101,81299,52133],{"class":111},[101,81301,51802],{"class":51289},[101,81303,51296],{"class":111},[101,81305,81306],{"class":103,"line":1166},[101,81307,81308],{"class":111},"    const arr = ['red', 'blue', 'green']\n",[101,81310,81311],{"class":103,"line":1181},[101,81312,81313],{"class":111},"    const found = arr.find(item => item === 'pink')\n",[101,81315,81316],{"class":103,"line":1187},[101,81317,81318],{"class":111},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[101,81320,81321],{"class":103,"line":1201},[101,81322,2387],{"emptyLinePlaceholder":27},[101,81324,81325],{"class":103,"line":1207},[101,81326,81327],{"class":111},"    \u002F\u002F 使用场景，用于查找数据\n",[101,81329,81330],{"class":103,"line":1298},[101,81331,81332],{"class":111},"    const arr1 = [\n",[101,81334,81335],{"class":103,"line":1304},[101,81336,79375],{"class":111},[101,81338,81339],{"class":103,"line":1316},[101,81340,81341],{"class":111},"        name: '小米',\n",[101,81343,81344],{"class":103,"line":1599},[101,81345,81346],{"class":111},"        price: 1999\n",[101,81348,81349],{"class":103,"line":1604},[101,81350,77881],{"class":111},[101,81352,81353],{"class":103,"line":1610},[101,81354,79375],{"class":111},[101,81356,81357],{"class":103,"line":1615},[101,81358,81359],{"class":111},"        name: '华为',\n",[101,81361,81362],{"class":103,"line":1629},[101,81363,81364],{"class":111},"        price: 3999\n",[101,81366,81367],{"class":103,"line":1634},[101,81368,52387],{"class":111},[101,81370,81371],{"class":103,"line":1640},[101,81372,53098],{"class":111},[101,81374,81375],{"class":103,"line":1661},[101,81376,81377],{"class":111},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[101,81379,81380],{"class":103,"line":1666},[101,81381,81382],{"class":111},"    \u002F\u002F const found1 = arr1.find(item => {\n",[101,81384,81385],{"class":103,"line":1680},[101,81386,81387],{"class":111},"    \u002F\u002F   if (item.name === '小米') {\n",[101,81389,81390],{"class":103,"line":1685},[101,81391,81392],{"class":111},"    \u002F\u002F     return item\n",[101,81394,81395],{"class":103,"line":1714},[101,81396,81397],{"class":111},"    \u002F\u002F   }\n",[101,81399,81400],{"class":103,"line":1719},[101,81401,63279],{"class":111},[101,81403,81404],{"class":103,"line":1736},[101,81405,81406],{"class":111},"    \u002F\u002F 另一种写法\n",[101,81408,81409],{"class":103,"line":1741},[101,81410,81411],{"class":111},"    const found1 = arr1.find(item => {\n",[101,81413,81414],{"class":103,"line":1746},[101,81415,81416],{"class":111},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[101,81418,81419],{"class":103,"line":1751},[101,81420,81421],{"class":111},"      return item.name = '小米'\n",[101,81423,81424],{"class":103,"line":1765},[101,81425,33450],{"class":111},[101,81427,81428],{"class":103,"line":1770},[101,81429,81430],{"class":111},"    console.log(found1)\n",[101,81432,81433,81435,81437],{"class":103,"line":2564},[101,81434,52406],{"class":111},[101,81436,51802],{"class":51289},[101,81438,51296],{"class":111},[101,81440,81441,81443,81445],{"class":103,"line":2578},[101,81442,51774],{"class":111},[101,81444,51789],{"class":51289},[101,81446,51296],{"class":111},[10,81448,81449],{},[1449,81450],{"alt":20,"src":81451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[10,81453,81454],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[55,81456,81457],{"start":21},[58,81458,81459],{},"every()返回的是布尔值",[10,81461,81462],{},[14,81463,81466],{"href":81464,"rel":81465},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[18],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[10,81468,81469],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[10,81471,81472],{},"some是只有有一个就没问题",[10,81474,81475],{},"every是必须全是才行",[92,81477,81481],{"className":81478,"code":81479,"language":81480,"meta":20,"style":20},"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",[98,81482,81483,81499,81513,81517,81526],{"__ignoreMap":20},[101,81484,81485,81487,81490,81492,81494,81497],{"class":103,"line":104},[101,81486,54438],{"class":107},[101,81488,81489],{"class":111}," isBigEnough(element, ",[101,81491,74047],{"class":107},[101,81493,12423],{"class":111},[101,81495,81496],{"class":107},"array",[101,81498,12430],{"class":111},[101,81500,81501,81504,81507,81509,81511],{"class":103,"line":21},[101,81502,81503],{"class":107},"  return",[101,81505,81506],{"class":111}," element ",[101,81508,1697],{"class":107},[101,81510,2025],{"class":160},[101,81512,1277],{"class":111},[101,81514,81515],{"class":103,"line":1166},[101,81516,1552],{"class":111},[101,81518,81519,81522,81524],{"class":103,"line":1181},[101,81520,81521],{"class":111},"[12, 5, 8, 130, 44].every(isBigEnough); ",[101,81523,33318],{"class":107},[101,81525,54505],{"class":111},[101,81527,81528,81531,81533],{"class":103,"line":1187},[101,81529,81530],{"class":111},"[12, 54, 18, 130, 44].every(isBigEnough); ",[101,81532,33318],{"class":107},[101,81534,57929],{"class":111},[92,81536,81538],{"className":53056,"code":81537,"language":53058,"meta":20,"style":20},"\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",[98,81539,81540,81548,81556,81561,81565,81570,81575,81583],{"__ignoreMap":20},[101,81541,81542,81544,81546],{"class":103,"line":104},[101,81543,1021],{"class":111},[101,81545,51789],{"class":51289},[101,81547,51296],{"class":111},[101,81549,81550,81552,81554],{"class":103,"line":21},[101,81551,52133],{"class":111},[101,81553,51802],{"class":51289},[101,81555,51296],{"class":111},[101,81557,81558],{"class":103,"line":1166},[101,81559,81560],{"class":111},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[101,81562,81563],{"class":103,"line":1181},[101,81564,78311],{"class":111},[101,81566,81567],{"class":103,"line":1187},[101,81568,81569],{"class":111},"    const flag = arr.every(item => item >= 10)\n",[101,81571,81572],{"class":103,"line":1201},[101,81573,81574],{"class":111},"    console.log(flag)    \u002F\u002Ftrue\n",[101,81576,81577,81579,81581],{"class":103,"line":1207},[101,81578,52406],{"class":111},[101,81580,51802],{"class":51289},[101,81582,51296],{"class":111},[101,81584,81585,81587,81589],{"class":103,"line":1298},[101,81586,51774],{"class":111},[101,81588,51789],{"class":51289},[101,81590,51296],{"class":111},[92,81592,81594],{"className":53056,"code":81593,"language":53058,"meta":20,"style":20},"\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",[98,81595,81596,81604,81612,81616,81621,81626,81631,81639],{"__ignoreMap":20},[101,81597,81598,81600,81602],{"class":103,"line":104},[101,81599,1021],{"class":111},[101,81601,51789],{"class":51289},[101,81603,51296],{"class":111},[101,81605,81606,81608,81610],{"class":103,"line":21},[101,81607,52133],{"class":111},[101,81609,51802],{"class":51289},[101,81611,51296],{"class":111},[101,81613,81614],{"class":103,"line":1166},[101,81615,81560],{"class":111},[101,81617,81618],{"class":103,"line":1181},[101,81619,81620],{"class":111},"    const arr = [10, 0, 5]\n",[101,81622,81623],{"class":103,"line":1187},[101,81624,81625],{"class":111},"    const flag = arr.some(item => item >= 10)\n",[101,81627,81628],{"class":103,"line":1201},[101,81629,81630],{"class":111},"    console.log(flag)   \u002F\u002Ftrue\n",[101,81632,81633,81635,81637],{"class":103,"line":1207},[101,81634,52406],{"class":111},[101,81636,51802],{"class":51289},[101,81638,51296],{"class":111},[101,81640,81641,81643,81645],{"class":103,"line":1298},[101,81642,51774],{"class":111},[101,81644,51789],{"class":51289},[101,81646,51296],{"class":111},[22898,81648,81650],{"id":81649},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[10,81652,81653],{},[1449,81654],{"alt":20,"src":81655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[92,81657,81659],{"className":50622,"code":81658,"language":50624,"meta":20,"style":20},"\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",[98,81660,81661,81671,81685,81689,81697,81711,81731,81743,81751,81758,81770,81782,81794,81806,81816,81826,81830,81838,81846,81850,81858,81870,81878,81900,81905,81910,81943,81951,81959,81963],{"__ignoreMap":20},[101,81662,81663,81665,81667,81669],{"class":103,"line":104},[101,81664,51286],{"class":111},[101,81666,51290],{"class":51289},[101,81668,51293],{"class":1950},[101,81670,51296],{"class":111},[101,81672,81673,81675,81677,81679,81681,81683],{"class":103,"line":21},[101,81674,1021],{"class":111},[101,81676,50624],{"class":51289},[101,81678,51305],{"class":1950},[101,81680,157],{"class":111},[101,81682,51310],{"class":216},[101,81684,51296],{"class":111},[101,81686,81687],{"class":103,"line":1166},[101,81688,2387],{"emptyLinePlaceholder":27},[101,81690,81691,81693,81695],{"class":103,"line":1181},[101,81692,1021],{"class":111},[101,81694,51323],{"class":51289},[101,81696,51296],{"class":111},[101,81698,81699,81701,81703,81705,81707,81709],{"class":103,"line":1187},[101,81700,52133],{"class":111},[101,81702,51333],{"class":51289},[101,81704,51336],{"class":1950},[101,81706,157],{"class":111},[101,81708,51341],{"class":216},[101,81710,51296],{"class":111},[101,81712,81713,81715,81717,81719,81721,81723,81725,81727,81729],{"class":103,"line":1201},[101,81714,52133],{"class":111},[101,81716,51333],{"class":51289},[101,81718,14908],{"class":1950},[101,81720,157],{"class":111},[101,81722,51380],{"class":216},[101,81724,51360],{"class":1950},[101,81726,157],{"class":111},[101,81728,51387],{"class":216},[101,81730,51296],{"class":111},[101,81732,81733,81735,81737,81739,81741],{"class":103,"line":1207},[101,81734,52133],{"class":111},[101,81736,51396],{"class":51289},[101,81738,51399],{"class":111},[101,81740,51396],{"class":51289},[101,81742,51296],{"class":111},[101,81744,81745,81747,81749],{"class":103,"line":1298},[101,81746,52133],{"class":111},[101,81748,5114],{"class":51289},[101,81750,51296],{"class":111},[101,81752,81753,81756],{"class":103,"line":1304},[101,81754,81755],{"class":51289},"    div",[101,81757,15560],{"class":111},[101,81759,81760,81762,81764,81766,81768],{"class":103,"line":1316},[101,81761,54760],{"class":160},[101,81763,51426],{"class":111},[101,81765,1709],{"class":160},[101,81767,51481],{"class":107},[101,81769,1277],{"class":111},[101,81771,81772,81774,81776,81778,81780],{"class":103,"line":1599},[101,81773,54774],{"class":160},[101,81775,51426],{"class":111},[101,81777,512],{"class":160},[101,81779,51481],{"class":107},[101,81781,1277],{"class":111},[101,81783,81784,81786,81788,81790,81792],{"class":103,"line":1604},[101,81785,57348],{"class":160},[101,81787,51426],{"class":111},[101,81789,512],{"class":160},[101,81791,51481],{"class":107},[101,81793,1277],{"class":111},[101,81795,81796,81798,81800,81802,81804],{"class":103,"line":1610},[101,81797,65122],{"class":160},[101,81799,51426],{"class":111},[101,81801,609],{"class":160},[101,81803,51481],{"class":107},[101,81805,1277],{"class":111},[101,81807,81808,81810,81812,81814],{"class":103,"line":1615},[101,81809,57275],{"class":160},[101,81811,51426],{"class":111},[101,81813,51581],{"class":160},[101,81815,1277],{"class":111},[101,81817,81818,81820,81822,81824],{"class":103,"line":1629},[101,81819,54873],{"class":160},[101,81821,51426],{"class":111},[101,81823,51634],{"class":160},[101,81825,1277],{"class":111},[101,81827,81828],{"class":103,"line":1634},[101,81829,2174],{"class":111},[101,81831,81832,81834,81836],{"class":103,"line":1640},[101,81833,52406],{"class":111},[101,81835,5114],{"class":51289},[101,81837,51296],{"class":111},[101,81839,81840,81842,81844],{"class":103,"line":1661},[101,81841,51774],{"class":111},[101,81843,51323],{"class":51289},[101,81845,51296],{"class":111},[101,81847,81848],{"class":103,"line":1666},[101,81849,2387],{"emptyLinePlaceholder":27},[101,81851,81852,81854,81856],{"class":103,"line":1680},[101,81853,1021],{"class":111},[101,81855,51789],{"class":51289},[101,81857,51296],{"class":111},[101,81859,81860,81862,81864,81866,81868],{"class":103,"line":1685},[101,81861,52133],{"class":111},[101,81863,51600],{"class":51289},[101,81865,55303],{"class":111},[101,81867,51600],{"class":51289},[101,81869,51296],{"class":111},[101,81871,81872,81874,81876],{"class":103,"line":1714},[101,81873,52133],{"class":111},[101,81875,51802],{"class":51289},[101,81877,51296],{"class":111},[101,81879,81880,81882,81885,81887,81890,81893,81895,81898],{"class":103,"line":1719},[101,81881,11209],{"class":107},[101,81883,81884],{"class":160}," spec",[101,81886,13552],{"class":107},[101,81888,81889],{"class":111}," { size: ",[101,81891,81892],{"class":216},"'40cm*40cm'",[101,81894,55453],{"class":111},[101,81896,81897],{"class":216},"'黑色'",[101,81899,55593],{"class":111},[101,81901,81902],{"class":103,"line":1736},[101,81903,81904],{"class":170},"    \u002F\u002F const arr = Object.values(spec)\n",[101,81906,81907],{"class":103,"line":1741},[101,81908,81909],{"class":170},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[101,81911,81912,81914,81916,81918,81921,81923,81925,81928,81931,81934,81936,81938,81941],{"class":103,"line":1746},[101,81913,52396],{"class":111},[101,81915,54388],{"class":1950},[101,81917,112],{"class":111},[101,81919,81920],{"class":216},"'div'",[101,81922,74238],{"class":111},[101,81924,157],{"class":107},[101,81926,81927],{"class":111}," Object.",[101,81929,81930],{"class":1950},"values",[101,81932,81933],{"class":111},"(spec).",[101,81935,74212],{"class":1950},[101,81937,112],{"class":111},[101,81939,81940],{"class":216},"'\u002F'",[101,81942,118],{"class":111},[101,81944,81945,81947,81949],{"class":103,"line":1751},[101,81946,52406],{"class":111},[101,81948,51802],{"class":51289},[101,81950,51296],{"class":111},[101,81952,81953,81955,81957],{"class":103,"line":1765},[101,81954,51774],{"class":111},[101,81956,51789],{"class":51289},[101,81958,51296],{"class":111},[101,81960,81961],{"class":103,"line":1770},[101,81962,2387],{"emptyLinePlaceholder":27},[101,81964,81965,81967,81969],{"class":103,"line":2564},[101,81966,51774],{"class":111},[101,81968,50624],{"class":51289},[101,81970,51296],{"class":111},[10,81972,81973],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22898,81975,81977],{"id":81976},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[10,81979,81980],{},"静态方法，将伪数组转换为真数组",[10,81982,81983],{},[1449,81984],{"alt":20,"src":81985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[92,81987,81989],{"className":53056,"code":81988,"language":53058,"meta":20,"style":20},"\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",[98,81990,81991,81999,82007,82019,82031,82043,82051,82059,82064,82069,82074,82079,82087],{"__ignoreMap":20},[101,81992,81993,81995,81997],{"class":103,"line":104},[101,81994,1021],{"class":111},[101,81996,51789],{"class":51289},[101,81998,51296],{"class":111},[101,82000,82001,82003,82005],{"class":103,"line":21},[101,82002,52133],{"class":111},[101,82004,1118],{"class":51289},[101,82006,51296],{"class":111},[101,82008,82009,82011,82013,82015,82017],{"class":103,"line":1166},[101,82010,51330],{"class":111},[101,82012,58],{"class":51289},[101,82014,55303],{"class":111},[101,82016,58],{"class":51289},[101,82018,51296],{"class":111},[101,82020,82021,82023,82025,82027,82029],{"class":103,"line":1181},[101,82022,51330],{"class":111},[101,82024,58],{"class":51289},[101,82026,55303],{"class":111},[101,82028,58],{"class":51289},[101,82030,51296],{"class":111},[101,82032,82033,82035,82037,82039,82041],{"class":103,"line":1187},[101,82034,51330],{"class":111},[101,82036,58],{"class":51289},[101,82038,55303],{"class":111},[101,82040,58],{"class":51289},[101,82042,51296],{"class":111},[101,82044,82045,82047,82049],{"class":103,"line":1201},[101,82046,52406],{"class":111},[101,82048,1118],{"class":51289},[101,82050,51296],{"class":111},[101,82052,82053,82055,82057],{"class":103,"line":1207},[101,82054,52133],{"class":111},[101,82056,51802],{"class":51289},[101,82058,51296],{"class":111},[101,82060,82061],{"class":103,"line":1298},[101,82062,82063],{"class":111},"    const lis = document.querySelectorAll('li')\n",[101,82065,82066],{"class":103,"line":1304},[101,82067,82068],{"class":111},"    const liss = Array.from(lis)\n",[101,82070,82071],{"class":103,"line":1316},[101,82072,82073],{"class":111},"    liss.pop()\n",[101,82075,82076],{"class":103,"line":1599},[101,82077,82078],{"class":111},"    console.log(liss)\n",[101,82080,82081,82083,82085],{"class":103,"line":1604},[101,82082,52406],{"class":111},[101,82084,51802],{"class":51289},[101,82086,51296],{"class":111},[101,82088,82089,82091,82093],{"class":103,"line":1610},[101,82090,51774],{"class":111},[101,82092,51789],{"class":51289},[101,82094,51296],{"class":111},[10,82096,82097],{},[1449,82098],{"alt":20,"src":82099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21986,82101,82103],{"id":82102},"_41053-string","4.10.5.3 String",[10,82105,82106],{},[1449,82107],{"alt":20,"src":82108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22898,82110,82112],{"id":82111},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[92,82114,82116],{"className":53056,"code":82115,"language":53058,"meta":20,"style":20},"\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",[98,82117,82118,82126,82134,82139,82144,82149,82153,82158,82163,82168,82176],{"__ignoreMap":20},[101,82119,82120,82122,82124],{"class":103,"line":104},[101,82121,1021],{"class":111},[101,82123,51789],{"class":51289},[101,82125,51296],{"class":111},[101,82127,82128,82130,82132],{"class":103,"line":21},[101,82129,52133],{"class":111},[101,82131,51802],{"class":51289},[101,82133,51296],{"class":111},[101,82135,82136],{"class":103,"line":1166},[101,82137,82138],{"class":111},"    \u002F\u002F 把字符串转化为数组\n",[101,82140,82141],{"class":103,"line":1181},[101,82142,82143],{"class":111},"    const str = 'pink,red'\n",[101,82145,82146],{"class":103,"line":1187},[101,82147,82148],{"class":111},"    const arr = str.split(',')\n",[101,82150,82151],{"class":103,"line":1201},[101,82152,80627],{"class":111},[101,82154,82155],{"class":103,"line":1207},[101,82156,82157],{"class":111},"    const str1 = '2025-8-25'\n",[101,82159,82160],{"class":103,"line":1298},[101,82161,82162],{"class":111},"    const arr1 = str1.split('-')\n",[101,82164,82165],{"class":103,"line":1304},[101,82166,82167],{"class":111},"    console.log(arr1)\n",[101,82169,82170,82172,82174],{"class":103,"line":1316},[101,82171,52406],{"class":111},[101,82173,51802],{"class":51289},[101,82175,51296],{"class":111},[101,82177,82178,82180,82182],{"class":103,"line":1599},[101,82179,51774],{"class":111},[101,82181,51789],{"class":51289},[101,82183,51296],{"class":111},[22898,82185,82187],{"id":82186},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[10,82189,5169],{},[10,82191,82192],{},"substring(indexStart)",[10,82194,82195],{},"substring(indexStart, indexEnd)",[1118,82197,82198,82209,82221,82231],{},[58,82199,82200,82201,82204,82205,82208],{},"如果省略了 ",[98,82202,82203],{},"indexEnd","，则 ",[98,82206,82207],{},"substring()"," 提取字符直到字符串的末尾",[58,82210,82211,82212,82215,82216,82204,82218,82220],{},"如果 ",[98,82213,82214],{},"indexStart"," 等于 ",[98,82217,82203],{},[98,82219,82207],{}," 返回一个空字符串",[58,82222,82211,82223,82225,82226,82204,82228,82230],{},[98,82224,82214],{}," 大于 ",[98,82227,82203],{},[98,82229,82207],{}," 的效果就像交换了这两个参数一样",[58,82232,82233],{},"结束的索引号不包含想要截取的部分",[92,82235,82237],{"className":81478,"code":82236,"language":81480,"meta":20,"style":20},"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",[98,82238,82239,82251,82255,82289,82319,82323,82354,82358,82385,82415,82445,82449,82480],{"__ignoreMap":20},[101,82240,82241,82244,82246,82249],{"class":103,"line":104},[101,82242,82243],{"class":111},"const anyString ",[101,82245,157],{"class":107},[101,82247,82248],{"class":216}," \"Mozilla\"",[101,82250,1277],{"class":111},[101,82252,82253],{"class":103,"line":21},[101,82254,2387],{"emptyLinePlaceholder":27},[101,82256,82257,82260,82262,82264,82266,82269,82271,82274,82276,82278,82280,82282,82284,82286],{"class":103,"line":1166},[101,82258,82259],{"class":160},"console",[101,82261,669],{"class":111},[101,82263,58236],{"class":160},[101,82265,112],{"class":111},[101,82267,82268],{"class":160},"anyString",[101,82270,669],{"class":111},[101,82272,82273],{"class":160},"substring",[101,82275,112],{"class":111},[101,82277,303],{"class":160},[101,82279,12423],{"class":111},[101,82281,329],{"class":160},[101,82283,75242],{"class":111},[101,82285,33318],{"class":107},[101,82287,82288],{"class":216}," 'M'\n",[101,82290,82291,82293,82295,82297,82299,82301,82303,82305,82307,82309,82311,82313,82315,82317],{"class":103,"line":1181},[101,82292,82259],{"class":160},[101,82294,669],{"class":111},[101,82296,58236],{"class":160},[101,82298,112],{"class":111},[101,82300,82268],{"class":160},[101,82302,669],{"class":111},[101,82304,82273],{"class":160},[101,82306,112],{"class":111},[101,82308,329],{"class":160},[101,82310,12423],{"class":111},[101,82312,303],{"class":160},[101,82314,75242],{"class":111},[101,82316,33318],{"class":107},[101,82318,82288],{"class":216},[101,82320,82321],{"class":103,"line":1187},[101,82322,2387],{"emptyLinePlaceholder":27},[101,82324,82325,82327,82329,82331,82333,82335,82337,82339,82341,82343,82345,82347,82349,82351],{"class":103,"line":1201},[101,82326,82259],{"class":160},[101,82328,669],{"class":111},[101,82330,58236],{"class":160},[101,82332,112],{"class":111},[101,82334,82268],{"class":160},[101,82336,669],{"class":111},[101,82338,82273],{"class":160},[101,82340,112],{"class":111},[101,82342,303],{"class":160},[101,82344,12423],{"class":111},[101,82346,455],{"class":160},[101,82348,75242],{"class":111},[101,82350,33318],{"class":107},[101,82352,82353],{"class":216}," 'Mozill'\n",[101,82355,82356],{"class":103,"line":1207},[101,82357,2387],{"emptyLinePlaceholder":27},[101,82359,82360,82362,82364,82366,82368,82370,82372,82374,82376,82378,82380,82382],{"class":103,"line":1298},[101,82361,82259],{"class":160},[101,82363,669],{"class":111},[101,82365,58236],{"class":160},[101,82367,112],{"class":111},[101,82369,82268],{"class":160},[101,82371,669],{"class":111},[101,82373,82273],{"class":160},[101,82375,112],{"class":111},[101,82377,404],{"class":160},[101,82379,75242],{"class":111},[101,82381,33318],{"class":107},[101,82383,82384],{"class":216}," 'lla'\n",[101,82386,82387,82389,82391,82393,82395,82397,82399,82401,82403,82405,82407,82409,82411,82413],{"class":103,"line":1304},[101,82388,82259],{"class":160},[101,82390,669],{"class":111},[101,82392,58236],{"class":160},[101,82394,112],{"class":111},[101,82396,82268],{"class":160},[101,82398,669],{"class":111},[101,82400,82273],{"class":160},[101,82402,112],{"class":111},[101,82404,404],{"class":160},[101,82406,12423],{"class":111},[101,82408,480],{"class":160},[101,82410,75298],{"class":111},[101,82412,33318],{"class":107},[101,82414,82384],{"class":216},[101,82416,82417,82419,82421,82423,82425,82427,82429,82431,82433,82435,82437,82439,82441,82443],{"class":103,"line":1316},[101,82418,82259],{"class":160},[101,82420,669],{"class":111},[101,82422,58236],{"class":160},[101,82424,112],{"class":111},[101,82426,82268],{"class":160},[101,82428,669],{"class":111},[101,82430,82273],{"class":160},[101,82432,112],{"class":111},[101,82434,480],{"class":160},[101,82436,12423],{"class":111},[101,82438,404],{"class":160},[101,82440,75242],{"class":111},[101,82442,33318],{"class":107},[101,82444,82384],{"class":216},[101,82446,82447],{"class":103,"line":1599},[101,82448,2387],{"emptyLinePlaceholder":27},[101,82450,82451,82453,82455,82457,82459,82461,82463,82465,82467,82469,82471,82473,82475,82477],{"class":103,"line":1604},[101,82452,82259],{"class":160},[101,82454,669],{"class":111},[101,82456,58236],{"class":160},[101,82458,112],{"class":111},[101,82460,82268],{"class":160},[101,82462,669],{"class":111},[101,82464,82273],{"class":160},[101,82466,112],{"class":111},[101,82468,303],{"class":160},[101,82470,12423],{"class":111},[101,82472,480],{"class":160},[101,82474,75242],{"class":111},[101,82476,33318],{"class":107},[101,82478,82479],{"class":216}," 'Mozilla'\n",[101,82481,82482,82484,82486,82488,82490,82492,82494,82496,82498,82500,82502,82504,82506,82508],{"class":103,"line":1610},[101,82483,82259],{"class":160},[101,82485,669],{"class":111},[101,82487,58236],{"class":160},[101,82489,112],{"class":111},[101,82491,82268],{"class":160},[101,82493,669],{"class":111},[101,82495,82273],{"class":160},[101,82497,112],{"class":111},[101,82499,303],{"class":160},[101,82501,12423],{"class":111},[101,82503,557],{"class":160},[101,82505,75242],{"class":111},[101,82507,33318],{"class":107},[101,82509,82479],{"class":216},[22898,82511,82513],{"id":82512},"_410533-startswith","4.10.5.3.3 startsWith",[10,82515,82516,82519,82520,82525,82526,82528,82529],{},[98,82517,82518],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[261,82521,82522],{},[98,82523,82524],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[98,82527,1349],{}," 或 ",[98,82530,66009],{},[92,82532,82534],{"className":77484,"code":82533,"language":77486,"meta":20,"style":20},"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",[98,82535,82536,82548,82567,82572,82592],{"__ignoreMap":20},[101,82537,82538,82540,82543,82545],{"class":103,"line":104},[101,82539,6780],{"class":107},[101,82541,82542],{"class":111}," str1 ",[101,82544,157],{"class":107},[101,82546,82547],{"class":216}," \"Saturday night plans\"\n",[101,82549,82550,82552,82554,82557,82560,82562,82565],{"class":103,"line":21},[101,82551,77521],{"class":111},[101,82553,58236],{"class":1950},[101,82555,82556],{"class":111},"(str1.",[101,82558,82559],{"class":1950},"startsWith",[101,82561,112],{"class":111},[101,82563,82564],{"class":216},"\"Sat\"",[101,82566,30486],{"class":111},[101,82568,82569],{"class":103,"line":1166},[101,82570,82571],{"class":170},"\u002F\u002F Expected output: true\n",[101,82573,82574,82576,82578,82580,82582,82584,82586,82588,82590],{"class":103,"line":1181},[101,82575,77521],{"class":111},[101,82577,58236],{"class":1950},[101,82579,82556],{"class":111},[101,82581,82559],{"class":1950},[101,82583,112],{"class":111},[101,82585,82564],{"class":216},[101,82587,12423],{"class":111},[101,82589,183],{"class":160},[101,82591,30486],{"class":111},[101,82593,82594],{"class":103,"line":1187},[101,82595,82596],{"class":170},"\u002F\u002F Expected output: false\n",[92,82598,82600],{"className":50622,"code":82599,"language":50624,"meta":20,"style":20},"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",[98,82601,82602,82607,82612,82616,82621,82626],{"__ignoreMap":20},[101,82603,82604],{"class":103,"line":104},[101,82605,82606],{"class":111},"startsWith(searchString)\n",[101,82608,82609],{"class":103,"line":21},[101,82610,82611],{"class":111},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[101,82613,82614],{"class":103,"line":1166},[101,82615,2387],{"emptyLinePlaceholder":27},[101,82617,82618],{"class":103,"line":1181},[101,82619,82620],{"class":111},"const str3 = 'pink老师上课中'\n",[101,82622,82623],{"class":103,"line":1187},[101,82624,82625],{"class":111},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[101,82627,82628],{"class":103,"line":1201},[101,82629,82630],{"class":111},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22898,82632,82634],{"id":82633},"_410534-includes","4.10.5.3.4 includes",[10,82636,82637],{},"includes(searchString) includes(searchString, position)",[55,82639,82640],{},[58,82641,82642],{},"searchString:",[10,82644,82645,82646,82648,82649,82654,82655,82660,82661,21488,82664,82667,82668,82671],{},"一个要在 ",[98,82647,1286],{}," 中查找的字符串。",[14,82650,82653],{"href":82651,"rel":82652},"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",[18],"不能是正则表达式","。所有非正则表达式的值都会被",[14,82656,82659],{"href":82657,"rel":82658},"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",[18],"强制转换为字符串","，因此如果该参数被省略或传入 ",[98,82662,82663],{},"undefined",[98,82665,82666],{},"includes()"," 方法会在字符串中搜索 ",[98,82669,82670],{},"\"undefined\"","，这通常不是你想要的",[55,82673,82674],{"start":21},[58,82675,82676,970],{},[98,82677,82678],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[10,82680,82681,82682,82685,82686],{},"在字符串中开始搜索 ",[98,82683,82684],{},"searchString"," 的位置。默认值为 ",[98,82687,303],{},[55,82689,82690],{"start":1166},[58,82691,82692],{},"返回值：",[10,82694,82695,82696,82698,82699,82703,82704],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[98,82697,82684],{}," 为空字符串的情况），则返回 ",[261,82700,82701],{},[98,82702,1349],{}," ，否则返回 ",[261,82705,82706],{},[98,82707,66009],{},[55,82709,82710],{"start":1181},[58,82711,82712],{},"异常：",[10,82714,82211,82715,13783,82717,82721],{},[98,82716,82684],{},[14,82718,82720],{"href":82651,"rel":82719},[18],"是一个正则表达式","，则会抛出",[10,82723,82724],{},"只要是有就是true，不需要非得以谁开头结尾",[92,82726,82728],{"className":77484,"code":82727,"language":77486,"meta":20,"style":20},"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",[98,82729,82730,82741,82764,82783,82803,82825,82844],{"__ignoreMap":20},[101,82731,82732,82734,82736,82738],{"class":103,"line":104},[101,82733,6780],{"class":107},[101,82735,79764],{"class":111},[101,82737,157],{"class":107},[101,82739,82740],{"class":216}," \"To be, or not to be, that is the question.\"\n",[101,82742,82743,82745,82747,82750,82753,82755,82758,82761],{"class":103,"line":21},[101,82744,77521],{"class":111},[101,82746,58236],{"class":1950},[101,82748,82749],{"class":111},"(str.",[101,82751,82752],{"class":1950},"includes",[101,82754,112],{"class":111},[101,82756,82757],{"class":216},"\"To be\"",[101,82759,82760],{"class":111},"))",[101,82762,82763],{"class":170},"  \u002F\u002F true\n",[101,82765,82766,82768,82770,82772,82774,82776,82779,82781],{"class":103,"line":1166},[101,82767,77521],{"class":111},[101,82769,58236],{"class":1950},[101,82771,82749],{"class":111},[101,82773,82752],{"class":1950},[101,82775,112],{"class":111},[101,82777,82778],{"class":216},"\"question\"",[101,82780,82760],{"class":111},[101,82782,82763],{"class":170},[101,82784,82785,82787,82789,82791,82793,82795,82798,82800],{"class":103,"line":1181},[101,82786,77521],{"class":111},[101,82788,58236],{"class":1950},[101,82790,82749],{"class":111},[101,82792,82752],{"class":1950},[101,82794,112],{"class":111},[101,82796,82797],{"class":216},"\"nonexistent\"",[101,82799,82760],{"class":111},[101,82801,82802],{"class":170},"  \u002F\u002F false\n",[101,82804,82805,82807,82809,82811,82813,82815,82817,82819,82821,82823],{"class":103,"line":1187},[101,82806,77521],{"class":111},[101,82808,58236],{"class":1950},[101,82810,82749],{"class":111},[101,82812,82752],{"class":1950},[101,82814,112],{"class":111},[101,82816,82757],{"class":216},[101,82818,12423],{"class":111},[101,82820,329],{"class":160},[101,82822,82760],{"class":111},[101,82824,82802],{"class":170},[101,82826,82827,82829,82831,82833,82835,82837,82840,82842],{"class":103,"line":1201},[101,82828,77521],{"class":111},[101,82830,58236],{"class":1950},[101,82832,82749],{"class":111},[101,82834,82752],{"class":1950},[101,82836,112],{"class":111},[101,82838,82839],{"class":216},"\"TO BE\"",[101,82841,82760],{"class":111},[101,82843,82802],{"class":170},[101,82845,82846,82848,82850,82852,82854,82856,82858,82860],{"class":103,"line":1207},[101,82847,77521],{"class":111},[101,82849,58236],{"class":1950},[101,82851,82749],{"class":111},[101,82853,82752],{"class":1950},[101,82855,112],{"class":111},[101,82857,7640],{"class":216},[101,82859,82760],{"class":111},[101,82861,82763],{"class":170},[22898,82863,82865],{"id":82864},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[92,82867,82869],{"className":53056,"code":82868,"language":53058,"meta":20,"style":20},"\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",[98,82870,82871,82879,82887,82892,82897,82902,82907,82912,82920],{"__ignoreMap":20},[101,82872,82873,82875,82877],{"class":103,"line":104},[101,82874,1021],{"class":111},[101,82876,51789],{"class":51289},[101,82878,51296],{"class":111},[101,82880,82881,82883,82885],{"class":103,"line":21},[101,82882,52133],{"class":111},[101,82884,51802],{"class":51289},[101,82886,51296],{"class":111},[101,82888,82889],{"class":103,"line":1166},[101,82890,82891],{"class":111},"    const num = 10\n",[101,82893,82894],{"class":103,"line":1181},[101,82895,82896],{"class":111},"    \u002F\u002F 强制转换\n",[101,82898,82899],{"class":103,"line":1187},[101,82900,82901],{"class":111},"    console.log(String(num))\n",[101,82903,82904],{"class":103,"line":1201},[101,82905,82906],{"class":111},"    \u002F\u002F toString()方法转换\n",[101,82908,82909],{"class":103,"line":1207},[101,82910,82911],{"class":111},"    console.log(num.toString())\n",[101,82913,82914,82916,82918],{"class":103,"line":1298},[101,82915,52406],{"class":111},[101,82917,51802],{"class":51289},[101,82919,51296],{"class":111},[101,82921,82922,82924,82926],{"class":103,"line":1304},[101,82923,51774],{"class":111},[101,82925,51789],{"class":51289},[101,82927,51296],{"class":111},[22898,82929,82931],{"id":82930},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[10,82933,82934],{},[1449,82935],{"alt":20,"src":82936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[92,82938,82940],{"className":50622,"code":82939,"language":50624,"meta":20,"style":20},"\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",[98,82941,82942,82952,82966,82970,82978,82992,83012,83024,83032,83036,83044,83056,83064,83076,83081,83086,83091,83138,83154,83162,83170,83174],{"__ignoreMap":20},[101,82943,82944,82946,82948,82950],{"class":103,"line":104},[101,82945,51286],{"class":111},[101,82947,51290],{"class":51289},[101,82949,51293],{"class":1950},[101,82951,51296],{"class":111},[101,82953,82954,82956,82958,82960,82962,82964],{"class":103,"line":21},[101,82955,1021],{"class":111},[101,82957,50624],{"class":51289},[101,82959,51305],{"class":1950},[101,82961,157],{"class":111},[101,82963,51310],{"class":216},[101,82965,51296],{"class":111},[101,82967,82968],{"class":103,"line":1166},[101,82969,2387],{"emptyLinePlaceholder":27},[101,82971,82972,82974,82976],{"class":103,"line":1181},[101,82973,1021],{"class":111},[101,82975,51323],{"class":51289},[101,82977,51296],{"class":111},[101,82979,82980,82982,82984,82986,82988,82990],{"class":103,"line":1187},[101,82981,52133],{"class":111},[101,82983,51333],{"class":51289},[101,82985,51336],{"class":1950},[101,82987,157],{"class":111},[101,82989,51341],{"class":216},[101,82991,51296],{"class":111},[101,82993,82994,82996,82998,83000,83002,83004,83006,83008,83010],{"class":103,"line":1201},[101,82995,52133],{"class":111},[101,82997,51333],{"class":51289},[101,82999,14908],{"class":1950},[101,83001,157],{"class":111},[101,83003,51380],{"class":216},[101,83005,51360],{"class":1950},[101,83007,157],{"class":111},[101,83009,51387],{"class":216},[101,83011,51296],{"class":111},[101,83013,83014,83016,83018,83020,83022],{"class":103,"line":1207},[101,83015,52133],{"class":111},[101,83017,51396],{"class":51289},[101,83019,51399],{"class":111},[101,83021,51396],{"class":51289},[101,83023,51296],{"class":111},[101,83025,83026,83028,83030],{"class":103,"line":1298},[101,83027,51774],{"class":111},[101,83029,51323],{"class":51289},[101,83031,51296],{"class":111},[101,83033,83034],{"class":103,"line":1304},[101,83035,2387],{"emptyLinePlaceholder":27},[101,83037,83038,83040,83042],{"class":103,"line":1316},[101,83039,1021],{"class":111},[101,83041,51789],{"class":51289},[101,83043,51296],{"class":111},[101,83045,83046,83048,83050,83052,83054],{"class":103,"line":1599},[101,83047,52133],{"class":111},[101,83049,51600],{"class":51289},[101,83051,55303],{"class":111},[101,83053,51600],{"class":51289},[101,83055,51296],{"class":111},[101,83057,83058,83060,83062],{"class":103,"line":1604},[101,83059,52133],{"class":111},[101,83061,51802],{"class":51289},[101,83063,51296],{"class":111},[101,83065,83066,83068,83071,83073],{"class":103,"line":1610},[101,83067,11209],{"class":107},[101,83069,83070],{"class":160}," gift",[101,83072,13552],{"class":107},[101,83074,83075],{"class":216}," '50g的茶叶，清洗球'\n",[101,83077,83078],{"class":103,"line":1615},[101,83079,83080],{"class":170},"    \u002F\u002F 1.把字符串拆分为数组\n",[101,83082,83083],{"class":103,"line":1629},[101,83084,83085],{"class":170},"    \u002F\u002F console.log(gift.split(','))\n",[101,83087,83088],{"class":103,"line":1634},[101,83089,83090],{"class":170},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[101,83092,83093,83095,83097,83099,83102,83105,83107,83110,83112,83114,83116,83118,83120,83123,83125,83128,83130,83132,83134,83136],{"class":103,"line":1640},[101,83094,11209],{"class":107},[101,83096,73908],{"class":160},[101,83098,13552],{"class":107},[101,83100,83101],{"class":111}," gift.",[101,83103,83104],{"class":1950},"split",[101,83106,112],{"class":111},[101,83108,83109],{"class":216},"'，'",[101,83111,30815],{"class":111},[101,83113,74033],{"class":1950},[101,83115,112],{"class":111},[101,83117,79784],{"class":5204},[101,83119,79787],{"class":107},[101,83121,83122],{"class":216}," `\u003Cspan>【赠品】${",[101,83124,79784],{"class":111},[101,83126,83127],{"class":216},"}\u003C\u002Fspan>\u003Cbr>`",[101,83129,30815],{"class":111},[101,83131,74212],{"class":1950},[101,83133,112],{"class":111},[101,83135,74217],{"class":216},[101,83137,118],{"class":111},[101,83139,83140,83142,83144,83146,83148,83150,83152],{"class":103,"line":1661},[101,83141,52396],{"class":111},[101,83143,54388],{"class":1950},[101,83145,112],{"class":111},[101,83147,81920],{"class":216},[101,83149,74238],{"class":111},[101,83151,157],{"class":107},[101,83153,73974],{"class":111},[101,83155,83156,83158,83160],{"class":103,"line":1666},[101,83157,52406],{"class":111},[101,83159,51802],{"class":51289},[101,83161,51296],{"class":111},[101,83163,83164,83166,83168],{"class":103,"line":1680},[101,83165,51774],{"class":111},[101,83167,51789],{"class":51289},[101,83169,51296],{"class":111},[101,83171,83172],{"class":103,"line":1685},[101,83173,2387],{"emptyLinePlaceholder":27},[101,83175,83176,83178,83180],{"class":103,"line":1714},[101,83177,51774],{"class":111},[101,83179,50624],{"class":51289},[101,83181,51296],{"class":111},[21986,83183,83185],{"id":83184},"_41054-number","4.10.5.4 Number",[10,83187,83188],{},[1449,83189],{"alt":20,"src":83190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[10,83192,83193],{},"整数也可以进行toFixed来保留小数",[10,83195,83196],{},"比如：",[10,83198,83199],{},"const price=10",[10,83201,83202],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21986,83204,83206],{"id":83205},"_41055-购物车展示","4.10.5.5 购物车展示",[10,83208,83209],{},[1449,83210],{"alt":20,"src":83211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[92,83213,83215],{"className":50622,"code":83214,"language":50624,"meta":20,"style":20},"\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",[98,83216,83217,83227,83241,83245,83253,83267,83287,83299,83307,83313,83323,83333,83343,83347,83351,83357,83369,83383,83387,83391,83397,83409,83425,83435,83451,83455,83459,83465,83475,83485,83489,83493,83501,83513,83525,83537,83541,83545,83553,83565,83569,83573,83584,83594,83606,83618,83628,83632,83636,83644,83653,83665,83675,83685,83689,83693,83701,83710,83717,83727,83739,83743,83747,83756,83766,83777,83789,83801,83805,83809,83818,83828,83839,83843,83847,83853,83865,83877,83887,83897,83915,83927,83931,83935,83944,83956,83966,83976,83988,83992,84000,84008,84012,84020,84034,84042,84056,84084,84092,84100,84110,84114,84122,84130,84139,84147,84156,84166,84170,84174,84182,84190,84199,84207,84215,84228,84232,84236,84244,84252,84261,84269,84277,84292,84296,84300,84308,84316,84325,84333,84341,84355,84363,84367,84371,84376,84402,84407,84444,84449,84472,84477,84531,84536,84572,84576,84582,84587,84596,84610,84619,84638,84647,84657,84662,84667,84680,84685,84739,84765,84773,84781,84785],{"__ignoreMap":20},[101,83218,83219,83221,83223,83225],{"class":103,"line":104},[101,83220,51286],{"class":111},[101,83222,51290],{"class":51289},[101,83224,51293],{"class":1950},[101,83226,51296],{"class":111},[101,83228,83229,83231,83233,83235,83237,83239],{"class":103,"line":21},[101,83230,1021],{"class":111},[101,83232,50624],{"class":51289},[101,83234,51305],{"class":1950},[101,83236,157],{"class":111},[101,83238,51310],{"class":216},[101,83240,51296],{"class":111},[101,83242,83243],{"class":103,"line":1166},[101,83244,2387],{"emptyLinePlaceholder":27},[101,83246,83247,83249,83251],{"class":103,"line":1181},[101,83248,1021],{"class":111},[101,83250,51323],{"class":51289},[101,83252,51296],{"class":111},[101,83254,83255,83257,83259,83261,83263,83265],{"class":103,"line":1187},[101,83256,52133],{"class":111},[101,83258,51333],{"class":51289},[101,83260,51336],{"class":1950},[101,83262,157],{"class":111},[101,83264,51341],{"class":216},[101,83266,51296],{"class":111},[101,83268,83269,83271,83273,83275,83277,83279,83281,83283,83285],{"class":103,"line":1201},[101,83270,52133],{"class":111},[101,83272,51333],{"class":51289},[101,83274,14908],{"class":1950},[101,83276,157],{"class":111},[101,83278,51380],{"class":216},[101,83280,51360],{"class":1950},[101,83282,157],{"class":111},[101,83284,51387],{"class":216},[101,83286,51296],{"class":111},[101,83288,83289,83291,83293,83295,83297],{"class":103,"line":1207},[101,83290,52133],{"class":111},[101,83292,51396],{"class":51289},[101,83294,51399],{"class":111},[101,83296,51396],{"class":51289},[101,83298,51296],{"class":111},[101,83300,83301,83303,83305],{"class":103,"line":1298},[101,83302,52133],{"class":111},[101,83304,5114],{"class":51289},[101,83306,51296],{"class":111},[101,83308,83309,83311],{"class":103,"line":1304},[101,83310,6391],{"class":51289},[101,83312,15560],{"class":111},[101,83314,83315,83317,83319,83321],{"class":103,"line":1316},[101,83316,54684],{"class":160},[101,83318,51426],{"class":111},[101,83320,303],{"class":160},[101,83322,1277],{"class":111},[101,83324,83325,83327,83329,83331],{"class":103,"line":1599},[101,83326,54695],{"class":160},[101,83328,51426],{"class":111},[101,83330,303],{"class":160},[101,83332,1277],{"class":111},[101,83334,83335,83337,83339,83341],{"class":103,"line":1604},[101,83336,72585],{"class":160},[101,83338,51426],{"class":111},[101,83340,60494],{"class":160},[101,83342,1277],{"class":111},[101,83344,83345],{"class":103,"line":1610},[101,83346,2174],{"class":111},[101,83348,83349],{"class":103,"line":1615},[101,83350,2387],{"emptyLinePlaceholder":27},[101,83352,83353,83355],{"class":103,"line":1629},[101,83354,62112],{"class":1950},[101,83356,15560],{"class":111},[101,83358,83359,83361,83363,83365,83367],{"class":103,"line":1634},[101,83360,54760],{"class":160},[101,83362,51426],{"class":111},[101,83364,78563],{"class":160},[101,83366,51481],{"class":107},[101,83368,1277],{"class":111},[101,83370,83371,83373,83375,83377,83379,83381],{"class":103,"line":1640},[101,83372,54695],{"class":160},[101,83374,51426],{"class":111},[101,83376,422],{"class":160},[101,83378,51481],{"class":107},[101,83380,51545],{"class":160},[101,83382,1277],{"class":111},[101,83384,83385],{"class":103,"line":1661},[101,83386,2174],{"class":111},[101,83388,83389],{"class":103,"line":1666},[101,83390,2387],{"emptyLinePlaceholder":27},[101,83392,83393,83395],{"class":103,"line":1680},[101,83394,78614],{"class":1950},[101,83396,15560],{"class":111},[101,83398,83399,83401,83403,83405,83407],{"class":103,"line":1685},[101,83400,54684],{"class":160},[101,83402,51426],{"class":111},[101,83404,686],{"class":160},[101,83406,51481],{"class":107},[101,83408,1277],{"class":111},[101,83410,83411,83413,83415,83417,83419,83421,83423],{"class":103,"line":1714},[101,83412,61849],{"class":160},[101,83414,51426],{"class":111},[101,83416,28110],{"class":160},[101,83418,78669],{"class":160},[101,83420,78672],{"class":160},[101,83422,806],{"class":107},[101,83424,1277],{"class":111},[101,83426,83427,83429,83431,83433],{"class":103,"line":1719},[101,83428,54998],{"class":160},[101,83430,51426],{"class":111},[101,83432,51466],{"class":160},[101,83434,1277],{"class":111},[101,83436,83437,83439,83441,83443,83445,83447,83449],{"class":103,"line":1736},[101,83438,61966],{"class":160},[101,83440,51426],{"class":111},[101,83442,329],{"class":160},[101,83444,51481],{"class":107},[101,83446,51510],{"class":160},[101,83448,62233],{"class":160},[101,83450,1277],{"class":111},[101,83452,83453],{"class":103,"line":1741},[101,83454,2174],{"class":111},[101,83456,83457],{"class":103,"line":1746},[101,83458,2387],{"emptyLinePlaceholder":27},[101,83460,83461,83463],{"class":103,"line":1751},[101,83462,78732],{"class":1950},[101,83464,15560],{"class":111},[101,83466,83467,83469,83471,83473],{"class":103,"line":1765},[101,83468,62014],{"class":160},[101,83470,51426],{"class":111},[101,83472,62019],{"class":160},[101,83474,1277],{"class":111},[101,83476,83477,83479,83481,83483],{"class":103,"line":1770},[101,83478,54873],{"class":160},[101,83480,51426],{"class":111},[101,83482,61807],{"class":160},[101,83484,1277],{"class":111},[101,83486,83487],{"class":103,"line":2564},[101,83488,2174],{"class":111},[101,83490,83491],{"class":103,"line":2578},[101,83492,2387],{"emptyLinePlaceholder":27},[101,83494,83495,83497,83499],{"class":103,"line":2586},[101,83496,78614],{"class":1950},[101,83498,55604],{"class":51289},[101,83500,15560],{"class":111},[101,83502,83503,83505,83507,83509,83511],{"class":103,"line":2591},[101,83504,54760],{"class":160},[101,83506,51426],{"class":111},[101,83508,723],{"class":160},[101,83510,51481],{"class":107},[101,83512,1277],{"class":111},[101,83514,83515,83517,83519,83521,83523],{"class":103,"line":2597},[101,83516,54774],{"class":160},[101,83518,51426],{"class":111},[101,83520,723],{"class":160},[101,83522,51481],{"class":107},[101,83524,1277],{"class":111},[101,83526,83527,83529,83531,83533,83535],{"class":103,"line":2603},[101,83528,61739],{"class":160},[101,83530,51426],{"class":111},[101,83532,430],{"class":160},[101,83534,51481],{"class":107},[101,83536,1277],{"class":111},[101,83538,83539],{"class":103,"line":2608},[101,83540,2174],{"class":111},[101,83542,83543],{"class":103,"line":7936},[101,83544,2387],{"emptyLinePlaceholder":27},[101,83546,83547,83549,83551],{"class":103,"line":7960},[101,83548,78614],{"class":1950},[101,83550,62293],{"class":1950},[101,83552,15560],{"class":111},[101,83554,83555,83557,83559,83561,83563],{"class":103,"line":7965},[101,83556,54760],{"class":160},[101,83558,51426],{"class":111},[101,83560,1709],{"class":160},[101,83562,51481],{"class":107},[101,83564,1277],{"class":111},[101,83566,83567],{"class":103,"line":7971},[101,83568,2174],{"class":111},[101,83570,83571],{"class":103,"line":7998},[101,83572,2387],{"emptyLinePlaceholder":27},[101,83574,83575,83577,83579,83582],{"class":103,"line":8003},[101,83576,78614],{"class":1950},[101,83578,62293],{"class":1950},[101,83580,83581],{"class":1950}," .tag",[101,83583,15560],{"class":111},[101,83585,83586,83588,83590,83592],{"class":103,"line":8009},[101,83587,54998],{"class":160},[101,83589,51426],{"class":111},[101,83591,60858],{"class":160},[101,83593,1277],{"class":111},[101,83595,83596,83598,83600,83602,83604],{"class":103,"line":8021},[101,83597,54684],{"class":160},[101,83599,51426],{"class":111},[101,83601,189],{"class":160},[101,83603,51481],{"class":107},[101,83605,1277],{"class":111},[101,83607,83608,83610,83612,83614,83616],{"class":103,"line":8033},[101,83609,54911],{"class":160},[101,83611,51426],{"class":111},[101,83613,609],{"class":160},[101,83615,51481],{"class":107},[101,83617,1277],{"class":111},[101,83619,83620,83622,83624,83626],{"class":103,"line":8045},[101,83621,57405],{"class":160},[101,83623,51426],{"class":111},[101,83625,62059],{"class":160},[101,83627,1277],{"class":111},[101,83629,83630],{"class":103,"line":9704},[101,83631,2174],{"class":111},[101,83633,83634],{"class":103,"line":9729},[101,83635,2387],{"emptyLinePlaceholder":27},[101,83637,83638,83640,83642],{"class":103,"line":9752},[101,83639,78614],{"class":1950},[101,83641,78906],{"class":1950},[101,83643,31455],{"class":111},[101,83645,83646,83648,83651],{"class":103,"line":9776},[101,83647,78614],{"class":1950},[101,83649,83650],{"class":1950}," .sub-total",[101,83652,15560],{"class":111},[101,83654,83655,83657,83659,83661,83663],{"class":103,"line":9781},[101,83656,54911],{"class":160},[101,83658,51426],{"class":111},[101,83660,761],{"class":160},[101,83662,51481],{"class":107},[101,83664,1277],{"class":111},[101,83666,83667,83669,83671,83673],{"class":103,"line":9786},[101,83668,57405],{"class":160},[101,83670,51426],{"class":111},[101,83672,78929],{"class":160},[101,83674,1277],{"class":111},[101,83676,83677,83679,83681,83683],{"class":103,"line":9791},[101,83678,61826],{"class":160},[101,83680,51426],{"class":111},[101,83682,329],{"class":160},[101,83684,1277],{"class":111},[101,83686,83687],{"class":103,"line":9800},[101,83688,2174],{"class":111},[101,83690,83691],{"class":103,"line":9805},[101,83692,2387],{"emptyLinePlaceholder":27},[101,83694,83695,83697,83699],{"class":103,"line":9811},[101,83696,78614],{"class":1950},[101,83698,78946],{"class":1950},[101,83700,31455],{"class":111},[101,83702,83703,83705,83708],{"class":103,"line":9832},[101,83704,78614],{"class":1950},[101,83706,83707],{"class":1950}," .sub-total::before",[101,83709,31455],{"class":111},[101,83711,83712,83715],{"class":103,"line":9838},[101,83713,83714],{"class":1950},"    .amount::before",[101,83716,15560],{"class":111},[101,83718,83719,83721,83723,83725],{"class":103,"line":9852},[101,83720,78953],{"class":160},[101,83722,51426],{"class":111},[101,83724,78958],{"class":216},[101,83726,1277],{"class":111},[101,83728,83729,83731,83733,83735,83737],{"class":103,"line":9858},[101,83730,54911],{"class":160},[101,83732,51426],{"class":111},[101,83734,609],{"class":160},[101,83736,51481],{"class":107},[101,83738,1277],{"class":111},[101,83740,83741],{"class":103,"line":9885},[101,83742,2174],{"class":111},[101,83744,83745],{"class":103,"line":9894},[101,83746,2387],{"emptyLinePlaceholder":27},[101,83748,83749,83751,83754],{"class":103,"line":9900},[101,83750,78614],{"class":1950},[101,83752,83753],{"class":1950}," .spec",[101,83755,15560],{"class":111},[101,83757,83758,83760,83762,83764],{"class":103,"line":9908},[101,83759,61826],{"class":160},[101,83761,51426],{"class":111},[101,83763,189],{"class":160},[101,83765,1277],{"class":111},[101,83767,83768,83770,83772,83775],{"class":103,"line":9913},[101,83769,57405],{"class":160},[101,83771,51426],{"class":111},[101,83773,83774],{"class":160},"#888",[101,83776,1277],{"class":111},[101,83778,83779,83781,83783,83785,83787],{"class":103,"line":16592},[101,83780,54911],{"class":160},[101,83782,51426],{"class":111},[101,83784,660],{"class":160},[101,83786,51481],{"class":107},[101,83788,1277],{"class":111},[101,83790,83791,83793,83795,83797,83799],{"class":103,"line":16598},[101,83792,61989],{"class":160},[101,83794,51426],{"class":111},[101,83796,811],{"class":160},[101,83798,51481],{"class":107},[101,83800,1277],{"class":111},[101,83802,83803],{"class":103,"line":16621},[101,83804,2174],{"class":111},[101,83806,83807],{"class":103,"line":16627},[101,83808,2387],{"emptyLinePlaceholder":27},[101,83810,83811,83813,83816],{"class":103,"line":16650},[101,83812,78614],{"class":1950},[101,83814,83815],{"class":1950}," .count",[101,83817,15560],{"class":111},[101,83819,83820,83822,83824,83826],{"class":103,"line":16664},[101,83821,61826],{"class":160},[101,83823,51426],{"class":111},[101,83825,329],{"class":160},[101,83827,1277],{"class":111},[101,83829,83830,83832,83834,83837],{"class":103,"line":16684},[101,83831,57405],{"class":160},[101,83833,51426],{"class":111},[101,83835,83836],{"class":160},"#aaa",[101,83838,1277],{"class":111},[101,83840,83841],{"class":103,"line":16690},[101,83842,2174],{"class":111},[101,83844,83845],{"class":103,"line":16701},[101,83846,2387],{"emptyLinePlaceholder":27},[101,83848,83849,83851],{"class":103,"line":16724},[101,83850,72464],{"class":1950},[101,83852,15560],{"class":111},[101,83854,83855,83857,83859,83861,83863],{"class":103,"line":16746},[101,83856,54760],{"class":160},[101,83858,51426],{"class":111},[101,83860,78563],{"class":160},[101,83862,51481],{"class":107},[101,83864,1277],{"class":111},[101,83866,83867,83869,83871,83873,83875],{"class":103,"line":16751},[101,83868,54695],{"class":160},[101,83870,51426],{"class":111},[101,83872,303],{"class":160},[101,83874,51545],{"class":160},[101,83876,1277],{"class":111},[101,83878,83879,83881,83883,83885],{"class":103,"line":16757},[101,83880,54998],{"class":160},[101,83882,51426],{"class":111},[101,83884,51466],{"class":160},[101,83886,1277],{"class":111},[101,83888,83889,83891,83893,83895],{"class":103,"line":16771},[101,83890,55009],{"class":160},[101,83892,51426],{"class":111},[101,83894,51569],{"class":160},[101,83896,1277],{"class":111},[101,83898,83899,83902,83904,83906,83908,83910,83913],{"class":103,"line":16784},[101,83900,83901],{"class":160},"      border-top",[101,83903,51426],{"class":111},[101,83905,329],{"class":160},[101,83907,51481],{"class":107},[101,83909,51510],{"class":160},[101,83911,83912],{"class":160}," #4e4e4e",[101,83914,1277],{"class":111},[101,83916,83917,83919,83921,83923,83925],{"class":103,"line":16789},[101,83918,54684],{"class":160},[101,83920,51426],{"class":111},[101,83922,811],{"class":160},[101,83924,51481],{"class":107},[101,83926,1277],{"class":111},[101,83928,83929],{"class":103,"line":16803},[101,83930,2174],{"class":111},[101,83932,83933],{"class":103,"line":16808},[101,83934,2387],{"emptyLinePlaceholder":27},[101,83936,83937,83939,83942],{"class":103,"line":16814},[101,83938,72464],{"class":1950},[101,83940,83941],{"class":1950}," .amount",[101,83943,15560],{"class":111},[101,83945,83946,83948,83950,83952,83954],{"class":103,"line":16819},[101,83947,54911],{"class":160},[101,83949,51426],{"class":111},[101,83951,761],{"class":160},[101,83953,51481],{"class":107},[101,83955,1277],{"class":111},[101,83957,83958,83960,83962,83964],{"class":103,"line":16833},[101,83959,57405],{"class":160},[101,83961,51426],{"class":111},[101,83963,78929],{"class":160},[101,83965,1277],{"class":111},[101,83967,83968,83970,83972,83974],{"class":103,"line":16838},[101,83969,62323],{"class":160},[101,83971,51426],{"class":111},[101,83973,51478],{"class":160},[101,83975,1277],{"class":111},[101,83977,83978,83980,83982,83984,83986],{"class":103,"line":16843},[101,83979,61739],{"class":160},[101,83981,51426],{"class":111},[101,83983,767],{"class":160},[101,83985,51481],{"class":107},[101,83987,1277],{"class":111},[101,83989,83990],{"class":103,"line":16857},[101,83991,2174],{"class":111},[101,83993,83994,83996,83998],{"class":103,"line":16869},[101,83995,52406],{"class":111},[101,83997,5114],{"class":51289},[101,83999,51296],{"class":111},[101,84001,84002,84004,84006],{"class":103,"line":16874},[101,84003,51774],{"class":111},[101,84005,51323],{"class":51289},[101,84007,51296],{"class":111},[101,84009,84010],{"class":103,"line":16887},[101,84011,2387],{"emptyLinePlaceholder":27},[101,84013,84014,84016,84018],{"class":103,"line":16892},[101,84015,1021],{"class":111},[101,84017,51789],{"class":51289},[101,84019,51296],{"class":111},[101,84021,84022,84024,84026,84028,84030,84032],{"class":103,"line":16897},[101,84023,52133],{"class":111},[101,84025,51600],{"class":51289},[101,84027,53475],{"class":1950},[101,84029,157],{"class":111},[101,84031,62597],{"class":216},[101,84033,51296],{"class":111},[101,84035,84036,84038,84040],{"class":103,"line":16902},[101,84037,52406],{"class":111},[101,84039,51600],{"class":51289},[101,84041,51296],{"class":111},[101,84043,84044,84046,84048,84050,84052,84054],{"class":103,"line":16915},[101,84045,52133],{"class":111},[101,84047,51600],{"class":51289},[101,84049,53475],{"class":1950},[101,84051,157],{"class":111},[101,84053,62569],{"class":216},[101,84055,51296],{"class":111},[101,84057,84058,84060,84062,84065,84067,84069,84071,84074,84076,84078,84080,84082],{"class":103,"line":16920},[101,84059,51330],{"class":111},[101,84061,51600],{"class":51289},[101,84063,84064],{"class":111},">合计：\u003C",[101,84066,101],{"class":51289},[101,84068,53475],{"class":1950},[101,84070,157],{"class":111},[101,84072,84073],{"class":216},"\"amount\"",[101,84075,55303],{"class":111},[101,84077,101],{"class":51289},[101,84079,55303],{"class":111},[101,84081,51600],{"class":51289},[101,84083,51296],{"class":111},[101,84085,84086,84088,84090],{"class":103,"line":32622},[101,84087,52406],{"class":111},[101,84089,51600],{"class":51289},[101,84091,51296],{"class":111},[101,84093,84094,84096,84098],{"class":103,"line":32628},[101,84095,52133],{"class":111},[101,84097,51802],{"class":51289},[101,84099,51296],{"class":111},[101,84101,84102,84104,84106,84108],{"class":103,"line":32634},[101,84103,11209],{"class":107},[101,84105,79366],{"class":160},[101,84107,13552],{"class":107},[101,84109,55436],{"class":111},[101,84111,84112],{"class":103,"line":32640},[101,84113,79375],{"class":111},[101,84115,84116,84118,84120],{"class":103,"line":32646},[101,84117,79380],{"class":111},[101,84119,79383],{"class":216},[101,84121,31455],{"class":111},[101,84123,84124,84126,84128],{"class":103,"line":32657},[101,84125,79390],{"class":111},[101,84127,79393],{"class":216},[101,84129,31455],{"class":111},[101,84131,84132,84134,84137],{"class":103,"line":32663},[101,84133,79400],{"class":111},[101,84135,84136],{"class":160},"289.9",[101,84138,31455],{"class":111},[101,84140,84141,84143,84145],{"class":103,"line":32683},[101,84142,79410],{"class":111},[101,84144,79413],{"class":216},[101,84146,31455],{"class":111},[101,84148,84149,84152,84154],{"class":103,"line":32689},[101,84150,84151],{"class":111},"        count: ",[101,84153,189],{"class":160},[101,84155,31455],{"class":111},[101,84157,84158,84161,84164],{"class":103,"line":32700},[101,84159,84160],{"class":111},"        spec: { color: ",[101,84162,84163],{"class":216},"'白色'",[101,84165,55593],{"class":111},[101,84167,84168],{"class":103,"line":32706},[101,84169,77881],{"class":111},[101,84171,84172],{"class":103,"line":32712},[101,84173,79375],{"class":111},[101,84175,84176,84178,84180],{"class":103,"line":32718},[101,84177,79380],{"class":111},[101,84179,79474],{"class":216},[101,84181,31455],{"class":111},[101,84183,84184,84186,84188],{"class":103,"line":32724},[101,84185,79390],{"class":111},[101,84187,79483],{"class":216},[101,84189,31455],{"class":111},[101,84191,84192,84194,84197],{"class":103,"line":32730},[101,84193,79400],{"class":111},[101,84195,84196],{"class":160},"109.8",[101,84198,31455],{"class":111},[101,84200,84201,84203,84205],{"class":103,"line":32736},[101,84202,79410],{"class":111},[101,84204,79501],{"class":216},[101,84206,31455],{"class":111},[101,84208,84209,84211,84213],{"class":103,"line":32742},[101,84210,84151],{"class":111},[101,84212,183],{"class":160},[101,84214,31455],{"class":111},[101,84216,84217,84220,84222,84224,84226],{"class":103,"line":32762},[101,84218,84219],{"class":111},"        spec: { size: ",[101,84221,81892],{"class":216},[101,84223,55453],{"class":111},[101,84225,81897],{"class":216},[101,84227,55593],{"class":111},[101,84229,84230],{"class":103,"line":32768},[101,84231,77881],{"class":111},[101,84233,84234],{"class":103,"line":32784},[101,84235,79375],{"class":111},[101,84237,84238,84240,84242],{"class":103,"line":32790},[101,84239,79380],{"class":111},[101,84241,79518],{"class":216},[101,84243,31455],{"class":111},[101,84245,84246,84248,84250],{"class":103,"line":32804},[101,84247,79390],{"class":111},[101,84249,79527],{"class":216},[101,84251,31455],{"class":111},[101,84253,84254,84256,84259],{"class":103,"line":32810},[101,84255,79400],{"class":111},[101,84257,84258],{"class":160},"488",[101,84260,31455],{"class":111},[101,84262,84263,84265,84267],{"class":103,"line":32825},[101,84264,79410],{"class":111},[101,84266,79545],{"class":216},[101,84268,31455],{"class":111},[101,84270,84271,84273,84275],{"class":103,"line":32831},[101,84272,84151],{"class":111},[101,84274,329],{"class":160},[101,84276,31455],{"class":111},[101,84278,84279,84281,84284,84287,84290],{"class":103,"line":32840},[101,84280,84160],{"class":111},[101,84282,84283],{"class":216},"'青色'",[101,84285,84286],{"class":111},", sum: ",[101,84288,84289],{"class":216},"'一大四小'",[101,84291,55593],{"class":111},[101,84293,84294],{"class":103,"line":32846},[101,84295,77881],{"class":111},[101,84297,84298],{"class":103,"line":32855},[101,84299,79375],{"class":111},[101,84301,84302,84304,84306],{"class":103,"line":32861},[101,84303,79380],{"class":111},[101,84305,79562],{"class":216},[101,84307,31455],{"class":111},[101,84309,84310,84312,84314],{"class":103,"line":32867},[101,84311,79390],{"class":111},[101,84313,79571],{"class":216},[101,84315,31455],{"class":111},[101,84317,84318,84320,84323],{"class":103,"line":32876},[101,84319,79400],{"class":111},[101,84321,84322],{"class":160},"139",[101,84324,31455],{"class":111},[101,84326,84327,84329,84331],{"class":103,"line":32882},[101,84328,79410],{"class":111},[101,84330,79589],{"class":216},[101,84332,31455],{"class":111},[101,84334,84335,84337,84339],{"class":103,"line":32893},[101,84336,84151],{"class":111},[101,84338,329],{"class":160},[101,84340,31455],{"class":111},[101,84342,84343,84345,84348,84350,84353],{"class":103,"line":32899},[101,84344,84219],{"class":111},[101,84346,84347],{"class":216},"'小号'",[101,84349,55453],{"class":111},[101,84351,84352],{"class":216},"'紫色'",[101,84354,55459],{"class":111},[101,84356,84357,84360],{"class":103,"line":32918},[101,84358,84359],{"class":111},"        gift: ",[101,84361,84362],{"class":216},"'50g茶叶,清洗球'\n",[101,84364,84365],{"class":103,"line":32924},[101,84366,52387],{"class":111},[101,84368,84369],{"class":103,"line":32935},[101,84370,53098],{"class":111},[101,84372,84373],{"class":103,"line":32941},[101,84374,84375],{"class":170},"    \u002F\u002F  1.根据数据渲染页面\n",[101,84377,84378,84380,84382,84384,84386,84388,84390,84392,84394,84396,84398,84400],{"class":103,"line":32961},[101,84379,52396],{"class":111},[101,84381,54388],{"class":1950},[101,84383,112],{"class":111},[101,84385,79890],{"class":216},[101,84387,74238],{"class":111},[101,84389,157],{"class":107},[101,84391,80037],{"class":111},[101,84393,74033],{"class":1950},[101,84395,112],{"class":111},[101,84397,79784],{"class":5204},[101,84399,79787],{"class":107},[101,84401,15560],{"class":111},[101,84403,84404],{"class":103,"line":32977},[101,84405,84406],{"class":170},"      \u002F\u002F 对象解构\n",[101,84408,84409,84411,84413,84415,84417,84419,84421,84424,84426,84428,84430,84433,84435,84438,84440,84442],{"class":103,"line":32983},[101,84410,58217],{"class":107},[101,84412,79796],{"class":111},[101,84414,79809],{"class":160},[101,84416,12423],{"class":111},[101,84418,79799],{"class":160},[101,84420,12423],{"class":111},[101,84422,84423],{"class":160},"count",[101,84425,12423],{"class":111},[101,84427,79804],{"class":160},[101,84429,12423],{"class":111},[101,84431,84432],{"class":160},"spec",[101,84434,12423],{"class":111},[101,84436,84437],{"class":160},"gift",[101,84439,79812],{"class":111},[101,84441,157],{"class":107},[101,84443,79817],{"class":111},[101,84445,84446],{"class":103,"line":32997},[101,84447,84448],{"class":170},"      \u002F\u002F 规格文字模块处理\n",[101,84450,84451,84453,84456,84458,84460,84462,84464,84466,84468,84470],{"class":103,"line":33003},[101,84452,58217],{"class":107},[101,84454,84455],{"class":160}," text",[101,84457,13552],{"class":107},[101,84459,81927],{"class":111},[101,84461,81930],{"class":1950},[101,84463,81933],{"class":111},[101,84465,74212],{"class":1950},[101,84467,112],{"class":111},[101,84469,81940],{"class":216},[101,84471,118],{"class":111},[101,84473,84474],{"class":103,"line":33009},[101,84475,84476],{"class":170},"      \u002F\u002F 处理赠品模块\n",[101,84478,84479,84481,84483,84485,84488,84490,84492,84494,84496,84499,84501,84503,84505,84507,84509,84512,84514,84517,84519,84521,84523,84525,84527,84529],{"class":103,"line":33020},[101,84480,58217],{"class":107},[101,84482,73908],{"class":160},[101,84484,13552],{"class":107},[101,84486,84487],{"class":111}," gift ",[101,84489,1097],{"class":107},[101,84491,83101],{"class":111},[101,84493,83104],{"class":1950},[101,84495,112],{"class":111},[101,84497,84498],{"class":216},"','",[101,84500,30815],{"class":111},[101,84502,74033],{"class":1950},[101,84504,112],{"class":111},[101,84506,79784],{"class":5204},[101,84508,79787],{"class":107},[101,84510,84511],{"class":216}," `\u003Cspan class=\"tag\">【赠品】${",[101,84513,79784],{"class":111},[101,84515,84516],{"class":216},"}\u003C\u002Fspan>`",[101,84518,30815],{"class":111},[101,84520,74212],{"class":1950},[101,84522,112],{"class":111},[101,84524,74217],{"class":216},[101,84526,13702],{"class":111},[101,84528,970],{"class":107},[101,84530,70093],{"class":216},[101,84532,84533],{"class":103,"line":33026},[101,84534,84535],{"class":170},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[101,84537,84538,84540,84543,84545,84548,84550,84552,84554,84557,84559,84561,84563,84566,84568,84570],{"class":103,"line":33032},[101,84539,58217],{"class":107},[101,84541,84542],{"class":160}," subtotal",[101,84544,13552],{"class":107},[101,84546,84547],{"class":111}," ((price ",[101,84549,566],{"class":107},[101,84551,5742],{"class":160},[101,84553,6506],{"class":107},[101,84555,84556],{"class":111}," count) ",[101,84558,695],{"class":107},[101,84560,5742],{"class":160},[101,84562,30815],{"class":111},[101,84564,84565],{"class":1950},"toFixed",[101,84567,112],{"class":111},[101,84569,189],{"class":160},[101,84571,118],{"class":111},[101,84573,84574],{"class":103,"line":33042},[101,84575,2387],{"emptyLinePlaceholder":27},[101,84577,84578,84580],{"class":103,"line":33048},[101,84579,73971],{"class":107},[101,84581,70157],{"class":216},[101,84583,84584],{"class":103,"line":33059},[101,84585,84586],{"class":216},"        \u003Cdiv class=\"item\">\n",[101,84588,84589,84592,84594],{"class":103,"line":33065},[101,84590,84591],{"class":216},"          \u003Cimg src=\"${",[101,84593,79809],{"class":111},[101,84595,79841],{"class":216},[101,84597,84598,84601,84603,84606,84608],{"class":103,"line":33075},[101,84599,84600],{"class":216},"          \u003Cp class=\"name\">${",[101,84602,79799],{"class":111},[101,84604,84605],{"class":216},"}${",[101,84607,1286],{"class":111},[101,84609,79851],{"class":216},[101,84611,84612,84615,84617],{"class":103,"line":33080},[101,84613,84614],{"class":216},"          \u003Cp class=\"spec\">${",[101,84616,5175],{"class":111},[101,84618,79851],{"class":216},[101,84620,84621,84624,84626,84628,84630,84632,84634,84636],{"class":103,"line":33086},[101,84622,84623],{"class":216},"          \u003Cp class=\"price\">${",[101,84625,79804],{"class":111},[101,84627,669],{"class":216},[101,84629,84565],{"class":1950},[101,84631,112],{"class":216},[101,84633,189],{"class":160},[101,84635,540],{"class":216},[101,84637,79851],{"class":216},[101,84639,84640,84643,84645],{"class":103,"line":33135},[101,84641,84642],{"class":216},"          \u003Cp class=\"count\">x${",[101,84644,84423],{"class":111},[101,84646,79851],{"class":216},[101,84648,84649,84652,84655],{"class":103,"line":33182},[101,84650,84651],{"class":216},"          \u003Cp class=\"sub-total\">${",[101,84653,84654],{"class":111},"subtotal",[101,84656,79851],{"class":216},[101,84658,84659],{"class":103,"line":33187},[101,84660,84661],{"class":216},"        \u003C\u002Fdiv> \n",[101,84663,84664],{"class":103,"line":33193},[101,84665,84666],{"class":216},"             `\n",[101,84668,84669,84672,84674,84676,84678],{"class":103,"line":33212},[101,84670,84671],{"class":111},"    }).",[101,84673,74212],{"class":1950},[101,84675,112],{"class":111},[101,84677,74217],{"class":216},[101,84679,118],{"class":111},[101,84681,84682],{"class":103,"line":33218},[101,84683,84684],{"class":170},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[101,84686,84687,84689,84691,84693,84695,84698,84700,84703,84705,84707,84709,84712,84715,84717,84720,84722,84724,84726,84729,84731,84733,84735,84737],{"class":103,"line":33238},[101,84688,11209],{"class":107},[101,84690,62774],{"class":160},[101,84692,13552],{"class":107},[101,84694,80037],{"class":111},[101,84696,84697],{"class":1950},"reduce",[101,84699,2363],{"class":111},[101,84701,84702],{"class":5204},"prev",[101,84704,12423],{"class":111},[101,84706,79784],{"class":5204},[101,84708,13702],{"class":111},[101,84710,84711],{"class":107},"=>",[101,84713,84714],{"class":111}," prev ",[101,84716,592],{"class":107},[101,84718,84719],{"class":111}," (item.price ",[101,84721,566],{"class":107},[101,84723,5742],{"class":160},[101,84725,6506],{"class":107},[101,84727,84728],{"class":111}," item.count) ",[101,84730,695],{"class":107},[101,84732,5742],{"class":160},[101,84734,12423],{"class":111},[101,84736,303],{"class":160},[101,84738,118],{"class":111},[101,84740,84741,84743,84745,84747,84750,84752,84754,84757,84759,84761,84763],{"class":103,"line":33244},[101,84742,52396],{"class":111},[101,84744,54388],{"class":1950},[101,84746,112],{"class":111},[101,84748,84749],{"class":216},"'.amount'",[101,84751,74238],{"class":111},[101,84753,157],{"class":107},[101,84755,84756],{"class":111}," total.",[101,84758,84565],{"class":1950},[101,84760,112],{"class":111},[101,84762,189],{"class":160},[101,84764,118],{"class":111},[101,84766,84767,84769,84771],{"class":103,"line":33250},[101,84768,52406],{"class":111},[101,84770,51802],{"class":51289},[101,84772,51296],{"class":111},[101,84774,84775,84777,84779],{"class":103,"line":33260},[101,84776,51774],{"class":111},[101,84778,51789],{"class":51289},[101,84780,51296],{"class":111},[101,84782,84783],{"class":103,"line":33265},[101,84784,2387],{"emptyLinePlaceholder":27},[101,84786,84787,84789,84791],{"class":103,"line":33271},[101,84788,51774],{"class":111},[101,84790,50624],{"class":51289},[101,84792,51296],{"class":111},[43,84794,84796],{"id":84795},"_411-编程思想","4.11 编程思想",[72,84798,84800],{"id":84799},"_4111-面向过程介绍","4.11.1 面向过程介绍",[10,84802,84803,84806],{},[261,84804,84805],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[10,84808,84809],{},"调用就可以了",[10,84811,84812],{},[1449,84813],{"alt":20,"src":84814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[72,84816,84818],{"id":84817},"_4112-面向对象","4.11.2 面向对象",[10,84820,84821],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[10,84823,84824],{},[1449,84825],{"alt":20,"src":84826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[10,84828,84829],{},"面向对象的特性：",[1118,84831,84832,84835,84838],{},[58,84833,84834],{},"封装性",[58,84836,84837],{},"继承性",[58,84839,84840],{},"多态性",[72,84842,84844],{"id":84843},"_4113-两者比较","4.11.3 两者比较",[10,84846,84847],{},[1449,84848],{"alt":20,"src":84849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[43,84851,84853],{"id":84852},"_412-构造函数回顾","4.12 构造函数回顾",[10,84855,84856],{},[1449,84857],{"alt":20,"src":84858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[10,84860,84861],{},[1449,84862],{"alt":20,"src":84863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[10,84865,84866],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[10,84868,84869],{},[1449,84870],{"alt":20,"src":84871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[43,84873,84875],{"id":84874},"_413-原型","4.13 原型",[72,84877,84879],{"id":84878},"_4131-原型对象的认识","4.13.1 原型对象的认识",[10,84881,84882],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[10,84884,84885],{},[1449,84886],{"alt":20,"src":84887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[10,84889,84890],{},[1449,84891],{"alt":20,"src":84892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[10,84894,84895],{},"原型是构造函数的属性，它也是一个对象",[10,84897,84898],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[10,84900,84901],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[92,84903,84905],{"className":53056,"code":84904,"language":53058,"meta":20,"style":20},"\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",[98,84906,84907,84915,84920,84928,84933,84938,84943,84948,84953,84957,84961,84965,84970,84975,84979,84984,84989,84994,84999,85004,85008,85016],{"__ignoreMap":20},[101,84908,84909,84911,84913],{"class":103,"line":104},[101,84910,1021],{"class":111},[101,84912,51789],{"class":51289},[101,84914,51296],{"class":111},[101,84916,84917],{"class":103,"line":21},[101,84918,84919],{"class":170},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[101,84921,84922,84924,84926],{"class":103,"line":1166},[101,84923,52133],{"class":111},[101,84925,51802],{"class":51289},[101,84927,51296],{"class":111},[101,84929,84930],{"class":103,"line":1181},[101,84931,84932],{"class":111},"    function Star(uname, age) {\n",[101,84934,84935],{"class":103,"line":1187},[101,84936,84937],{"class":111},"      this.uname = uname,\n",[101,84939,84940],{"class":103,"line":1201},[101,84941,84942],{"class":111},"        this.age = age\n",[101,84944,84945],{"class":103,"line":1207},[101,84946,84947],{"class":111},"      \u002F\u002F this.sing = function () {\n",[101,84949,84950],{"class":103,"line":1298},[101,84951,84952],{"class":111},"      \u002F\u002F   console.log('唱歌')\n",[101,84954,84955],{"class":103,"line":1304},[101,84956,2387],{"emptyLinePlaceholder":27},[101,84958,84959],{"class":103,"line":1316},[101,84960,60026],{"class":111},[101,84962,84963],{"class":103,"line":1599},[101,84964,2174],{"class":111},[101,84966,84967],{"class":103,"line":1604},[101,84968,84969],{"class":111},"    Star.prototype.sing = function () {\n",[101,84971,84972],{"class":103,"line":1610},[101,84973,84974],{"class":111},"      console.log('唱歌')\n",[101,84976,84977],{"class":103,"line":1615},[101,84978,2174],{"class":111},[101,84980,84981],{"class":103,"line":1629},[101,84982,84983],{"class":111},"    \u002F\u002F console.dir(Star.prototype)\n",[101,84985,84986],{"class":103,"line":1634},[101,84987,84988],{"class":111},"    const pink = new Star('pink', 18)\n",[101,84990,84991],{"class":103,"line":1640},[101,84992,84993],{"class":111},"    const red = new Star('red', 20)\n",[101,84995,84996],{"class":103,"line":1661},[101,84997,84998],{"class":111},"    pink.sing()\n",[101,85000,85001],{"class":103,"line":1666},[101,85002,85003],{"class":111},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[101,85005,85006],{"class":103,"line":1680},[101,85007,2387],{"emptyLinePlaceholder":27},[101,85009,85010,85012,85014],{"class":103,"line":1685},[101,85011,52406],{"class":111},[101,85013,51802],{"class":51289},[101,85015,51296],{"class":111},[101,85017,85018,85020,85022],{"class":103,"line":1714},[101,85019,51774],{"class":111},[101,85021,51789],{"class":51289},[101,85023,51296],{"class":111},[10,85025,85026],{},[1449,85027],{"alt":20,"src":85028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[92,85030,85032],{"className":53056,"code":85031,"language":53058,"meta":20,"style":20},"\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",[98,85033,85034,85042,85050,85055,85060,85065,85070,85074,85079,85084,85089,85093,85098,85102,85106,85111,85115,85123],{"__ignoreMap":20},[101,85035,85036,85038,85040],{"class":103,"line":104},[101,85037,1021],{"class":111},[101,85039,51789],{"class":51289},[101,85041,51296],{"class":111},[101,85043,85044,85046,85048],{"class":103,"line":21},[101,85045,52133],{"class":111},[101,85047,51802],{"class":51289},[101,85049,51296],{"class":111},[101,85051,85052],{"class":103,"line":1166},[101,85053,85054],{"class":111},"    let that\n",[101,85056,85057],{"class":103,"line":1181},[101,85058,85059],{"class":111},"    function Star(uname) {\n",[101,85061,85062],{"class":103,"line":1187},[101,85063,85064],{"class":111},"      this.uname = uname\n",[101,85066,85067],{"class":103,"line":1201},[101,85068,85069],{"class":111},"      that = this\n",[101,85071,85072],{"class":103,"line":1207},[101,85073,2174],{"class":111},[101,85075,85076],{"class":103,"line":1298},[101,85077,85078],{"class":111},"    \u002F\u002F 实例对象是 ldh\n",[101,85080,85081],{"class":103,"line":1304},[101,85082,85083],{"class":111},"    const ldh = new Star('刘德华')\n",[101,85085,85086],{"class":103,"line":1316},[101,85087,85088],{"class":111},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[101,85090,85091],{"class":103,"line":1599},[101,85092,2387],{"emptyLinePlaceholder":27},[101,85094,85095],{"class":103,"line":1604},[101,85096,85097],{"class":111},"    Star.sing = function () {\n",[101,85099,85100],{"class":103,"line":1610},[101,85101,84974],{"class":111},[101,85103,85104],{"class":103,"line":1615},[101,85105,2174],{"class":111},[101,85107,85108],{"class":103,"line":1629},[101,85109,85110],{"class":111},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[101,85112,85113],{"class":103,"line":1634},[101,85114,2387],{"emptyLinePlaceholder":27},[101,85116,85117,85119,85121],{"class":103,"line":1640},[101,85118,52406],{"class":111},[101,85120,51802],{"class":51289},[101,85122,51296],{"class":111},[101,85124,85125,85127,85129],{"class":103,"line":1661},[101,85126,51774],{"class":111},[101,85128,51789],{"class":51289},[101,85130,51296],{"class":111},[10,85132,85133],{},"构造函数的this指向的是实例对象；",[10,85135,85136],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[72,85138,85140],{"id":85139},"_4132-数组扩展方法","4.13.2 数组扩展方法",[10,85142,85143],{},[1449,85144],{"alt":20,"src":85145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[92,85147,85149],{"className":53056,"code":85148,"language":53058,"meta":20,"style":20},"\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",[98,85150,85151,85159,85167,85172,85177,85182,85187,85192,85197,85202,85207,85212,85217,85221,85226,85231,85236,85241,85245,85250,85255,85260,85265,85269,85274,85279,85284,85289,85293,85298,85302,85310],{"__ignoreMap":20},[101,85152,85153,85155,85157],{"class":103,"line":104},[101,85154,1021],{"class":111},[101,85156,51789],{"class":51289},[101,85158,51296],{"class":111},[101,85160,85161,85163,85165],{"class":103,"line":21},[101,85162,52133],{"class":111},[101,85164,51802],{"class":51289},[101,85166,51296],{"class":111},[101,85168,85169],{"class":103,"line":1166},[101,85170,85171],{"class":111},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[101,85173,85174],{"class":103,"line":1181},[101,85175,85176],{"class":111},"    const arr = [1, 2, 3]\n",[101,85178,85179],{"class":103,"line":1187},[101,85180,85181],{"class":111},"    \u002F\u002F 自己定义数组的扩展方法\n",[101,85183,85184],{"class":103,"line":1201},[101,85185,85186],{"class":111},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[101,85188,85189],{"class":103,"line":1207},[101,85190,85191],{"class":111},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[101,85193,85194],{"class":103,"line":1298},[101,85195,85196],{"class":111},"    \u002F\u002F ①.最大值\n",[101,85198,85199],{"class":103,"line":1304},[101,85200,85201],{"class":111},"    Array.prototype.max = function () {\n",[101,85203,85204],{"class":103,"line":1316},[101,85205,85206],{"class":111},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[101,85208,85209],{"class":103,"line":1599},[101,85210,85211],{"class":111},"      return Math.max(...this)\n",[101,85213,85214],{"class":103,"line":1604},[101,85215,85216],{"class":111},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[101,85218,85219],{"class":103,"line":1610},[101,85220,2174],{"class":111},[101,85222,85223],{"class":103,"line":1615},[101,85224,85225],{"class":111},"    console.log(arr.max())\n",[101,85227,85228],{"class":103,"line":1629},[101,85229,85230],{"class":111},"    \u002F\u002F ②最小值\n",[101,85232,85233],{"class":103,"line":1634},[101,85234,85235],{"class":111},"    Array.prototype.min = function () {\n",[101,85237,85238],{"class":103,"line":1640},[101,85239,85240],{"class":111},"      return Math.min(...this)\n",[101,85242,85243],{"class":103,"line":1661},[101,85244,2174],{"class":111},[101,85246,85247],{"class":103,"line":1666},[101,85248,85249],{"class":111},"    console.log(arr.min())\n",[101,85251,85252],{"class":103,"line":1680},[101,85253,85254],{"class":111},"    \u002F\u002F③求和\n",[101,85256,85257],{"class":103,"line":1685},[101,85258,85259],{"class":111},"    Array.prototype.sum = function () {\n",[101,85261,85262],{"class":103,"line":1714},[101,85263,85264],{"class":111},"      return this.reduce((prev, current) => prev + current, 0)\n",[101,85266,85267],{"class":103,"line":1719},[101,85268,2174],{"class":111},[101,85270,85271],{"class":103,"line":1736},[101,85272,85273],{"class":111},"    console.log(arr.sum())\n",[101,85275,85276],{"class":103,"line":1741},[101,85277,85278],{"class":111},"    \u002F\u002F ③排序\n",[101,85280,85281],{"class":103,"line":1746},[101,85282,85283],{"class":111},"    Array.prototype.rever = function () {\n",[101,85285,85286],{"class":103,"line":1751},[101,85287,85288],{"class":111},"      return this.reverse()\n",[101,85290,85291],{"class":103,"line":1765},[101,85292,2174],{"class":111},[101,85294,85295],{"class":103,"line":1770},[101,85296,85297],{"class":111},"    console.log(arr.rever())\n",[101,85299,85300],{"class":103,"line":2564},[101,85301,2387],{"emptyLinePlaceholder":27},[101,85303,85304,85306,85308],{"class":103,"line":2578},[101,85305,52406],{"class":111},[101,85307,51802],{"class":51289},[101,85309,51296],{"class":111},[101,85311,85312,85314,85316],{"class":103,"line":2586},[101,85313,51774],{"class":111},[101,85315,51789],{"class":51289},[101,85317,51296],{"class":111},[10,85319,85320],{},[1449,85321],{"alt":20,"src":85322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[72,85324,85326],{"id":85325},"_4133-constructor-属性","4.13.3 constructor 属性",[10,85328,85329],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[10,85331,85332],{},[1449,85333],{"alt":20,"src":85334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[92,85336,85338],{"className":53056,"code":85337,"language":53058,"meta":20,"style":20},"\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",[98,85339,85340,85348,85356,85361,85366,85370,85375,85380,85385,85393],{"__ignoreMap":20},[101,85341,85342,85344,85346],{"class":103,"line":104},[101,85343,1021],{"class":111},[101,85345,51789],{"class":51289},[101,85347,51296],{"class":111},[101,85349,85350,85352,85354],{"class":103,"line":21},[101,85351,52133],{"class":111},[101,85353,51802],{"class":51289},[101,85355,51296],{"class":111},[101,85357,85358],{"class":103,"line":1166},[101,85359,85360],{"class":111},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[101,85362,85363],{"class":103,"line":1181},[101,85364,85365],{"class":111},"    function Star() {\n",[101,85367,85368],{"class":103,"line":1187},[101,85369,2174],{"class":111},[101,85371,85372],{"class":103,"line":1201},[101,85373,85374],{"class":111},"    const ldh = new Star()\n",[101,85376,85377],{"class":103,"line":1207},[101,85378,85379],{"class":111},"    console.log(Star.prototype)\n",[101,85381,85382],{"class":103,"line":1298},[101,85383,85384],{"class":111},"    console.log(Star.prototype.constructor === Star)\n",[101,85386,85387,85389,85391],{"class":103,"line":1304},[101,85388,52406],{"class":111},[101,85390,51802],{"class":51289},[101,85392,51296],{"class":111},[101,85394,85395,85397,85399],{"class":103,"line":1316},[101,85396,51774],{"class":111},[101,85398,51789],{"class":51289},[101,85400,51296],{"class":111},[10,85402,85403],{},[1449,85404],{"alt":20,"src":85405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[10,85407,85408],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[92,85410,85412],{"className":53056,"code":85411,"language":53058,"meta":20,"style":20},"  \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",[98,85413,85414,85422,85426,85430,85434,85439,85444,85449,85453,85458,85463,85468,85473,85478,85483,85487,85491,85496,85501,85506,85510,85515,85520,85524,85528,85532],{"__ignoreMap":20},[101,85415,85416,85418,85420],{"class":103,"line":104},[101,85417,52133],{"class":111},[101,85419,51802],{"class":51289},[101,85421,51296],{"class":111},[101,85423,85424],{"class":103,"line":21},[101,85425,85360],{"class":111},[101,85427,85428],{"class":103,"line":1166},[101,85429,85365],{"class":111},[101,85431,85432],{"class":103,"line":1181},[101,85433,2174],{"class":111},[101,85435,85436],{"class":103,"line":1187},[101,85437,85438],{"class":111},"    \u002F\u002F const ldh = new Star()\n",[101,85440,85441],{"class":103,"line":1201},[101,85442,85443],{"class":111},"    \u002F\u002F console.log(Star.prototype)\n",[101,85445,85446],{"class":103,"line":1207},[101,85447,85448],{"class":111},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[101,85450,85451],{"class":103,"line":1298},[101,85452,2387],{"emptyLinePlaceholder":27},[101,85454,85455],{"class":103,"line":1304},[101,85456,85457],{"class":111},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[101,85459,85460],{"class":103,"line":1316},[101,85461,85462],{"class":111},"    \u002F\u002F Star.prototype.sing = function () {\n",[101,85464,85465],{"class":103,"line":1599},[101,85466,85467],{"class":111},"    \u002F\u002F   console.log('唱歌')\n",[101,85469,85470],{"class":103,"line":1604},[101,85471,85472],{"class":111},"    \u002F\u002F }\n",[101,85474,85475],{"class":103,"line":1610},[101,85476,85477],{"class":111},"    \u002F\u002F Star.prototype.dance = function () {\n",[101,85479,85480],{"class":103,"line":1615},[101,85481,85482],{"class":111},"    \u002F\u002F   console.log('跳舞')\n",[101,85484,85485],{"class":103,"line":1629},[101,85486,85472],{"class":111},[101,85488,85489],{"class":103,"line":1634},[101,85490,85379],{"class":111},[101,85492,85493],{"class":103,"line":1640},[101,85494,85495],{"class":111},"    Star.prototype = {\n",[101,85497,85498],{"class":103,"line":1661},[101,85499,85500],{"class":111},"      sing: function () {\n",[101,85502,85503],{"class":103,"line":1666},[101,85504,85505],{"class":111},"        console.log('唱歌')\n",[101,85507,85508],{"class":103,"line":1680},[101,85509,77881],{"class":111},[101,85511,85512],{"class":103,"line":1685},[101,85513,85514],{"class":111},"      dance: function () {\n",[101,85516,85517],{"class":103,"line":1714},[101,85518,85519],{"class":111},"        console.log('跳舞')\n",[101,85521,85522],{"class":103,"line":1719},[101,85523,52387],{"class":111},[101,85525,85526],{"class":103,"line":1736},[101,85527,2174],{"class":111},[101,85529,85530],{"class":103,"line":1741},[101,85531,85379],{"class":111},[101,85533,85534,85536,85538],{"class":103,"line":1746},[101,85535,52406],{"class":111},[101,85537,51802],{"class":51289},[101,85539,51296],{"class":111},[10,85541,85542],{},"进行输出结果后会发现：",[10,85544,85545],{},[1449,85546],{"alt":20,"src":85547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[10,85549,85550],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[10,85552,85553],{},"所以，要重新指回创造这个原型对象的构造函数",[92,85555,85557],{"className":71202,"code":85556,"language":71204,"meta":20,"style":20},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[98,85558,85559,85573,85578,85583,85594,85607,85612,85623,85637,85641],{"__ignoreMap":20},[101,85560,85561,85564,85566,85569,85571],{"class":103,"line":104},[101,85562,85563],{"class":160},"Star",[101,85565,669],{"class":111},[101,85567,85568],{"class":160},"prototype",[101,85570,13552],{"class":107},[101,85572,15560],{"class":111},[101,85574,85575],{"class":103,"line":21},[101,85576,85577],{"class":170},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[101,85579,85580],{"class":103,"line":1166},[101,85581,85582],{"class":111},"  constructor: Star,\n",[101,85584,85585,85588,85590,85592],{"class":103,"line":1181},[101,85586,85587],{"class":1950},"  sing",[101,85589,51426],{"class":111},[101,85591,54438],{"class":107},[101,85593,54441],{"class":111},[101,85595,85596,85598,85600,85602,85605],{"class":103,"line":1187},[101,85597,73742],{"class":111},[101,85599,58236],{"class":1950},[101,85601,112],{"class":111},[101,85603,85604],{"class":216},"'唱歌'",[101,85606,118],{"class":111},[101,85608,85609],{"class":103,"line":1201},[101,85610,85611],{"class":111},"   },\n",[101,85613,85614,85617,85619,85621],{"class":103,"line":1207},[101,85615,85616],{"class":1950},"   dance",[101,85618,51426],{"class":111},[101,85620,54438],{"class":107},[101,85622,54441],{"class":111},[101,85624,85625,85628,85630,85632,85635],{"class":103,"line":1298},[101,85626,85627],{"class":111},"     console.",[101,85629,58236],{"class":1950},[101,85631,112],{"class":111},[101,85633,85634],{"class":216},"'跳舞'",[101,85636,118],{"class":111},[101,85638,85639],{"class":103,"line":1304},[101,85640,4296],{"class":111},[101,85642,85643],{"class":103,"line":1316},[101,85644,1552],{"class":111},[10,85646,85647],{},[1449,85648],{"alt":20,"src":85649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[10,85651,85652],{},"总结1：",[10,85654,85655],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[10,85657,85658],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[10,85660,85661],{},"constructor指的是他的来源",[10,85663,85664],{},[1449,85665],{"alt":20,"src":85666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[10,85668,85669],{},[1449,85670],{"alt":20,"src":85671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[10,85673,85674],{},"总结2：",[10,85676,85677],{},[1449,85678],{"alt":20,"src":85679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[10,85681,85682],{},[1449,85683],{"alt":20,"src":85684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[10,85686,85687],{},[1449,85688],{"alt":20,"src":85689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[72,85691,85693],{"id":85692},"_4134-对象原型","4.13.4 对象原型",[10,85695,85696],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[10,85698,85699],{},"对象原型就是__proto__这个属性",[10,85701,85702],{},[1449,85703],{"alt":20,"src":85704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[10,85706,85707],{},[1449,85708],{"alt":20,"src":85709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[10,85711,85712],{},[1449,85713],{"alt":20,"src":85714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[10,85716,85717],{},[1449,85718],{"alt":20,"src":85719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[92,85721,85723],{"className":53056,"code":85722,"language":53058,"meta":20,"style":20},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[98,85724,85725,85733,85741,85745,85749,85753,85758,85766],{"__ignoreMap":20},[101,85726,85727,85729,85731],{"class":103,"line":104},[101,85728,1021],{"class":111},[101,85730,51789],{"class":51289},[101,85732,51296],{"class":111},[101,85734,85735,85737,85739],{"class":103,"line":21},[101,85736,52133],{"class":111},[101,85738,51802],{"class":51289},[101,85740,51296],{"class":111},[101,85742,85743],{"class":103,"line":1166},[101,85744,85365],{"class":111},[101,85746,85747],{"class":103,"line":1181},[101,85748,2174],{"class":111},[101,85750,85751],{"class":103,"line":1187},[101,85752,85374],{"class":111},[101,85754,85755],{"class":103,"line":1201},[101,85756,85757],{"class":111},"    console.log(ldh)\n",[101,85759,85760,85762,85764],{"class":103,"line":1207},[101,85761,52406],{"class":111},[101,85763,51802],{"class":51289},[101,85765,51296],{"class":111},[101,85767,85768,85770,85772],{"class":103,"line":1298},[101,85769,51774],{"class":111},[101,85771,51789],{"class":51289},[101,85773,51296],{"class":111},[10,85775,85776],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[10,85778,85779],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[10,85781,85782],{},[1449,85783],{"alt":20,"src":85784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[10,85786,85787],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[10,85789,85790],{},"对象原型指向原型对象",[10,85792,85793],{},[1449,85794],{"alt":20,"src":85795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[10,85797,85798],{},[1449,85799],{"alt":20,"src":85800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[10,85802,85803],{},[1449,85804],{"alt":20,"src":85805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[72,85807,85809],{"id":85808},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[10,85811,85812],{},[1449,85813],{"alt":20,"src":85814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[55,85816,85817,85820,85823,85826],{},[58,85818,85819],{},"构造函数通过new的形式实例化得到实例对象",[58,85821,85822],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[58,85824,85825],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[58,85827,85828],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[10,85830,85831],{},[1449,85832],{"alt":20,"src":85833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[10,85835,85836],{},"题目梳理：",[10,85838,85839],{},[1449,85840],{"alt":20,"src":85841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[72,85843,85845],{"id":85844},"_4136-原型继承","4.13.6 原型继承",[10,85847,85848],{},[1449,85849],{"alt":20,"src":85850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[10,85852,85853],{},[1449,85854],{"alt":20,"src":85855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[10,85857,85858],{},[1449,85859],{"alt":20,"src":85860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[10,85862,85863],{},[1449,85864],{"alt":20,"src":85865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[10,85867,85868],{},[1449,85869],{"alt":20,"src":85870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[10,85872,85873],{},[1449,85874],{"alt":20,"src":85875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[10,85877,85878],{},[1449,85879],{"alt":20,"src":85880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[10,85882,85883],{},[1449,85884],{"alt":20,"src":85885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[10,85887,85888],{},"回顾：构造函数每次new得到对象都是不同的",[72,85890,85892],{"id":85891},"_4137-原型链","4.13.7 原型链",[10,85894,85895],{},[1449,85896],{"alt":20,"src":85897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[10,85899,85900],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[10,85902,85903],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[10,85905,85906],{},"大哥是Object",[10,85908,85909],{},[1449,85910],{"alt":20,"src":85911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[10,85913,85914],{},[1449,85915],{"alt":20,"src":85916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[10,85918,85919],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[10,85921,85922],{},"万物皆对象",[72,85924,85926],{"id":85925},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[10,85928,85929],{},"模态框",[10,85931,85932],{},"以后遇见这个效果直接使用这个就行",[10,85934,85935],{},[1449,85936],{"alt":20,"src":85937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[10,85939,85940],{},[1449,85941],{"alt":20,"src":85942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[10,85944,85945],{},[1449,85946],{"alt":20,"src":85947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[10,85949,85950],{},[1449,85951],{"alt":20,"src":85952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[10,85954,85955],{},"补充知识点：",[55,85957,85958],{},[58,85959,85960],{},"append()",[10,85962,85963],{},[1449,85964],{"alt":20,"src":85965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[92,85967,85969],{"className":50622,"code":85968,"language":50624,"meta":20,"style":20},"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",[98,85970,85971,85976,85981,85986,85990,85994,85998,86003,86008,86013,86017],{"__ignoreMap":20},[101,85972,85973],{"class":103,"line":104},[101,85974,85975],{"class":111},"append(param1)\n",[101,85977,85978],{"class":103,"line":21},[101,85979,85980],{"class":111},"append(param1, param2)\n",[101,85982,85983],{"class":103,"line":1166},[101,85984,85985],{"class":111},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[101,85987,85988],{"class":103,"line":1181},[101,85989,2387],{"emptyLinePlaceholder":27},[101,85991,85992],{"class":103,"line":1187},[101,85993,2387],{"emptyLinePlaceholder":27},[101,85995,85996],{"class":103,"line":1201},[101,85997,2387],{"emptyLinePlaceholder":27},[101,85999,86000],{"class":103,"line":1207},[101,86001,86002],{"class":111},"let div = document.createElement(\"div\");\n",[101,86004,86005],{"class":103,"line":1298},[101,86006,86007],{"class":111},"let p = document.createElement(\"p\");\n",[101,86009,86010],{"class":103,"line":1304},[101,86011,86012],{"class":111},"div.append(p);\n",[101,86014,86015],{"class":103,"line":1316},[101,86016,2387],{"emptyLinePlaceholder":27},[101,86018,86019,86022,86024],{"class":103,"line":1599},[101,86020,86021],{"class":111},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[101,86023,10],{"class":51289},[101,86025,86026],{"class":111},"> ]\n",[55,86028,86029],{"start":21},[58,86030,86031],{},"remove()",[10,86033,86034],{},"自己删自己",[10,86036,86037],{},[1449,86038],{"alt":20,"src":86039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[92,86041,86043],{"className":50622,"code":86042,"language":50624,"meta":20,"style":20},"\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",[98,86044,86045,86055,86069,86073,86081,86095,86115,86127,86135,86142,86154,86167,86202,86214,86225,86237,86249,86261,86288,86298,86302,86306,86315,86327,86341,86351,86363,86367,86371,86381,86392,86402,86412,86425,86438,86448,86452,86456,86465,86475,86487,86491,86495,86504,86514,86524,86536,86540,86544,86554,86570,86581,86591,86601,86613,86625,86637,86641,86645,86658,86669,86673,86681,86689,86693,86701,86721,86741,86749,86754,86780,86785,86790,86809,86814,86826,86831,86842,86852,86862,86867,86872,86876,86881,86886,86891,86911,86916,86936,86941,86955,86960,86965,86970,86986,86990,86995,87024,87029,87034,87039,87050,87054,87058,87062,87067,87092,87097,87122,87127,87136,87140,87145,87170,87174,87199,87203,87212,87216,87221,87239,87249,87253,87261,87269,87273],{"__ignoreMap":20},[101,86046,86047,86049,86051,86053],{"class":103,"line":104},[101,86048,51286],{"class":111},[101,86050,51290],{"class":51289},[101,86052,51293],{"class":1950},[101,86054,51296],{"class":111},[101,86056,86057,86059,86061,86063,86065,86067],{"class":103,"line":21},[101,86058,1021],{"class":111},[101,86060,50624],{"class":51289},[101,86062,51305],{"class":1950},[101,86064,157],{"class":111},[101,86066,51310],{"class":216},[101,86068,51296],{"class":111},[101,86070,86071],{"class":103,"line":1166},[101,86072,2387],{"emptyLinePlaceholder":27},[101,86074,86075,86077,86079],{"class":103,"line":1181},[101,86076,1021],{"class":111},[101,86078,51323],{"class":51289},[101,86080,51296],{"class":111},[101,86082,86083,86085,86087,86089,86091,86093],{"class":103,"line":1187},[101,86084,52133],{"class":111},[101,86086,51333],{"class":51289},[101,86088,51336],{"class":1950},[101,86090,157],{"class":111},[101,86092,51341],{"class":216},[101,86094,51296],{"class":111},[101,86096,86097,86099,86101,86103,86105,86107,86109,86111,86113],{"class":103,"line":1201},[101,86098,52133],{"class":111},[101,86100,51333],{"class":51289},[101,86102,14908],{"class":1950},[101,86104,157],{"class":111},[101,86106,51380],{"class":216},[101,86108,51360],{"class":1950},[101,86110,157],{"class":111},[101,86112,51387],{"class":216},[101,86114,51296],{"class":111},[101,86116,86117,86119,86121,86123,86125],{"class":103,"line":1207},[101,86118,52133],{"class":111},[101,86120,51396],{"class":51289},[101,86122,51399],{"class":111},[101,86124,51396],{"class":51289},[101,86126,51296],{"class":111},[101,86128,86129,86131,86133],{"class":103,"line":1298},[101,86130,52133],{"class":111},[101,86132,5114],{"class":51289},[101,86134,51296],{"class":111},[101,86136,86137,86140],{"class":103,"line":1304},[101,86138,86139],{"class":1950},"    .modal",[101,86141,15560],{"class":111},[101,86143,86144,86146,86148,86150,86152],{"class":103,"line":1316},[101,86145,54760],{"class":160},[101,86147,51426],{"class":111},[101,86149,3960],{"class":160},[101,86151,51481],{"class":107},[101,86153,1277],{"class":111},[101,86155,86156,86159,86161,86163,86165],{"class":103,"line":1599},[101,86157,86158],{"class":160},"      min-height",[101,86160,51426],{"class":111},[101,86162,422],{"class":160},[101,86164,51481],{"class":107},[101,86166,1277],{"class":111},[101,86168,86169,86171,86173,86175,86177,86179,86181,86183,86185,86187,86189,86191,86193,86195,86197,86200],{"class":103,"line":1604},[101,86170,78739],{"class":160},[101,86172,51426],{"class":111},[101,86174,303],{"class":160},[101,86176,4080],{"class":160},[101,86178,2025],{"class":160},[101,86180,51481],{"class":107},[101,86182,78756],{"class":160},[101,86184,112],{"class":111},[101,86186,303],{"class":160},[101,86188,12423],{"class":111},[101,86190,303],{"class":160},[101,86192,12423],{"class":111},[101,86194,303],{"class":160},[101,86196,12423],{"class":111},[101,86198,86199],{"class":160},"0.1",[101,86201,2706],{"class":111},[101,86203,86204,86206,86208,86210,86212],{"class":103,"line":1610},[101,86205,55123],{"class":160},[101,86207,51426],{"class":111},[101,86209,404],{"class":160},[101,86211,51481],{"class":107},[101,86213,1277],{"class":111},[101,86215,86216,86218,86220,86223],{"class":103,"line":1615},[101,86217,54748],{"class":160},[101,86219,51426],{"class":111},[101,86221,86222],{"class":160},"fixed",[101,86224,1277],{"class":111},[101,86226,86227,86230,86232,86235],{"class":103,"line":1629},[101,86228,86229],{"class":160},"      z-index",[101,86231,51426],{"class":111},[101,86233,86234],{"class":160},"999",[101,86236,1277],{"class":111},[101,86238,86239,86241,86243,86245,86247],{"class":103,"line":1634},[101,86240,54827],{"class":160},[101,86242,51426],{"class":111},[101,86244,767],{"class":160},[101,86246,439],{"class":107},[101,86248,1277],{"class":111},[101,86250,86251,86253,86255,86257,86259],{"class":103,"line":1640},[101,86252,54936],{"class":160},[101,86254,51426],{"class":111},[101,86256,767],{"class":160},[101,86258,439],{"class":107},[101,86260,1277],{"class":111},[101,86262,86263,86265,86267,86269,86271,86274,86276,86278,86280,86282,86284,86286],{"class":103,"line":1661},[101,86264,78780],{"class":160},[101,86266,51426],{"class":111},[101,86268,78785],{"class":160},[101,86270,112],{"class":111},[101,86272,86273],{"class":160},"-50",[101,86275,439],{"class":107},[101,86277,12423],{"class":111},[101,86279,86273],{"class":160},[101,86281,439],{"class":107},[101,86283,12423],{"class":111},[101,86285,303],{"class":160},[101,86287,2706],{"class":111},[101,86289,86290,86292,86294,86296],{"class":103,"line":1666},[101,86291,54873],{"class":160},[101,86293,51426],{"class":111},[101,86295,60831],{"class":160},[101,86297,1277],{"class":111},[101,86299,86300],{"class":103,"line":1680},[101,86301,2174],{"class":111},[101,86303,86304],{"class":103,"line":1685},[101,86305,2387],{"emptyLinePlaceholder":27},[101,86307,86308,86310,86313],{"class":103,"line":1714},[101,86309,86139],{"class":1950},[101,86311,86312],{"class":1950}," .header",[101,86314,15560],{"class":111},[101,86316,86317,86319,86321,86323,86325],{"class":103,"line":1719},[101,86318,57348],{"class":160},[101,86320,51426],{"class":111},[101,86322,512],{"class":160},[101,86324,51481],{"class":107},[101,86326,1277],{"class":111},[101,86328,86329,86331,86333,86335,86337,86339],{"class":103,"line":1736},[101,86330,54684],{"class":160},[101,86332,51426],{"class":111},[101,86334,303],{"class":160},[101,86336,2025],{"class":160},[101,86338,51481],{"class":107},[101,86340,1277],{"class":111},[101,86342,86343,86345,86347,86349],{"class":103,"line":1741},[101,86344,54748],{"class":160},[101,86346,51426],{"class":111},[101,86348,54753],{"class":160},[101,86350,1277],{"class":111},[101,86352,86353,86355,86357,86359,86361],{"class":103,"line":1746},[101,86354,54911],{"class":160},[101,86356,51426],{"class":111},[101,86358,811],{"class":160},[101,86360,51481],{"class":107},[101,86362,1277],{"class":111},[101,86364,86365],{"class":103,"line":1751},[101,86366,2174],{"class":111},[101,86368,86369],{"class":103,"line":1765},[101,86370,2387],{"emptyLinePlaceholder":27},[101,86372,86373,86375,86377,86379],{"class":103,"line":1770},[101,86374,86139],{"class":1950},[101,86376,86312],{"class":1950},[101,86378,3019],{"class":51289},[101,86380,15560],{"class":111},[101,86382,86383,86386,86388,86390],{"class":103,"line":2564},[101,86384,86385],{"class":160},"      font-style",[101,86387,51426],{"class":111},[101,86389,63830],{"class":160},[101,86391,1277],{"class":111},[101,86393,86394,86396,86398,86400],{"class":103,"line":2578},[101,86395,57405],{"class":160},[101,86397,51426],{"class":111},[101,86399,62059],{"class":160},[101,86401,1277],{"class":111},[101,86403,86404,86406,86408,86410],{"class":103,"line":2586},[101,86405,54748],{"class":160},[101,86407,51426],{"class":111},[101,86409,54820],{"class":160},[101,86411,1277],{"class":111},[101,86413,86414,86417,86419,86421,86423],{"class":103,"line":2591},[101,86415,86416],{"class":160},"      right",[101,86418,51426],{"class":111},[101,86420,686],{"class":160},[101,86422,51481],{"class":107},[101,86424,1277],{"class":111},[101,86426,86427,86429,86431,86434,86436],{"class":103,"line":2597},[101,86428,54936],{"class":160},[101,86430,51426],{"class":111},[101,86432,86433],{"class":160},"-2",[101,86435,51481],{"class":107},[101,86437,1277],{"class":111},[101,86439,86440,86442,86444,86446],{"class":103,"line":2603},[101,86441,62014],{"class":160},[101,86443,51426],{"class":111},[101,86445,62019],{"class":160},[101,86447,1277],{"class":111},[101,86449,86450],{"class":103,"line":2608},[101,86451,2174],{"class":111},[101,86453,86454],{"class":103,"line":7936},[101,86455,2387],{"emptyLinePlaceholder":27},[101,86457,86458,86460,86463],{"class":103,"line":7960},[101,86459,86139],{"class":1950},[101,86461,86462],{"class":1950}," .body",[101,86464,15560],{"class":111},[101,86466,86467,86469,86471,86473],{"class":103,"line":7965},[101,86468,57275],{"class":160},[101,86470,51426],{"class":111},[101,86472,51581],{"class":160},[101,86474,1277],{"class":111},[101,86476,86477,86479,86481,86483,86485],{"class":103,"line":7971},[101,86478,54684],{"class":160},[101,86480,51426],{"class":111},[101,86482,557],{"class":160},[101,86484,51481],{"class":107},[101,86486,1277],{"class":111},[101,86488,86489],{"class":103,"line":7998},[101,86490,2174],{"class":111},[101,86492,86493],{"class":103,"line":8003},[101,86494,2387],{"emptyLinePlaceholder":27},[101,86496,86497,86499,86502],{"class":103,"line":8009},[101,86498,86139],{"class":1950},[101,86500,86501],{"class":1950}," .footer",[101,86503,15560],{"class":111},[101,86505,86506,86508,86510,86512],{"class":103,"line":8021},[101,86507,54998],{"class":160},[101,86509,51426],{"class":111},[101,86511,51466],{"class":160},[101,86513,1277],{"class":111},[101,86515,86516,86518,86520,86522],{"class":103,"line":8033},[101,86517,55009],{"class":160},[101,86519,51426],{"class":111},[101,86521,51569],{"class":160},[101,86523,1277],{"class":111},[101,86525,86526,86528,86530,86532,86534],{"class":103,"line":8045},[101,86527,54684],{"class":160},[101,86529,51426],{"class":111},[101,86531,557],{"class":160},[101,86533,51481],{"class":107},[101,86535,1277],{"class":111},[101,86537,86538],{"class":103,"line":9704},[101,86539,2174],{"class":111},[101,86541,86542],{"class":103,"line":9729},[101,86543,2387],{"emptyLinePlaceholder":27},[101,86545,86546,86548,86550,86552],{"class":103,"line":9752},[101,86547,86139],{"class":1950},[101,86549,86501],{"class":1950},[101,86551,1385],{"class":51289},[101,86553,15560],{"class":111},[101,86555,86556,86558,86560,86562,86564,86566,86568],{"class":103,"line":9776},[101,86557,54684],{"class":160},[101,86559,51426],{"class":111},[101,86561,183],{"class":160},[101,86563,51481],{"class":107},[101,86565,2070],{"class":160},[101,86567,51481],{"class":107},[101,86569,1277],{"class":111},[101,86571,86572,86574,86576,86579],{"class":103,"line":9781},[101,86573,61710],{"class":160},[101,86575,51426],{"class":111},[101,86577,86578],{"class":160},"#ccc",[101,86580,1277],{"class":111},[101,86582,86583,86585,86587,86589],{"class":103,"line":9786},[101,86584,63959],{"class":160},[101,86586,51426],{"class":111},[101,86588,54726],{"class":160},[101,86590,1277],{"class":111},[101,86592,86593,86595,86597,86599],{"class":103,"line":9791},[101,86594,57405],{"class":160},[101,86596,51426],{"class":111},[101,86598,60831],{"class":160},[101,86600,1277],{"class":111},[101,86602,86603,86605,86607,86609,86611],{"class":103,"line":9800},[101,86604,55123],{"class":160},[101,86606,51426],{"class":111},[101,86608,189],{"class":160},[101,86610,51481],{"class":107},[101,86612,1277],{"class":111},[101,86614,86615,86617,86619,86621,86623],{"class":103,"line":9805},[101,86616,61739],{"class":160},[101,86618,51426],{"class":111},[101,86620,557],{"class":160},[101,86622,51481],{"class":107},[101,86624,1277],{"class":111},[101,86626,86627,86629,86631,86633,86635],{"class":103,"line":9811},[101,86628,54911],{"class":160},[101,86630,51426],{"class":111},[101,86632,660],{"class":160},[101,86634,51481],{"class":107},[101,86636,1277],{"class":111},[101,86638,86639],{"class":103,"line":9832},[101,86640,2174],{"class":111},[101,86642,86643],{"class":103,"line":9838},[101,86644,2387],{"emptyLinePlaceholder":27},[101,86646,86647,86649,86651,86653,86656],{"class":103,"line":9852},[101,86648,86139],{"class":1950},[101,86650,86501],{"class":1950},[101,86652,1385],{"class":51289},[101,86654,86655],{"class":1950},".submit",[101,86657,15560],{"class":111},[101,86659,86660,86662,86664,86667],{"class":103,"line":9858},[101,86661,54873],{"class":160},[101,86663,51426],{"class":111},[101,86665,86666],{"class":160},"#369",[101,86668,1277],{"class":111},[101,86670,86671],{"class":103,"line":9885},[101,86672,2174],{"class":111},[101,86674,86675,86677,86679],{"class":103,"line":9894},[101,86676,52406],{"class":111},[101,86678,5114],{"class":51289},[101,86680,51296],{"class":111},[101,86682,86683,86685,86687],{"class":103,"line":9900},[101,86684,51774],{"class":111},[101,86686,51323],{"class":51289},[101,86688,51296],{"class":111},[101,86690,86691],{"class":103,"line":9908},[101,86692,2387],{"emptyLinePlaceholder":27},[101,86694,86695,86697,86699],{"class":103,"line":9913},[101,86696,1021],{"class":111},[101,86698,51789],{"class":51289},[101,86700,51296],{"class":111},[101,86702,86703,86705,86707,86709,86711,86714,86717,86719],{"class":103,"line":16592},[101,86704,52133],{"class":111},[101,86706,53876],{"class":51289},[101,86708,14947],{"class":1950},[101,86710,157],{"class":111},[101,86712,86713],{"class":216},"\"delete\"",[101,86715,86716],{"class":111},">删除\u003C\u002F",[101,86718,53876],{"class":51289},[101,86720,51296],{"class":111},[101,86722,86723,86725,86727,86729,86731,86734,86737,86739],{"class":103,"line":16598},[101,86724,52133],{"class":111},[101,86726,53876],{"class":51289},[101,86728,14947],{"class":1950},[101,86730,157],{"class":111},[101,86732,86733],{"class":216},"\"login\"",[101,86735,86736],{"class":111},">登录\u003C\u002F",[101,86738,53876],{"class":51289},[101,86740,51296],{"class":111},[101,86742,86743,86745,86747],{"class":103,"line":16621},[101,86744,52133],{"class":111},[101,86746,51802],{"class":51289},[101,86748,51296],{"class":111},[101,86750,86751],{"class":103,"line":16627},[101,86752,86753],{"class":170},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[101,86755,86756,86758,86761,86763,86765,86767,86769,86771,86774,86776,86778],{"class":103,"line":16650},[101,86757,70073],{"class":107},[101,86759,86760],{"class":1950}," Modal",[101,86762,112],{"class":111},[101,86764,51396],{"class":5204},[101,86766,13552],{"class":107},[101,86768,69919],{"class":216},[101,86770,12423],{"class":111},[101,86772,86773],{"class":5204},"message",[101,86775,13552],{"class":107},[101,86777,69919],{"class":216},[101,86779,12430],{"class":111},[101,86781,86782],{"class":103,"line":16664},[101,86783,86784],{"class":170},"      \u002F\u002F 创建Model 模态框盒子\n",[101,86786,86787],{"class":103,"line":16684},[101,86788,86789],{"class":170},"      \u002F\u002F 1.1 创建div标签\n",[101,86791,86792,86794,86797,86799,86801,86803,86805,86807],{"class":103,"line":16690},[101,86793,70040],{"class":160},[101,86795,86796],{"class":111},".modalBox ",[101,86798,157],{"class":107},[101,86800,54385],{"class":111},[101,86802,70140],{"class":1950},[101,86804,112],{"class":111},[101,86806,81920],{"class":216},[101,86808,118],{"class":111},[101,86810,86811],{"class":103,"line":16701},[101,86812,86813],{"class":170},"      \u002F\u002F 1.2 给div 添加类名为model\n",[101,86815,86816,86818,86821,86823],{"class":103,"line":16724},[101,86817,70040],{"class":160},[101,86819,86820],{"class":111},".modalBox.className ",[101,86822,157],{"class":107},[101,86824,86825],{"class":216}," 'modal'\n",[101,86827,86828],{"class":103,"line":16746},[101,86829,86830],{"class":170},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[101,86832,86833,86835,86838,86840],{"class":103,"line":16751},[101,86834,70040],{"class":160},[101,86836,86837],{"class":111},".modalBox.innerHTML ",[101,86839,157],{"class":107},[101,86841,70157],{"class":216},[101,86843,86844,86847,86849],{"class":103,"line":16757},[101,86845,86846],{"class":216},"        \u003Cdiv class=\"header\">${",[101,86848,51396],{"class":111},[101,86850,86851],{"class":216},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[101,86853,86854,86857,86859],{"class":103,"line":16771},[101,86855,86856],{"class":216},"        \u003Cdiv class=\"body\">${",[101,86858,86773],{"class":111},[101,86860,86861],{"class":216},"}\u003C\u002Fdiv>\n",[101,86863,86864],{"class":103,"line":16784},[101,86865,86866],{"class":216},"      `\n",[101,86868,86869],{"class":103,"line":16789},[101,86870,86871],{"class":170},"      \u002F\u002F console.log(this.modalBox)\n",[101,86873,86874],{"class":103,"line":16803},[101,86875,2174],{"class":111},[101,86877,86878],{"class":103,"line":16808},[101,86879,86880],{"class":170},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[101,86882,86883],{"class":103,"line":16814},[101,86884,86885],{"class":170},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[101,86887,86888],{"class":103,"line":16819},[101,86889,86890],{"class":170},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[101,86892,86893,86896,86898,86900,86902,86905,86907,86909],{"class":103,"line":16833},[101,86894,86895],{"class":160},"    Modal",[101,86897,669],{"class":111},[101,86899,85568],{"class":160},[101,86901,669],{"class":111},[101,86903,86904],{"class":1950},"open",[101,86906,13552],{"class":107},[101,86908,58907],{"class":107},[101,86910,54441],{"class":111},[101,86912,86913],{"class":103,"line":16838},[101,86914,86915],{"class":170},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[101,86917,86918,86920,86923,86925,86927,86929,86931,86934],{"class":103,"line":16843},[101,86919,58217],{"class":107},[101,86921,86922],{"class":160}," box",[101,86924,13552],{"class":107},[101,86926,54385],{"class":111},[101,86928,54388],{"class":1950},[101,86930,112],{"class":111},[101,86932,86933],{"class":216},"'.modal'",[101,86935,118],{"class":111},[101,86937,86938],{"class":103,"line":16857},[101,86939,86940],{"class":170},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[101,86942,86943,86946,86948,86951,86953],{"class":103,"line":16869},[101,86944,86945],{"class":111},"      box ",[101,86947,1702],{"class":107},[101,86949,86950],{"class":111}," box.",[101,86952,56995],{"class":1950},[101,86954,1963],{"class":111},[101,86956,86957],{"class":103,"line":16874},[101,86958,86959],{"class":170},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[101,86961,86962],{"class":103,"line":16887},[101,86963,86964],{"class":170},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[101,86966,86967],{"class":103,"line":16892},[101,86968,86969],{"class":170},"      \u002F\u002F append可以增加对象\n",[101,86971,86972,86975,86978,86980,86983],{"class":103,"line":16897},[101,86973,86974],{"class":111},"      document.body.",[101,86976,86977],{"class":1950},"append",[101,86979,112],{"class":111},[101,86981,86982],{"class":160},"this",[101,86984,86985],{"class":111},".modalBox)\n",[101,86987,86988],{"class":103,"line":16902},[101,86989,2387],{"emptyLinePlaceholder":27},[101,86991,86992],{"class":103,"line":16915},[101,86993,86994],{"class":170},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[101,86996,86997,86999,87002,87004,87006,87009,87011,87013,87015,87017,87020,87022],{"class":103,"line":16920},[101,86998,70040],{"class":160},[101,87000,87001],{"class":111},".modalBox.",[101,87003,54388],{"class":1950},[101,87005,112],{"class":111},[101,87007,87008],{"class":216},"'i'",[101,87010,30815],{"class":111},[101,87012,57802],{"class":1950},[101,87014,112],{"class":111},[101,87016,57807],{"class":216},[101,87018,87019],{"class":111},", () ",[101,87021,84711],{"class":107},[101,87023,15560],{"class":111},[101,87025,87026],{"class":103,"line":32622},[101,87027,87028],{"class":170},"        \u002F\u002F 这个地方需要用到箭头函数\n",[101,87030,87031],{"class":103,"line":32628},[101,87032,87033],{"class":170},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[101,87035,87036],{"class":103,"line":32634},[101,87037,87038],{"class":170},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[101,87040,87041,87043,87045,87048],{"class":103,"line":32640},[101,87042,64715],{"class":160},[101,87044,669],{"class":111},[101,87046,87047],{"class":1950},"close",[101,87049,1963],{"class":111},[101,87051,87052],{"class":103,"line":32646},[101,87053,64804],{"class":111},[101,87055,87056],{"class":103,"line":32657},[101,87057,2174],{"class":111},[101,87059,87060],{"class":103,"line":32663},[101,87061,2387],{"emptyLinePlaceholder":27},[101,87063,87064],{"class":103,"line":32683},[101,87065,87066],{"class":170},"    \u002F\u002F 测试一下 点击 删除按钮\n",[101,87068,87069,87071,87073,87075,87078,87080,87082,87084,87086,87088,87090],{"class":103,"line":32689},[101,87070,52396],{"class":111},[101,87072,54388],{"class":1950},[101,87074,112],{"class":111},[101,87076,87077],{"class":216},"'#delete'",[101,87079,30815],{"class":111},[101,87081,57802],{"class":1950},[101,87083,112],{"class":111},[101,87085,57807],{"class":216},[101,87087,87019],{"class":111},[101,87089,84711],{"class":107},[101,87091,15560],{"class":111},[101,87093,87094],{"class":103,"line":32700},[101,87095,87096],{"class":170},"      \u002F\u002F 先调用Model构造函数\n",[101,87098,87099,87101,87104,87106,87108,87110,87112,87115,87117,87120],{"class":103,"line":32706},[101,87100,58217],{"class":107},[101,87102,87103],{"class":160}," del",[101,87105,13552],{"class":107},[101,87107,11566],{"class":107},[101,87109,86760],{"class":1950},[101,87111,112],{"class":111},[101,87113,87114],{"class":216},"'温馨的提示'",[101,87116,12423],{"class":111},[101,87118,87119],{"class":216},"'您没有删除权限操作'",[101,87121,118],{"class":111},[101,87123,87124],{"class":103,"line":32712},[101,87125,87126],{"class":170},"      \u002F\u002F 实例对象调用open方法\n",[101,87128,87129,87132,87134],{"class":103,"line":32718},[101,87130,87131],{"class":111},"      del.",[101,87133,86904],{"class":1950},[101,87135,1963],{"class":111},[101,87137,87138],{"class":103,"line":32724},[101,87139,33450],{"class":111},[101,87141,87142],{"class":103,"line":32730},[101,87143,87144],{"class":170},"    \u002F\u002F 测试一下 点击 登录按钮\n",[101,87146,87147,87149,87151,87153,87156,87158,87160,87162,87164,87166,87168],{"class":103,"line":32736},[101,87148,52396],{"class":111},[101,87150,54388],{"class":1950},[101,87152,112],{"class":111},[101,87154,87155],{"class":216},"'#login'",[101,87157,30815],{"class":111},[101,87159,57802],{"class":1950},[101,87161,112],{"class":111},[101,87163,57807],{"class":216},[101,87165,87019],{"class":111},[101,87167,84711],{"class":107},[101,87169,15560],{"class":111},[101,87171,87172],{"class":103,"line":32742},[101,87173,87096],{"class":170},[101,87175,87176,87178,87181,87183,87185,87187,87189,87192,87194,87197],{"class":103,"line":32762},[101,87177,58217],{"class":107},[101,87179,87180],{"class":160}," log",[101,87182,13552],{"class":107},[101,87184,11566],{"class":107},[101,87186,86760],{"class":1950},[101,87188,112],{"class":111},[101,87190,87191],{"class":216},"'友情提示'",[101,87193,12423],{"class":111},[101,87195,87196],{"class":216},"'您还没有登录呢'",[101,87198,118],{"class":111},[101,87200,87201],{"class":103,"line":32768},[101,87202,87126],{"class":170},[101,87204,87205,87208,87210],{"class":103,"line":32784},[101,87206,87207],{"class":111},"      log.",[101,87209,86904],{"class":1950},[101,87211,1963],{"class":111},[101,87213,87214],{"class":103,"line":32790},[101,87215,33450],{"class":111},[101,87217,87218],{"class":103,"line":32804},[101,87219,87220],{"class":170},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[101,87222,87223,87225,87227,87229,87231,87233,87235,87237],{"class":103,"line":32810},[101,87224,86895],{"class":160},[101,87226,669],{"class":111},[101,87228,85568],{"class":160},[101,87230,669],{"class":111},[101,87232,87047],{"class":1950},[101,87234,13552],{"class":107},[101,87236,58907],{"class":107},[101,87238,54441],{"class":111},[101,87240,87241,87243,87245,87247],{"class":103,"line":32825},[101,87242,70040],{"class":160},[101,87244,87001],{"class":111},[101,87246,56995],{"class":1950},[101,87248,1963],{"class":111},[101,87250,87251],{"class":103,"line":32831},[101,87252,2174],{"class":111},[101,87254,87255,87257,87259],{"class":103,"line":32840},[101,87256,52406],{"class":111},[101,87258,51802],{"class":51289},[101,87260,51296],{"class":111},[101,87262,87263,87265,87267],{"class":103,"line":32846},[101,87264,51774],{"class":111},[101,87266,51789],{"class":51289},[101,87268,51296],{"class":111},[101,87270,87271],{"class":103,"line":32855},[101,87272,2387],{"emptyLinePlaceholder":27},[101,87274,87275,87277,87279],{"class":103,"line":32861},[101,87276,51774],{"class":111},[101,87278,50624],{"class":51289},[101,87280,51296],{"class":111},[10,87282,87283],{},[1449,87284],{"alt":20,"src":87285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[43,87287,87289],{"id":87288},"_414-深浅拷贝","4.14 深浅拷贝",[72,87291,87293],{"id":87292},"_4141-浅拷贝","4.14.1 浅拷贝",[10,87295,87296],{},[1449,87297],{"alt":20,"src":87298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[10,87300,87301],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[10,87303,87304],{},[1449,87305],{"alt":20,"src":87306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[10,87308,87309],{},[1449,87310],{"alt":20,"src":87311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[10,87313,87314],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[10,87316,87317],{},[1449,87318],{"alt":20,"src":87319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[10,87321,11320],{},[10,87323,87324],{},[1449,87325],{"alt":20,"src":87326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[72,87328,87330],{"id":87329},"_4142-深拷贝","4.14.2 深拷贝",[10,87332,87333],{},"深拷贝：拷贝的是对象，不是地址",[10,87335,87336],{},"常用的三种方法：",[55,87338,87339,87342,87345],{},[58,87340,87341],{},"通过递归实现深拷贝",[58,87343,87344],{},"lodash\u002FcloneDeep",[58,87346,87347],{},"通过JSON.stringify()实现",[21986,87349,87351],{"id":87350},"_41421-递归函数","4.14.2.1 递归函数",[10,87353,87354],{},[1449,87355],{"alt":20,"src":87356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[55,87358,87359],{},[58,87360,87361],{},"死递归占溢出：",[92,87363,87365],{"className":53056,"code":87364,"language":53058,"meta":20,"style":20},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[98,87366,87367,87375,87383,87387,87392,87396,87401,87409],{"__ignoreMap":20},[101,87368,87369,87371,87373],{"class":103,"line":104},[101,87370,1021],{"class":111},[101,87372,51789],{"class":51289},[101,87374,51296],{"class":111},[101,87376,87377,87379,87381],{"class":103,"line":21},[101,87378,52133],{"class":111},[101,87380,51802],{"class":51289},[101,87382,51296],{"class":111},[101,87384,87385],{"class":103,"line":1166},[101,87386,77132],{"class":111},[101,87388,87389],{"class":103,"line":1181},[101,87390,87391],{"class":111},"      fn()\n",[101,87393,87394],{"class":103,"line":1187},[101,87395,2174],{"class":111},[101,87397,87398],{"class":103,"line":1201},[101,87399,87400],{"class":111},"    fn()\n",[101,87402,87403,87405,87407],{"class":103,"line":1207},[101,87404,52406],{"class":111},[101,87406,51802],{"class":51289},[101,87408,51296],{"class":111},[101,87410,87411,87413,87415],{"class":103,"line":1298},[101,87412,51774],{"class":111},[101,87414,51789],{"class":51289},[101,87416,51296],{"class":111},[55,87418,87419],{"start":21},[58,87420,87421],{},"递归函数要加判断条件：",[10,87423,87424],{},[1449,87425],{"alt":20,"src":87426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[55,87428,87429],{"start":1166},[58,87430,87431],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[92,87433,87435],{"className":50622,"code":87434,"language":50624,"meta":20,"style":20},"\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",[98,87436,87437,87447,87461,87465,87473,87487,87507,87519,87527,87531,87539,87551,87559,87567,87592,87604,87608,87615,87623,87631,87635],{"__ignoreMap":20},[101,87438,87439,87441,87443,87445],{"class":103,"line":104},[101,87440,51286],{"class":111},[101,87442,51290],{"class":51289},[101,87444,51293],{"class":1950},[101,87446,51296],{"class":111},[101,87448,87449,87451,87453,87455,87457,87459],{"class":103,"line":21},[101,87450,1021],{"class":111},[101,87452,50624],{"class":51289},[101,87454,51305],{"class":1950},[101,87456,157],{"class":111},[101,87458,51310],{"class":216},[101,87460,51296],{"class":111},[101,87462,87463],{"class":103,"line":1166},[101,87464,2387],{"emptyLinePlaceholder":27},[101,87466,87467,87469,87471],{"class":103,"line":1181},[101,87468,1021],{"class":111},[101,87470,51323],{"class":51289},[101,87472,51296],{"class":111},[101,87474,87475,87477,87479,87481,87483,87485],{"class":103,"line":1187},[101,87476,52133],{"class":111},[101,87478,51333],{"class":51289},[101,87480,51336],{"class":1950},[101,87482,157],{"class":111},[101,87484,51341],{"class":216},[101,87486,51296],{"class":111},[101,87488,87489,87491,87493,87495,87497,87499,87501,87503,87505],{"class":103,"line":1201},[101,87490,52133],{"class":111},[101,87492,51333],{"class":51289},[101,87494,14908],{"class":1950},[101,87496,157],{"class":111},[101,87498,51380],{"class":216},[101,87500,51360],{"class":1950},[101,87502,157],{"class":111},[101,87504,51387],{"class":216},[101,87506,51296],{"class":111},[101,87508,87509,87511,87513,87515,87517],{"class":103,"line":1207},[101,87510,52133],{"class":111},[101,87512,51396],{"class":51289},[101,87514,51399],{"class":111},[101,87516,51396],{"class":51289},[101,87518,51296],{"class":111},[101,87520,87521,87523,87525],{"class":103,"line":1298},[101,87522,51774],{"class":111},[101,87524,51323],{"class":51289},[101,87526,51296],{"class":111},[101,87528,87529],{"class":103,"line":1304},[101,87530,2387],{"emptyLinePlaceholder":27},[101,87532,87533,87535,87537],{"class":103,"line":1316},[101,87534,1021],{"class":111},[101,87536,51789],{"class":51289},[101,87538,51296],{"class":111},[101,87540,87541,87543,87545,87547,87549],{"class":103,"line":1599},[101,87542,52133],{"class":111},[101,87544,51600],{"class":51289},[101,87546,55303],{"class":111},[101,87548,51600],{"class":51289},[101,87550,51296],{"class":111},[101,87552,87553,87555,87557],{"class":103,"line":1604},[101,87554,52133],{"class":111},[101,87556,51802],{"class":51289},[101,87558,51296],{"class":111},[101,87560,87561,87563,87565],{"class":103,"line":1610},[101,87562,70073],{"class":107},[101,87564,73762],{"class":1950},[101,87566,10841],{"class":111},[101,87568,87569,87571,87573,87575,87577,87579,87581,87583,87585,87587,87590],{"class":103,"line":1615},[101,87570,55760],{"class":111},[101,87572,54388],{"class":1950},[101,87574,112],{"class":111},[101,87576,81920],{"class":216},[101,87578,74238],{"class":111},[101,87580,157],{"class":107},[101,87582,11566],{"class":107},[101,87584,73778],{"class":1950},[101,87586,17249],{"class":111},[101,87588,87589],{"class":1950},"toLocaleString",[101,87591,1963],{"class":111},[101,87593,87594,87597,87600,87602],{"class":103,"line":1629},[101,87595,87596],{"class":1950},"      setTimeout",[101,87598,87599],{"class":111},"(getTime, ",[101,87601,6398],{"class":160},[101,87603,118],{"class":111},[101,87605,87606],{"class":103,"line":1634},[101,87607,2174],{"class":111},[101,87609,87610,87613],{"class":103,"line":1640},[101,87611,87612],{"class":1950},"    getTime",[101,87614,1963],{"class":111},[101,87616,87617,87619,87621],{"class":103,"line":1661},[101,87618,52406],{"class":111},[101,87620,51802],{"class":51289},[101,87622,51296],{"class":111},[101,87624,87625,87627,87629],{"class":103,"line":1666},[101,87626,51774],{"class":111},[101,87628,51789],{"class":51289},[101,87630,51296],{"class":111},[101,87632,87633],{"class":103,"line":1680},[101,87634,2387],{"emptyLinePlaceholder":27},[101,87636,87637,87639,87641],{"class":103,"line":1685},[101,87638,51774],{"class":111},[101,87640,50624],{"class":51289},[101,87642,51296],{"class":111},[10,87644,87645],{},[1449,87646],{"alt":20,"src":87647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[55,87649,87650],{"start":1181},[58,87651,87341],{},[10,87653,87654],{},[1449,87655],{"alt":20,"src":87656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[10,87658,87659],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[10,87661,39178],{},[10,87663,87664],{},"这个是简易版的递归函数深拷贝",[10,87666,87667],{},"一定要注意先数组再对象，因为万物皆可对象",[92,87669,87671],{"className":50622,"code":87670,"language":50624,"meta":20,"style":20},"\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",[98,87672,87673,87683,87697,87701,87709,87723,87743,87755,87763,87767,87775,87783,87793,87802,87810,87826,87830,87838,87842,87846,87858,87863,87882,87898,87903,87908,87913,87928,87933,87938,87947,87955,87972,87980,87986,87994,87999,88004,88013,88017,88021,88025,88036,88045,88055,88069,88079,88087,88095,88103,88107],{"__ignoreMap":20},[101,87674,87675,87677,87679,87681],{"class":103,"line":104},[101,87676,51286],{"class":111},[101,87678,51290],{"class":51289},[101,87680,51293],{"class":1950},[101,87682,51296],{"class":111},[101,87684,87685,87687,87689,87691,87693,87695],{"class":103,"line":21},[101,87686,1021],{"class":111},[101,87688,50624],{"class":51289},[101,87690,51305],{"class":1950},[101,87692,157],{"class":111},[101,87694,51310],{"class":216},[101,87696,51296],{"class":111},[101,87698,87699],{"class":103,"line":1166},[101,87700,2387],{"emptyLinePlaceholder":27},[101,87702,87703,87705,87707],{"class":103,"line":1181},[101,87704,1021],{"class":111},[101,87706,51323],{"class":51289},[101,87708,51296],{"class":111},[101,87710,87711,87713,87715,87717,87719,87721],{"class":103,"line":1187},[101,87712,52133],{"class":111},[101,87714,51333],{"class":51289},[101,87716,51336],{"class":1950},[101,87718,157],{"class":111},[101,87720,51341],{"class":216},[101,87722,51296],{"class":111},[101,87724,87725,87727,87729,87731,87733,87735,87737,87739,87741],{"class":103,"line":1201},[101,87726,52133],{"class":111},[101,87728,51333],{"class":51289},[101,87730,14908],{"class":1950},[101,87732,157],{"class":111},[101,87734,51380],{"class":216},[101,87736,51360],{"class":1950},[101,87738,157],{"class":111},[101,87740,51387],{"class":216},[101,87742,51296],{"class":111},[101,87744,87745,87747,87749,87751,87753],{"class":103,"line":1207},[101,87746,52133],{"class":111},[101,87748,51396],{"class":51289},[101,87750,51399],{"class":111},[101,87752,51396],{"class":51289},[101,87754,51296],{"class":111},[101,87756,87757,87759,87761],{"class":103,"line":1298},[101,87758,51774],{"class":111},[101,87760,51323],{"class":51289},[101,87762,51296],{"class":111},[101,87764,87765],{"class":103,"line":1304},[101,87766,2387],{"emptyLinePlaceholder":27},[101,87768,87769,87771,87773],{"class":103,"line":1316},[101,87770,1021],{"class":111},[101,87772,51789],{"class":51289},[101,87774,51296],{"class":111},[101,87776,87777,87779,87781],{"class":103,"line":1599},[101,87778,52133],{"class":111},[101,87780,51802],{"class":51289},[101,87782,51296],{"class":111},[101,87784,87785,87787,87789,87791],{"class":103,"line":1604},[101,87786,11209],{"class":107},[101,87788,69960],{"class":160},[101,87790,13552],{"class":107},[101,87792,15560],{"class":111},[101,87794,87795,87797,87800],{"class":103,"line":1610},[101,87796,71605],{"class":111},[101,87798,87799],{"class":216},"'pink'",[101,87801,31455],{"class":111},[101,87803,87804,87806,87808],{"class":103,"line":1615},[101,87805,71615],{"class":111},[101,87807,761],{"class":160},[101,87809,31455],{"class":111},[101,87811,87812,87815,87818,87820,87823],{"class":103,"line":1629},[101,87813,87814],{"class":111},"      hobby: [",[101,87816,87817],{"class":216},"'乒乓球'",[101,87819,12423],{"class":111},[101,87821,87822],{"class":216},"'足球'",[101,87824,87825],{"class":111},"],\n",[101,87827,87828],{"class":103,"line":1634},[101,87829,77861],{"class":111},[101,87831,87832,87835],{"class":103,"line":1640},[101,87833,87834],{"class":111},"        baby: ",[101,87836,87837],{"class":216},"'小pink'\n",[101,87839,87840],{"class":103,"line":1661},[101,87841,52387],{"class":111},[101,87843,87844],{"class":103,"line":1666},[101,87845,2174],{"class":111},[101,87847,87848,87850,87853,87855],{"class":103,"line":1680},[101,87849,11209],{"class":107},[101,87851,87852],{"class":160}," o",[101,87854,13552],{"class":107},[101,87856,87857],{"class":111}," {}\n",[101,87859,87860],{"class":103,"line":1685},[101,87861,87862],{"class":170},"    \u002F\u002F 拷贝函数\n",[101,87864,87865,87867,87870,87872,87875,87877,87880],{"class":103,"line":1714},[101,87866,70073],{"class":107},[101,87868,87869],{"class":1950}," deepCopy",[101,87871,112],{"class":111},[101,87873,87874],{"class":5204},"newObj",[101,87876,12423],{"class":111},[101,87878,87879],{"class":5204},"oldObj",[101,87881,12430],{"class":111},[101,87883,87884,87886,87888,87890,87893,87895],{"class":103,"line":1719},[101,87885,52273],{"class":107},[101,87887,1645],{"class":111},[101,87889,51836],{"class":107},[101,87891,87892],{"class":111}," k ",[101,87894,26032],{"class":107},[101,87896,87897],{"class":111}," oldObj) {\n",[101,87899,87900],{"class":103,"line":1736},[101,87901,87902],{"class":170},"        \u002F\u002F 处理数组的问题\n",[101,87904,87905],{"class":103,"line":1741},[101,87906,87907],{"class":170},"        \u002F\u002F 判断是否属于数组\n",[101,87909,87910],{"class":103,"line":1746},[101,87911,87912],{"class":170},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[101,87914,87915,87917,87920,87923,87926],{"class":103,"line":1751},[101,87916,2484],{"class":107},[101,87918,87919],{"class":111}," (oldObj[k] ",[101,87921,87922],{"class":107},"instanceof",[101,87924,87925],{"class":1950}," Array",[101,87927,12430],{"class":111},[101,87929,87930],{"class":103,"line":1765},[101,87931,87932],{"class":170},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[101,87934,87935],{"class":103,"line":1770},[101,87936,87937],{"class":170},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[101,87939,87940,87943,87945],{"class":103,"line":2564},[101,87941,87942],{"class":111},"          newObj[k] ",[101,87944,157],{"class":107},[101,87946,51827],{"class":111},[101,87948,87949,87952],{"class":103,"line":2578},[101,87950,87951],{"class":1950},"          deepCopy",[101,87953,87954],{"class":111},"(newObj[k], oldObj[k])\n",[101,87956,87957,87959,87961,87963,87965,87967,87970],{"class":103,"line":2586},[101,87958,80069],{"class":111},[101,87960,1688],{"class":107},[101,87962,1691],{"class":107},[101,87964,87919],{"class":111},[101,87966,87922],{"class":107},[101,87968,87969],{"class":1950}," Object",[101,87971,12430],{"class":111},[101,87973,87974,87976,87978],{"class":103,"line":2591},[101,87975,87942],{"class":111},[101,87977,157],{"class":107},[101,87979,87857],{"class":111},[101,87981,87982,87984],{"class":103,"line":2597},[101,87983,87951],{"class":1950},[101,87985,87954],{"class":111},[101,87987,87988,87990,87992],{"class":103,"line":2603},[101,87989,80069],{"class":111},[101,87991,1688],{"class":107},[101,87993,15560],{"class":111},[101,87995,87996],{"class":103,"line":2608},[101,87997,87998],{"class":170},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[101,88000,88001],{"class":103,"line":7936},[101,88002,88003],{"class":170},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[101,88005,88006,88008,88010],{"class":103,"line":7960},[101,88007,87942],{"class":111},[101,88009,157],{"class":107},[101,88011,88012],{"class":111}," oldObj[k]\n",[101,88014,88015],{"class":103,"line":7965},[101,88016,2516],{"class":111},[101,88018,88019],{"class":103,"line":7971},[101,88020,52387],{"class":111},[101,88022,88023],{"class":103,"line":7998},[101,88024,2174],{"class":111},[101,88026,88027,88030,88033],{"class":103,"line":8003},[101,88028,88029],{"class":1950},"    deepCopy",[101,88031,88032],{"class":111},"(o, obj) ",[101,88034,88035],{"class":170},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[101,88037,88038,88040,88042],{"class":103,"line":8009},[101,88039,73742],{"class":111},[101,88041,58236],{"class":1950},[101,88043,88044],{"class":111},"(o)\n",[101,88046,88047,88050,88052],{"class":103,"line":8021},[101,88048,88049],{"class":111},"    o.age ",[101,88051,157],{"class":107},[101,88053,88054],{"class":160}," 20\n",[101,88056,88057,88060,88062,88064,88066],{"class":103,"line":8033},[101,88058,88059],{"class":111},"    o.hobby[",[101,88061,303],{"class":160},[101,88063,4430],{"class":111},[101,88065,157],{"class":107},[101,88067,88068],{"class":216}," '篮球'\n",[101,88070,88071,88074,88076],{"class":103,"line":8045},[101,88072,88073],{"class":111},"    o.family ",[101,88075,157],{"class":107},[101,88077,88078],{"class":216}," '老pink'\n",[101,88080,88081,88083,88085],{"class":103,"line":9704},[101,88082,73742],{"class":111},[101,88084,58236],{"class":1950},[101,88086,70025],{"class":111},[101,88088,88089,88091,88093],{"class":103,"line":9729},[101,88090,52406],{"class":111},[101,88092,51802],{"class":51289},[101,88094,51296],{"class":111},[101,88096,88097,88099,88101],{"class":103,"line":9752},[101,88098,51774],{"class":111},[101,88100,51789],{"class":51289},[101,88102,51296],{"class":111},[101,88104,88105],{"class":103,"line":9776},[101,88106,2387],{"emptyLinePlaceholder":27},[101,88108,88109,88111,88113],{"class":103,"line":9781},[101,88110,51774],{"class":111},[101,88112,50624],{"class":51289},[101,88114,51296],{"class":111},[10,88116,88117],{},[1449,88118],{"alt":20,"src":88119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21986,88121,88123,88124],{"id":88122},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[261,88125,88126],{},"js库lodash里面cloneDeep内部实现了深拷贝",[10,88128,88129],{},[14,88130,88131],{"href":88131,"rel":88132},"https:\u002F\u002Fwww.lodashjs.com\u002F",[18],[10,88134,88135],{},"lodash里边的方法都要加上一个下划线_",[10,88137,88138],{},"_.cloneDeep()",[92,88140,88142],{"className":50622,"code":88141,"language":50624,"meta":20,"style":20},"\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",[98,88143,88144,88154,88168,88172,88180,88194,88214,88226,88234,88238,88246,88251,88270,88278,88288,88296,88304,88316,88320,88326,88330,88334,88350,88358,88367,88375,88383,88391,88395],{"__ignoreMap":20},[101,88145,88146,88148,88150,88152],{"class":103,"line":104},[101,88147,51286],{"class":111},[101,88149,51290],{"class":51289},[101,88151,51293],{"class":1950},[101,88153,51296],{"class":111},[101,88155,88156,88158,88160,88162,88164,88166],{"class":103,"line":21},[101,88157,1021],{"class":111},[101,88159,50624],{"class":51289},[101,88161,51305],{"class":1950},[101,88163,157],{"class":111},[101,88165,51310],{"class":216},[101,88167,51296],{"class":111},[101,88169,88170],{"class":103,"line":1166},[101,88171,2387],{"emptyLinePlaceholder":27},[101,88173,88174,88176,88178],{"class":103,"line":1181},[101,88175,1021],{"class":111},[101,88177,51323],{"class":51289},[101,88179,51296],{"class":111},[101,88181,88182,88184,88186,88188,88190,88192],{"class":103,"line":1187},[101,88183,52133],{"class":111},[101,88185,51333],{"class":51289},[101,88187,51336],{"class":1950},[101,88189,157],{"class":111},[101,88191,51341],{"class":216},[101,88193,51296],{"class":111},[101,88195,88196,88198,88200,88202,88204,88206,88208,88210,88212],{"class":103,"line":1201},[101,88197,52133],{"class":111},[101,88199,51333],{"class":51289},[101,88201,14908],{"class":1950},[101,88203,157],{"class":111},[101,88205,51380],{"class":216},[101,88207,51360],{"class":1950},[101,88209,157],{"class":111},[101,88211,51387],{"class":216},[101,88213,51296],{"class":111},[101,88215,88216,88218,88220,88222,88224],{"class":103,"line":1207},[101,88217,52133],{"class":111},[101,88219,51396],{"class":51289},[101,88221,51399],{"class":111},[101,88223,51396],{"class":51289},[101,88225,51296],{"class":111},[101,88227,88228,88230,88232],{"class":103,"line":1298},[101,88229,51774],{"class":111},[101,88231,51323],{"class":51289},[101,88233,51296],{"class":111},[101,88235,88236],{"class":103,"line":1304},[101,88237,2387],{"emptyLinePlaceholder":27},[101,88239,88240,88242,88244],{"class":103,"line":1316},[101,88241,1021],{"class":111},[101,88243,51789],{"class":51289},[101,88245,51296],{"class":111},[101,88247,88248],{"class":103,"line":1599},[101,88249,88250],{"class":170},"  \u003C!-- 先引用这个库 -->\n",[101,88252,88253,88255,88257,88259,88261,88264,88266,88268],{"class":103,"line":1604},[101,88254,52133],{"class":111},[101,88256,51802],{"class":51289},[101,88258,55228],{"class":1950},[101,88260,157],{"class":111},[101,88262,88263],{"class":216},"\"lodash.min.js\"",[101,88265,55303],{"class":111},[101,88267,51802],{"class":51289},[101,88269,51296],{"class":111},[101,88271,88272,88274,88276],{"class":103,"line":1610},[101,88273,52133],{"class":111},[101,88275,51802],{"class":51289},[101,88277,51296],{"class":111},[101,88279,88280,88282,88284,88286],{"class":103,"line":1615},[101,88281,11209],{"class":107},[101,88283,69960],{"class":160},[101,88285,13552],{"class":107},[101,88287,15560],{"class":111},[101,88289,88290,88292,88294],{"class":103,"line":1629},[101,88291,71605],{"class":111},[101,88293,87799],{"class":216},[101,88295,31455],{"class":111},[101,88297,88298,88300,88302],{"class":103,"line":1634},[101,88299,71615],{"class":111},[101,88301,761],{"class":160},[101,88303,31455],{"class":111},[101,88305,88306,88308,88310,88312,88314],{"class":103,"line":1640},[101,88307,87814],{"class":111},[101,88309,87817],{"class":216},[101,88311,12423],{"class":111},[101,88313,87822],{"class":216},[101,88315,87825],{"class":111},[101,88317,88318],{"class":103,"line":1661},[101,88319,77861],{"class":111},[101,88321,88322,88324],{"class":103,"line":1666},[101,88323,87834],{"class":111},[101,88325,87837],{"class":216},[101,88327,88328],{"class":103,"line":1680},[101,88329,52387],{"class":111},[101,88331,88332],{"class":103,"line":1685},[101,88333,2174],{"class":111},[101,88335,88336,88338,88340,88342,88345,88348],{"class":103,"line":1714},[101,88337,11209],{"class":107},[101,88339,87852],{"class":160},[101,88341,13552],{"class":107},[101,88343,88344],{"class":111}," _.",[101,88346,88347],{"class":1950},"cloneDeep",[101,88349,70025],{"class":111},[101,88351,88352,88354,88356],{"class":103,"line":1719},[101,88353,73742],{"class":111},[101,88355,58236],{"class":1950},[101,88357,88044],{"class":111},[101,88359,88360,88363,88365],{"class":103,"line":1736},[101,88361,88362],{"class":111},"    o.family.baby ",[101,88364,157],{"class":107},[101,88366,88078],{"class":216},[101,88368,88369,88371,88373],{"class":103,"line":1741},[101,88370,73742],{"class":111},[101,88372,58236],{"class":1950},[101,88374,70025],{"class":111},[101,88376,88377,88379,88381],{"class":103,"line":1746},[101,88378,52406],{"class":111},[101,88380,51802],{"class":51289},[101,88382,51296],{"class":111},[101,88384,88385,88387,88389],{"class":103,"line":1751},[101,88386,51774],{"class":111},[101,88388,51789],{"class":51289},[101,88390,51296],{"class":111},[101,88392,88393],{"class":103,"line":1765},[101,88394,2387],{"emptyLinePlaceholder":27},[101,88396,88397,88399,88401],{"class":103,"line":1770},[101,88398,51774],{"class":111},[101,88400,50624],{"class":51289},[101,88402,51296],{"class":111},[10,88404,88405],{},[1449,88406],{"alt":20,"src":88407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21986,88409,88411],{"id":88410},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[92,88413,88415],{"className":50622,"code":88414,"language":50624,"meta":20,"style":20},"\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",[98,88416,88417,88427,88441,88445,88453,88467,88487,88499,88507,88511,88519,88527,88537,88545,88553,88565,88569,88575,88579,88583,88588,88593,88598,88624,88632,88641,88649,88657,88665,88669],{"__ignoreMap":20},[101,88418,88419,88421,88423,88425],{"class":103,"line":104},[101,88420,51286],{"class":111},[101,88422,51290],{"class":51289},[101,88424,51293],{"class":1950},[101,88426,51296],{"class":111},[101,88428,88429,88431,88433,88435,88437,88439],{"class":103,"line":21},[101,88430,1021],{"class":111},[101,88432,50624],{"class":51289},[101,88434,51305],{"class":1950},[101,88436,157],{"class":111},[101,88438,51310],{"class":216},[101,88440,51296],{"class":111},[101,88442,88443],{"class":103,"line":1166},[101,88444,2387],{"emptyLinePlaceholder":27},[101,88446,88447,88449,88451],{"class":103,"line":1181},[101,88448,1021],{"class":111},[101,88450,51323],{"class":51289},[101,88452,51296],{"class":111},[101,88454,88455,88457,88459,88461,88463,88465],{"class":103,"line":1187},[101,88456,52133],{"class":111},[101,88458,51333],{"class":51289},[101,88460,51336],{"class":1950},[101,88462,157],{"class":111},[101,88464,51341],{"class":216},[101,88466,51296],{"class":111},[101,88468,88469,88471,88473,88475,88477,88479,88481,88483,88485],{"class":103,"line":1201},[101,88470,52133],{"class":111},[101,88472,51333],{"class":51289},[101,88474,14908],{"class":1950},[101,88476,157],{"class":111},[101,88478,51380],{"class":216},[101,88480,51360],{"class":1950},[101,88482,157],{"class":111},[101,88484,51387],{"class":216},[101,88486,51296],{"class":111},[101,88488,88489,88491,88493,88495,88497],{"class":103,"line":1207},[101,88490,52133],{"class":111},[101,88492,51396],{"class":51289},[101,88494,51399],{"class":111},[101,88496,51396],{"class":51289},[101,88498,51296],{"class":111},[101,88500,88501,88503,88505],{"class":103,"line":1298},[101,88502,51774],{"class":111},[101,88504,51323],{"class":51289},[101,88506,51296],{"class":111},[101,88508,88509],{"class":103,"line":1304},[101,88510,2387],{"emptyLinePlaceholder":27},[101,88512,88513,88515,88517],{"class":103,"line":1316},[101,88514,1021],{"class":111},[101,88516,51789],{"class":51289},[101,88518,51296],{"class":111},[101,88520,88521,88523,88525],{"class":103,"line":1599},[101,88522,52133],{"class":111},[101,88524,51802],{"class":51289},[101,88526,51296],{"class":111},[101,88528,88529,88531,88533,88535],{"class":103,"line":1604},[101,88530,11209],{"class":107},[101,88532,69960],{"class":160},[101,88534,13552],{"class":107},[101,88536,15560],{"class":111},[101,88538,88539,88541,88543],{"class":103,"line":1610},[101,88540,71605],{"class":111},[101,88542,87799],{"class":216},[101,88544,31455],{"class":111},[101,88546,88547,88549,88551],{"class":103,"line":1615},[101,88548,71615],{"class":111},[101,88550,761],{"class":160},[101,88552,31455],{"class":111},[101,88554,88555,88557,88559,88561,88563],{"class":103,"line":1629},[101,88556,87814],{"class":111},[101,88558,87817],{"class":216},[101,88560,12423],{"class":111},[101,88562,87822],{"class":216},[101,88564,87825],{"class":111},[101,88566,88567],{"class":103,"line":1634},[101,88568,77861],{"class":111},[101,88570,88571,88573],{"class":103,"line":1640},[101,88572,87834],{"class":111},[101,88574,87837],{"class":216},[101,88576,88577],{"class":103,"line":1661},[101,88578,52387],{"class":111},[101,88580,88581],{"class":103,"line":1666},[101,88582,2174],{"class":111},[101,88584,88585],{"class":103,"line":1680},[101,88586,88587],{"class":170},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[101,88589,88590],{"class":103,"line":1685},[101,88591,88592],{"class":170},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[101,88594,88595],{"class":103,"line":1714},[101,88596,88597],{"class":170},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[101,88599,88600,88602,88604,88606,88609,88611,88614,88616,88618,88620,88622],{"class":103,"line":1719},[101,88601,11209],{"class":107},[101,88603,87852],{"class":160},[101,88605,13552],{"class":107},[101,88607,88608],{"class":160}," JSON",[101,88610,669],{"class":111},[101,88612,88613],{"class":1950},"parse",[101,88615,112],{"class":111},[101,88617,71653],{"class":160},[101,88619,669],{"class":111},[101,88621,71658],{"class":1950},[101,88623,71661],{"class":111},[101,88625,88626,88628,88630],{"class":103,"line":1736},[101,88627,73742],{"class":111},[101,88629,58236],{"class":1950},[101,88631,88044],{"class":111},[101,88633,88634,88636,88638],{"class":103,"line":1741},[101,88635,88362],{"class":111},[101,88637,157],{"class":107},[101,88639,88640],{"class":216}," '123'\n",[101,88642,88643,88645,88647],{"class":103,"line":1746},[101,88644,73742],{"class":111},[101,88646,58236],{"class":1950},[101,88648,70025],{"class":111},[101,88650,88651,88653,88655],{"class":103,"line":1751},[101,88652,52406],{"class":111},[101,88654,51802],{"class":51289},[101,88656,51296],{"class":111},[101,88658,88659,88661,88663],{"class":103,"line":1765},[101,88660,51774],{"class":111},[101,88662,51789],{"class":51289},[101,88664,51296],{"class":111},[101,88666,88667],{"class":103,"line":1770},[101,88668,2387],{"emptyLinePlaceholder":27},[101,88670,88671,88673,88675],{"class":103,"line":2564},[101,88672,51774],{"class":111},[101,88674,50624],{"class":51289},[101,88676,51296],{"class":111},[10,88678,88679],{},[1449,88680],{"alt":20,"src":88681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[43,88683,88685],{"id":88684},"_415-异常处理","4.15 异常处理",[55,88687,88688],{},[58,88689,88690],{},"throw抛异常",[10,88692,88693],{},[1449,88694],{"alt":20,"src":88695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[55,88697,88698],{"start":21},[58,88699,88700],{},"try\u002Fcatch 捕获错误信息",[10,88702,88703],{},[1449,88704],{"alt":20,"src":88705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[92,88707,88709],{"className":50622,"code":88708,"language":50624,"meta":20,"style":20},"\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",[98,88710,88711,88721,88735,88739,88747,88761,88781,88793,88801,88805,88813,88825,88833,88842,88849,88854,88873,88882,88893,88898,88908,88913,88918,88923,88940,88944,88949,88956,88968,88972,88984,88988,88992,88997,89002,89009,89017,89025,89029],{"__ignoreMap":20},[101,88712,88713,88715,88717,88719],{"class":103,"line":104},[101,88714,51286],{"class":111},[101,88716,51290],{"class":51289},[101,88718,51293],{"class":1950},[101,88720,51296],{"class":111},[101,88722,88723,88725,88727,88729,88731,88733],{"class":103,"line":21},[101,88724,1021],{"class":111},[101,88726,50624],{"class":51289},[101,88728,51305],{"class":1950},[101,88730,157],{"class":111},[101,88732,51310],{"class":216},[101,88734,51296],{"class":111},[101,88736,88737],{"class":103,"line":1166},[101,88738,2387],{"emptyLinePlaceholder":27},[101,88740,88741,88743,88745],{"class":103,"line":1181},[101,88742,1021],{"class":111},[101,88744,51323],{"class":51289},[101,88746,51296],{"class":111},[101,88748,88749,88751,88753,88755,88757,88759],{"class":103,"line":1187},[101,88750,52133],{"class":111},[101,88752,51333],{"class":51289},[101,88754,51336],{"class":1950},[101,88756,157],{"class":111},[101,88758,51341],{"class":216},[101,88760,51296],{"class":111},[101,88762,88763,88765,88767,88769,88771,88773,88775,88777,88779],{"class":103,"line":1201},[101,88764,52133],{"class":111},[101,88766,51333],{"class":51289},[101,88768,14908],{"class":1950},[101,88770,157],{"class":111},[101,88772,51380],{"class":216},[101,88774,51360],{"class":1950},[101,88776,157],{"class":111},[101,88778,51387],{"class":216},[101,88780,51296],{"class":111},[101,88782,88783,88785,88787,88789,88791],{"class":103,"line":1207},[101,88784,52133],{"class":111},[101,88786,51396],{"class":51289},[101,88788,51399],{"class":111},[101,88790,51396],{"class":51289},[101,88792,51296],{"class":111},[101,88794,88795,88797,88799],{"class":103,"line":1298},[101,88796,51774],{"class":111},[101,88798,51323],{"class":51289},[101,88800,51296],{"class":111},[101,88802,88803],{"class":103,"line":1304},[101,88804,2387],{"emptyLinePlaceholder":27},[101,88806,88807,88809,88811],{"class":103,"line":1316},[101,88808,1021],{"class":111},[101,88810,51789],{"class":51289},[101,88812,51296],{"class":111},[101,88814,88815,88817,88819,88821,88823],{"class":103,"line":1599},[101,88816,52133],{"class":111},[101,88818,10],{"class":51289},[101,88820,53483],{"class":111},[101,88822,10],{"class":51289},[101,88824,51296],{"class":111},[101,88826,88827,88829,88831],{"class":103,"line":1604},[101,88828,52133],{"class":111},[101,88830,51802],{"class":51289},[101,88832,51296],{"class":111},[101,88834,88835,88837,88840],{"class":103,"line":1610},[101,88836,70073],{"class":107},[101,88838,88839],{"class":1950}," fn",[101,88841,10841],{"class":111},[101,88843,88844,88847],{"class":103,"line":1615},[101,88845,88846],{"class":107},"      try",[101,88848,15560],{"class":111},[101,88850,88851],{"class":103,"line":1629},[101,88852,88853],{"class":170},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[101,88855,88856,88858,88860,88862,88864,88866,88868,88871],{"class":103,"line":1634},[101,88857,61259],{"class":107},[101,88859,6813],{"class":160},[101,88861,13552],{"class":107},[101,88863,54385],{"class":111},[101,88865,54388],{"class":1950},[101,88867,112],{"class":111},[101,88869,88870],{"class":216},"'.p'",[101,88872,118],{"class":111},[101,88874,88875,88878,88880],{"class":103,"line":1640},[101,88876,88877],{"class":111},"        p.style.color ",[101,88879,157],{"class":107},[101,88881,67040],{"class":216},[101,88883,88884,88887,88890],{"class":103,"line":1661},[101,88885,88886],{"class":111},"      } ",[101,88888,88889],{"class":107},"catch",[101,88891,88892],{"class":111}," (err) {\n",[101,88894,88895],{"class":103,"line":1666},[101,88896,88897],{"class":170},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[101,88899,88900,88903,88905],{"class":103,"line":1680},[101,88901,88902],{"class":111},"        console.",[101,88904,58236],{"class":1950},[101,88906,88907],{"class":111},"(err.message)\n",[101,88909,88910],{"class":103,"line":1685},[101,88911,88912],{"class":170},"        \u002F\u002F 想要中断程序，需要加return\n",[101,88914,88915],{"class":103,"line":1714},[101,88916,88917],{"class":170},"        \u002F\u002F return\n",[101,88919,88920],{"class":103,"line":1719},[101,88921,88922],{"class":170},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[101,88924,88925,88928,88930,88933,88935,88938],{"class":103,"line":1736},[101,88926,88927],{"class":107},"        throw",[101,88929,11566],{"class":107},[101,88931,88932],{"class":1950}," Error",[101,88934,112],{"class":111},[101,88936,88937],{"class":216},"'你看看，选择器错误了吧'",[101,88939,118],{"class":111},[101,88941,88942],{"class":103,"line":1741},[101,88943,52387],{"class":111},[101,88945,88946],{"class":103,"line":1746},[101,88947,88948],{"class":170},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[101,88950,88951,88954],{"class":103,"line":1751},[101,88952,88953],{"class":107},"      finally",[101,88955,15560],{"class":111},[101,88957,88958,88961,88963,88966],{"class":103,"line":1765},[101,88959,88960],{"class":1950},"        alert",[101,88962,112],{"class":111},[101,88964,88965],{"class":216},"'弹出对话框'",[101,88967,118],{"class":111},[101,88969,88970],{"class":103,"line":1770},[101,88971,52387],{"class":111},[101,88973,88974,88976,88978,88980,88982],{"class":103,"line":2564},[101,88975,58233],{"class":111},[101,88977,58236],{"class":1950},[101,88979,112],{"class":111},[101,88981,583],{"class":160},[101,88983,118],{"class":111},[101,88985,88986],{"class":103,"line":2578},[101,88987,2387],{"emptyLinePlaceholder":27},[101,88989,88990],{"class":103,"line":2586},[101,88991,2174],{"class":111},[101,88993,88994],{"class":103,"line":2591},[101,88995,88996],{"class":170},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[101,88998,88999],{"class":103,"line":2597},[101,89000,89001],{"class":170},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[101,89003,89004,89007],{"class":103,"line":2603},[101,89005,89006],{"class":1950},"    fn",[101,89008,1963],{"class":111},[101,89010,89011,89013,89015],{"class":103,"line":2608},[101,89012,52406],{"class":111},[101,89014,51802],{"class":51289},[101,89016,51296],{"class":111},[101,89018,89019,89021,89023],{"class":103,"line":7936},[101,89020,51774],{"class":111},[101,89022,51789],{"class":51289},[101,89024,51296],{"class":111},[101,89026,89027],{"class":103,"line":7960},[101,89028,2387],{"emptyLinePlaceholder":27},[101,89030,89031,89033,89035],{"class":103,"line":7965},[101,89032,51774],{"class":111},[101,89034,50624],{"class":51289},[101,89036,51296],{"class":111},[10,89038,89039],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[55,89041,89042],{"start":1166},[58,89043,89044],{},"debugger",[10,89046,89047],{},[1449,89048],{"alt":20,"src":89049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[10,89051,89052],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[43,89054,89056],{"id":89055},"_416-处理this","4.16 处理this",[72,89058,89060],{"id":89059},"_4161-this的指向","4.16.1 this的指向",[55,89062,89063],{},[58,89064,89065],{},"普通函数的this",[10,89067,89068],{},[1449,89069],{"alt":20,"src":89070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[55,89072,89073],{"start":21},[58,89074,89075],{},"箭头函数的this",[10,89077,89078],{},[1449,89079],{"alt":20,"src":89080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[10,89082,89083],{},[1449,89084],{"alt":20,"src":89085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[10,89087,89088],{},[1449,89089],{"alt":20,"src":89090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[72,89092,89094],{"id":89093},"_4162-this的改变","4.16.2 this的改变",[10,89096,89097],{},"call() apply() bind()",[55,89099,89100],{},[58,89101,89102],{},"call()",[10,89104,89105],{},[1449,89106],{"alt":20,"src":89107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[10,89109,89110],{},"两个作用：①调用函数；②改变this指向",[92,89112,89114],{"className":53056,"code":89113,"language":53058,"meta":20,"style":20},"\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",[98,89115,89116,89124,89132,89136,89141,89145,89150,89155,89160,89164,89169,89177],{"__ignoreMap":20},[101,89117,89118,89120,89122],{"class":103,"line":104},[101,89119,1021],{"class":111},[101,89121,51789],{"class":51289},[101,89123,51296],{"class":111},[101,89125,89126,89128,89130],{"class":103,"line":21},[101,89127,52133],{"class":111},[101,89129,51802],{"class":51289},[101,89131,51296],{"class":111},[101,89133,89134],{"class":103,"line":1166},[101,89135,71512],{"class":111},[101,89137,89138],{"class":103,"line":1181},[101,89139,89140],{"class":111},"      uname: 'pink'\n",[101,89142,89143],{"class":103,"line":1187},[101,89144,2174],{"class":111},[101,89146,89147],{"class":103,"line":1201},[101,89148,89149],{"class":111},"    function fn(x, y) {\n",[101,89151,89152],{"class":103,"line":1207},[101,89153,89154],{"class":111},"      console.log(this)  \u002F\u002Fwindow\n",[101,89156,89157],{"class":103,"line":1298},[101,89158,89159],{"class":111},"      console.log(x + y)\n",[101,89161,89162],{"class":103,"line":1304},[101,89163,2174],{"class":111},[101,89165,89166],{"class":103,"line":1316},[101,89167,89168],{"class":111},"    fn.call(obj, 1, 2)\n",[101,89170,89171,89173,89175],{"class":103,"line":1599},[101,89172,52406],{"class":111},[101,89174,51802],{"class":51289},[101,89176,51296],{"class":111},[101,89178,89179,89181,89183],{"class":103,"line":1604},[101,89180,51774],{"class":111},[101,89182,51789],{"class":51289},[101,89184,51296],{"class":111},[10,89186,89187],{},[1449,89188],{"alt":20,"src":89189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[55,89191,89192],{"start":21},[58,89193,89194],{},"apply()",[10,89196,89197],{},[1449,89198],{"alt":20,"src":89199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[10,89201,89110],{},[10,89203,89204],{},"call传递的是普通参数，而apply必须传递的是数组",[92,89206,89208],{"className":50622,"code":89207,"language":50624,"meta":20,"style":20},"\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",[98,89209,89210,89220,89234,89238,89246,89260,89280,89292,89300,89304,89312,89320,89330,89337,89341,89346,89362,89374,89388,89392,89397,89416,89421,89425,89430,89435,89443,89448,89470,89475,89491,89507,89519,89523,89528,89547,89555,89563,89567],{"__ignoreMap":20},[101,89211,89212,89214,89216,89218],{"class":103,"line":104},[101,89213,51286],{"class":111},[101,89215,51290],{"class":51289},[101,89217,51293],{"class":1950},[101,89219,51296],{"class":111},[101,89221,89222,89224,89226,89228,89230,89232],{"class":103,"line":21},[101,89223,1021],{"class":111},[101,89225,50624],{"class":51289},[101,89227,51305],{"class":1950},[101,89229,157],{"class":111},[101,89231,51310],{"class":216},[101,89233,51296],{"class":111},[101,89235,89236],{"class":103,"line":1166},[101,89237,2387],{"emptyLinePlaceholder":27},[101,89239,89240,89242,89244],{"class":103,"line":1181},[101,89241,1021],{"class":111},[101,89243,51323],{"class":51289},[101,89245,51296],{"class":111},[101,89247,89248,89250,89252,89254,89256,89258],{"class":103,"line":1187},[101,89249,52133],{"class":111},[101,89251,51333],{"class":51289},[101,89253,51336],{"class":1950},[101,89255,157],{"class":111},[101,89257,51341],{"class":216},[101,89259,51296],{"class":111},[101,89261,89262,89264,89266,89268,89270,89272,89274,89276,89278],{"class":103,"line":1201},[101,89263,52133],{"class":111},[101,89265,51333],{"class":51289},[101,89267,14908],{"class":1950},[101,89269,157],{"class":111},[101,89271,51380],{"class":216},[101,89273,51360],{"class":1950},[101,89275,157],{"class":111},[101,89277,51387],{"class":216},[101,89279,51296],{"class":111},[101,89281,89282,89284,89286,89288,89290],{"class":103,"line":1207},[101,89283,52133],{"class":111},[101,89285,51396],{"class":51289},[101,89287,51399],{"class":111},[101,89289,51396],{"class":51289},[101,89291,51296],{"class":111},[101,89293,89294,89296,89298],{"class":103,"line":1298},[101,89295,51774],{"class":111},[101,89297,51323],{"class":51289},[101,89299,51296],{"class":111},[101,89301,89302],{"class":103,"line":1304},[101,89303,2387],{"emptyLinePlaceholder":27},[101,89305,89306,89308,89310],{"class":103,"line":1316},[101,89307,1021],{"class":111},[101,89309,51789],{"class":51289},[101,89311,51296],{"class":111},[101,89313,89314,89316,89318],{"class":103,"line":1599},[101,89315,52133],{"class":111},[101,89317,51802],{"class":51289},[101,89319,51296],{"class":111},[101,89321,89322,89324,89326,89328],{"class":103,"line":1604},[101,89323,11209],{"class":107},[101,89325,69960],{"class":160},[101,89327,13552],{"class":107},[101,89329,15560],{"class":111},[101,89331,89332,89334],{"class":103,"line":1610},[101,89333,71615],{"class":111},[101,89335,89336],{"class":160},"18\n",[101,89338,89339],{"class":103,"line":1615},[101,89340,2174],{"class":111},[101,89342,89343],{"class":103,"line":1629},[101,89344,89345],{"class":170},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[101,89347,89348,89350,89352,89354,89356,89358,89360],{"class":103,"line":1634},[101,89349,70073],{"class":107},[101,89351,88839],{"class":1950},[101,89353,112],{"class":111},[101,89355,931],{"class":5204},[101,89357,12423],{"class":111},[101,89359,956],{"class":5204},[101,89361,12430],{"class":111},[101,89363,89364,89366,89368,89370,89372],{"class":103,"line":1640},[101,89365,58233],{"class":111},[101,89367,58236],{"class":1950},[101,89369,112],{"class":111},[101,89371,86982],{"class":160},[101,89373,118],{"class":111},[101,89375,89376,89378,89380,89383,89385],{"class":103,"line":1661},[101,89377,58233],{"class":111},[101,89379,58236],{"class":1950},[101,89381,89382],{"class":111},"(x ",[101,89384,592],{"class":107},[101,89386,89387],{"class":111}," y)\n",[101,89389,89390],{"class":103,"line":1666},[101,89391,2174],{"class":111},[101,89393,89394],{"class":103,"line":1680},[101,89395,89396],{"class":170},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[101,89398,89399,89402,89405,89408,89410,89412,89414],{"class":103,"line":1685},[101,89400,89401],{"class":111},"    fn.",[101,89403,89404],{"class":1950},"apply",[101,89406,89407],{"class":111},"(obj, [",[101,89409,329],{"class":160},[101,89411,12423],{"class":111},[101,89413,189],{"class":160},[101,89415,4644],{"class":111},[101,89417,89418],{"class":103,"line":1714},[101,89419,89420],{"class":170},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[101,89422,89423],{"class":103,"line":1719},[101,89424,2387],{"emptyLinePlaceholder":27},[101,89426,89427],{"class":103,"line":1736},[101,89428,89429],{"class":170},"    \u002F\u002F 使用场景：求数组最大值\n",[101,89431,89432],{"class":103,"line":1741},[101,89433,89434],{"class":170},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[101,89436,89437,89440],{"class":103,"line":1746},[101,89438,89439],{"class":170},"    \u002F\u002F console.log(max)",[101,89441,89442],{"class":170},"   \u002F\u002F3\n",[101,89444,89445],{"class":103,"line":1751},[101,89446,89447],{"class":170},"    \u002F\u002F 指向空或者Math都是可以的\n",[101,89449,89450,89452,89454,89456,89458,89460,89462,89464,89466,89468],{"class":103,"line":1765},[101,89451,11209],{"class":107},[101,89453,57684],{"class":160},[101,89455,13552],{"class":107},[101,89457,52215],{"class":111},[101,89459,422],{"class":160},[101,89461,12423],{"class":111},[101,89463,615],{"class":160},[101,89465,12423],{"class":111},[101,89467,646],{"class":160},[101,89469,33235],{"class":111},[101,89471,89472],{"class":103,"line":1770},[101,89473,89474],{"class":170},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[101,89476,89477,89479,89481,89483,89486,89488],{"class":103,"line":2564},[101,89478,11209],{"class":107},[101,89480,5939],{"class":160},[101,89482,13552],{"class":107},[101,89484,89485],{"class":111}," Math.max.",[101,89487,89404],{"class":1950},[101,89489,89490],{"class":111},"(Math, arr)\n",[101,89492,89493,89495,89498,89500,89503,89505],{"class":103,"line":2578},[101,89494,11209],{"class":107},[101,89496,89497],{"class":160}," min",[101,89499,13552],{"class":107},[101,89501,89502],{"class":111}," Math.min.",[101,89504,89404],{"class":1950},[101,89506,89490],{"class":111},[101,89508,89509,89511,89513,89516],{"class":103,"line":2586},[101,89510,73742],{"class":111},[101,89512,58236],{"class":1950},[101,89514,89515],{"class":111},"(max, min)     ",[101,89517,89518],{"class":170},"\u002F\u002F100,4\n",[101,89520,89521],{"class":103,"line":2591},[101,89522,2387],{"emptyLinePlaceholder":27},[101,89524,89525],{"class":103,"line":2597},[101,89526,89527],{"class":170},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[101,89529,89530,89532,89534,89537,89539,89541,89544],{"class":103,"line":2603},[101,89531,73742],{"class":111},[101,89533,58236],{"class":1950},[101,89535,89536],{"class":111},"(Max.",[101,89538,6003],{"class":1950},[101,89540,112],{"class":111},[101,89542,89543],{"class":107},"...",[101,89545,89546],{"class":111},"arr))\n",[101,89548,89549,89551,89553],{"class":103,"line":2608},[101,89550,52406],{"class":111},[101,89552,51802],{"class":51289},[101,89554,51296],{"class":111},[101,89556,89557,89559,89561],{"class":103,"line":7936},[101,89558,51774],{"class":111},[101,89560,51789],{"class":51289},[101,89562,51296],{"class":111},[101,89564,89565],{"class":103,"line":7960},[101,89566,2387],{"emptyLinePlaceholder":27},[101,89568,89569,89571,89573],{"class":103,"line":7965},[101,89570,51774],{"class":111},[101,89572,50624],{"class":51289},[101,89574,51296],{"class":111},[10,89576,89577],{},[1449,89578],{"alt":20,"src":89579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[55,89581,89582],{"start":1166},[58,89583,89584],{},"bind()",[10,89586,89587],{},[1449,89588],{"alt":20,"src":89589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[10,89591,89592],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[10,89594,89595],{},"bind的语法跟call很相似",[92,89597,89599],{"className":53056,"code":89598,"language":53058,"meta":20,"style":20},"\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",[98,89600,89601,89609,89617,89621,89626,89630,89634,89639,89643,89648,89653,89658,89663,89668,89673,89678,89682,89690],{"__ignoreMap":20},[101,89602,89603,89605,89607],{"class":103,"line":104},[101,89604,1021],{"class":111},[101,89606,51789],{"class":51289},[101,89608,51296],{"class":111},[101,89610,89611,89613,89615],{"class":103,"line":21},[101,89612,52133],{"class":111},[101,89614,51802],{"class":51289},[101,89616,51296],{"class":111},[101,89618,89619],{"class":103,"line":1166},[101,89620,71512],{"class":111},[101,89622,89623],{"class":103,"line":1181},[101,89624,89625],{"class":111},"      age: 18\n",[101,89627,89628],{"class":103,"line":1187},[101,89629,2174],{"class":111},[101,89631,89632],{"class":103,"line":1201},[101,89633,77132],{"class":111},[101,89635,89636],{"class":103,"line":1207},[101,89637,89638],{"class":111},"      console.log(this)\n",[101,89640,89641],{"class":103,"line":1298},[101,89642,2174],{"class":111},[101,89644,89645],{"class":103,"line":1304},[101,89646,89647],{"class":111},"    \u002F\u002F 1.bind 不会调用函数\n",[101,89649,89650],{"class":103,"line":1316},[101,89651,89652],{"class":111},"    \u002F\u002F 2.bind能改变this的指向\n",[101,89654,89655],{"class":103,"line":1599},[101,89656,89657],{"class":111},"    fn.bind()\n",[101,89659,89660],{"class":103,"line":1604},[101,89661,89662],{"class":111},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[101,89664,89665],{"class":103,"line":1610},[101,89666,89667],{"class":111},"    const fun = fn.bind(obj)\n",[101,89669,89670],{"class":103,"line":1615},[101,89671,89672],{"class":111},"    \u002F\u002F console.log(fun)\n",[101,89674,89675],{"class":103,"line":1629},[101,89676,89677],{"class":111},"    \u002F\u002F 调用,查看this的指向\n",[101,89679,89680],{"class":103,"line":1634},[101,89681,52640],{"class":111},[101,89683,89684,89686,89688],{"class":103,"line":1640},[101,89685,52406],{"class":111},[101,89687,51802],{"class":51289},[101,89689,51296],{"class":111},[101,89691,89692,89694,89696],{"class":103,"line":1661},[101,89693,51774],{"class":111},[101,89695,51789],{"class":51289},[101,89697,51296],{"class":111},[10,89699,89700],{},[1449,89701],{"alt":20,"src":89702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[55,89704,89705],{"start":1181},[58,89706,89707],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[92,89709,89711],{"className":53056,"code":89710,"language":53058,"meta":20,"style":20},"\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",[98,89712,89713,89721,89734,89742,89747,89751,89756,89761,89766,89771,89776,89781,89786,89791,89795,89803],{"__ignoreMap":20},[101,89714,89715,89717,89719],{"class":103,"line":104},[101,89716,1021],{"class":111},[101,89718,51789],{"class":51289},[101,89720,51296],{"class":111},[101,89722,89723,89725,89727,89730,89732],{"class":103,"line":21},[101,89724,52133],{"class":111},[101,89726,53876],{"class":51289},[101,89728,89729],{"class":111},">禁用\u003C\u002F",[101,89731,53876],{"class":51289},[101,89733,51296],{"class":111},[101,89735,89736,89738,89740],{"class":103,"line":1166},[101,89737,52133],{"class":111},[101,89739,51802],{"class":51289},[101,89741,51296],{"class":111},[101,89743,89744],{"class":103,"line":1181},[101,89745,89746],{"class":111},"    const btn = document.querySelector('button')\n",[101,89748,89749],{"class":103,"line":1187},[101,89750,59005],{"class":111},[101,89752,89753],{"class":103,"line":1201},[101,89754,89755],{"class":111},"      this.disabled = true\n",[101,89757,89758],{"class":103,"line":1207},[101,89759,89760],{"class":111},"      \u002F\u002F 定时器是window进行调用的\n",[101,89762,89763],{"class":103,"line":1298},[101,89764,89765],{"class":111},"      setTimeout(function () {\n",[101,89767,89768],{"class":103,"line":1304},[101,89769,89770],{"class":111},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[101,89772,89773],{"class":103,"line":1316},[101,89774,89775],{"class":111},"        this.disabled = false\n",[101,89777,89778],{"class":103,"line":1599},[101,89779,89780],{"class":111},"      }.bind(this), 2000)\n",[101,89782,89783],{"class":103,"line":1604},[101,89784,89785],{"class":111},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[101,89787,89788],{"class":103,"line":1610},[101,89789,89790],{"class":111},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[101,89792,89793],{"class":103,"line":1615},[101,89794,33450],{"class":111},[101,89796,89797,89799,89801],{"class":103,"line":1629},[101,89798,52406],{"class":111},[101,89800,51802],{"class":51289},[101,89802,51296],{"class":111},[101,89804,89805,89807,89809],{"class":103,"line":1634},[101,89806,51774],{"class":111},[101,89808,51789],{"class":51289},[101,89810,51296],{"class":111},[55,89812,89813],{"start":1187},[58,89814,21941],{},[10,89816,89817],{},[1449,89818],{"alt":20,"src":89819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[43,89821,89823],{"id":89822},"_417-性能优化","4.17 性能优化",[72,89825,89827],{"id":89826},"_4171-防抖","4.17.1 防抖",[10,89829,89830],{},[1449,89831],{"alt":20,"src":89832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[10,89834,89835],{},[261,89836,89837],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[10,89839,89840],{},"防抖实现方式：",[1118,89842,89843],{},[58,89844,89845],{},"lodash 提供了防抖处理",[10,89847,89848],{},"_.debounce(func,[wait=0],[options={}])",[10,89850,89851],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[92,89853,89855],{"className":50622,"code":89854,"language":50624,"meta":20,"style":20},"\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",[98,89856,89857,89867,89881,89885,89893,89907,89927,89939,89947,89953,89963,89975,89987,89998,90010,90020,90030,90043,90047,90055,90063,90067,90075,90093,90111,90119,90138,90148,90157,90168,90173,90177,90182,90187,90192,90217,90225,90233,90237],{"__ignoreMap":20},[101,89858,89859,89861,89863,89865],{"class":103,"line":104},[101,89860,51286],{"class":111},[101,89862,51290],{"class":51289},[101,89864,51293],{"class":1950},[101,89866,51296],{"class":111},[101,89868,89869,89871,89873,89875,89877,89879],{"class":103,"line":21},[101,89870,1021],{"class":111},[101,89872,50624],{"class":51289},[101,89874,51305],{"class":1950},[101,89876,157],{"class":111},[101,89878,51310],{"class":216},[101,89880,51296],{"class":111},[101,89882,89883],{"class":103,"line":1166},[101,89884,2387],{"emptyLinePlaceholder":27},[101,89886,89887,89889,89891],{"class":103,"line":1181},[101,89888,1021],{"class":111},[101,89890,51323],{"class":51289},[101,89892,51296],{"class":111},[101,89894,89895,89897,89899,89901,89903,89905],{"class":103,"line":1187},[101,89896,52133],{"class":111},[101,89898,51333],{"class":51289},[101,89900,51336],{"class":1950},[101,89902,157],{"class":111},[101,89904,51341],{"class":216},[101,89906,51296],{"class":111},[101,89908,89909,89911,89913,89915,89917,89919,89921,89923,89925],{"class":103,"line":1201},[101,89910,52133],{"class":111},[101,89912,51333],{"class":51289},[101,89914,14908],{"class":1950},[101,89916,157],{"class":111},[101,89918,51380],{"class":216},[101,89920,51360],{"class":1950},[101,89922,157],{"class":111},[101,89924,51387],{"class":216},[101,89926,51296],{"class":111},[101,89928,89929,89931,89933,89935,89937],{"class":103,"line":1207},[101,89930,52133],{"class":111},[101,89932,51396],{"class":51289},[101,89934,51399],{"class":111},[101,89936,51396],{"class":51289},[101,89938,51296],{"class":111},[101,89940,89941,89943,89945],{"class":103,"line":1298},[101,89942,52133],{"class":111},[101,89944,5114],{"class":51289},[101,89946,51296],{"class":111},[101,89948,89949,89951],{"class":103,"line":1304},[101,89950,54741],{"class":1950},[101,89952,15560],{"class":111},[101,89954,89955,89957,89959,89961],{"class":103,"line":1316},[101,89956,72585],{"class":160},[101,89958,51426],{"class":111},[101,89960,60494],{"class":160},[101,89962,1277],{"class":111},[101,89964,89965,89967,89969,89971,89973],{"class":103,"line":1599},[101,89966,54760],{"class":160},[101,89968,51426],{"class":111},[101,89970,1709],{"class":160},[101,89972,51481],{"class":107},[101,89974,1277],{"class":111},[101,89976,89977,89979,89981,89983,89985],{"class":103,"line":1604},[101,89978,54774],{"class":160},[101,89980,51426],{"class":111},[101,89982,1709],{"class":160},[101,89984,51481],{"class":107},[101,89986,1277],{"class":111},[101,89988,89989,89991,89993,89996],{"class":103,"line":1610},[101,89990,54873],{"class":160},[101,89992,51426],{"class":111},[101,89994,89995],{"class":160},"gray",[101,89997,1277],{"class":111},[101,89999,90000,90002,90004,90006,90008],{"class":103,"line":1615},[101,90001,54911],{"class":160},[101,90003,51426],{"class":111},[101,90005,936],{"class":160},[101,90007,51481],{"class":107},[101,90009,1277],{"class":111},[101,90011,90012,90014,90016,90018],{"class":103,"line":1629},[101,90013,57405],{"class":160},[101,90015,51426],{"class":111},[101,90017,60831],{"class":160},[101,90019,1277],{"class":111},[101,90021,90022,90024,90026,90028],{"class":103,"line":1634},[101,90023,57275],{"class":160},[101,90025,51426],{"class":111},[101,90027,51581],{"class":160},[101,90029,1277],{"class":111},[101,90031,90032,90035,90037,90039,90041],{"class":103,"line":1640},[101,90033,90034],{"class":160},"      padding-top",[101,90036,51426],{"class":111},[101,90038,430],{"class":160},[101,90040,51481],{"class":107},[101,90042,1277],{"class":111},[101,90044,90045],{"class":103,"line":1661},[101,90046,2174],{"class":111},[101,90048,90049,90051,90053],{"class":103,"line":1666},[101,90050,52406],{"class":111},[101,90052,5114],{"class":51289},[101,90054,51296],{"class":111},[101,90056,90057,90059,90061],{"class":103,"line":1680},[101,90058,51774],{"class":111},[101,90060,51323],{"class":51289},[101,90062,51296],{"class":111},[101,90064,90065],{"class":103,"line":1685},[101,90066,2387],{"emptyLinePlaceholder":27},[101,90068,90069,90071,90073],{"class":103,"line":1714},[101,90070,1021],{"class":111},[101,90072,51789],{"class":51289},[101,90074,51296],{"class":111},[101,90076,90077,90079,90081,90083,90085,90087,90089,90091],{"class":103,"line":1719},[101,90078,52133],{"class":111},[101,90080,51600],{"class":51289},[101,90082,53475],{"class":1950},[101,90084,157],{"class":111},[101,90086,53480],{"class":216},[101,90088,55303],{"class":111},[101,90090,51600],{"class":51289},[101,90092,51296],{"class":111},[101,90094,90095,90097,90099,90101,90103,90105,90107,90109],{"class":103,"line":1736},[101,90096,52133],{"class":111},[101,90098,51802],{"class":51289},[101,90100,55228],{"class":1950},[101,90102,157],{"class":111},[101,90104,88263],{"class":216},[101,90106,55303],{"class":111},[101,90108,51802],{"class":51289},[101,90110,51296],{"class":111},[101,90112,90113,90115,90117],{"class":103,"line":1741},[101,90114,52133],{"class":111},[101,90116,51802],{"class":51289},[101,90118,51296],{"class":111},[101,90120,90121,90123,90125,90127,90129,90131,90133,90136],{"class":103,"line":1746},[101,90122,11209],{"class":107},[101,90124,86922],{"class":160},[101,90126,13552],{"class":107},[101,90128,54385],{"class":111},[101,90130,54388],{"class":1950},[101,90132,112],{"class":111},[101,90134,90135],{"class":216},"'.box'",[101,90137,118],{"class":111},[101,90139,90140,90142,90144,90146],{"class":103,"line":1751},[101,90141,52208],{"class":107},[101,90143,9426],{"class":111},[101,90145,157],{"class":107},[101,90147,47322],{"class":160},[101,90149,90150,90152,90155],{"class":103,"line":1765},[101,90151,70073],{"class":107},[101,90153,90154],{"class":1950}," mouseMove",[101,90156,10841],{"class":111},[101,90158,90159,90162,90164,90166],{"class":103,"line":1770},[101,90160,90161],{"class":111},"      box.innerHTML ",[101,90163,157],{"class":107},[101,90165,3019],{"class":111},[101,90167,2689],{"class":107},[101,90169,90170],{"class":103,"line":2564},[101,90171,90172],{"class":170},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[101,90174,90175],{"class":103,"line":2578},[101,90176,2174],{"class":111},[101,90178,90179],{"class":103,"line":2586},[101,90180,90181],{"class":170},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[101,90183,90184],{"class":103,"line":2591},[101,90185,90186],{"class":170},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[101,90188,90189],{"class":103,"line":2597},[101,90190,90191],{"class":170},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[101,90193,90194,90197,90199,90201,90204,90207,90210,90213,90215],{"class":103,"line":2603},[101,90195,90196],{"class":111},"    box.",[101,90198,57802],{"class":1950},[101,90200,112],{"class":111},[101,90202,90203],{"class":216},"'mousemove'",[101,90205,90206],{"class":111},", _.",[101,90208,90209],{"class":1950},"debounce",[101,90211,90212],{"class":111},"(mouseMove, ",[101,90214,65063],{"class":160},[101,90216,30486],{"class":111},[101,90218,90219,90221,90223],{"class":103,"line":2608},[101,90220,52406],{"class":111},[101,90222,51802],{"class":51289},[101,90224,51296],{"class":111},[101,90226,90227,90229,90231],{"class":103,"line":7936},[101,90228,51774],{"class":111},[101,90230,51789],{"class":51289},[101,90232,51296],{"class":111},[101,90234,90235],{"class":103,"line":7960},[101,90236,2387],{"emptyLinePlaceholder":27},[101,90238,90239,90241,90243],{"class":103,"line":7965},[101,90240,51774],{"class":111},[101,90242,50624],{"class":51289},[101,90244,51296],{"class":111},[1118,90246,90247],{},[58,90248,90249],{},"手写一个防抖函数来处理",[10,90251,90252],{},"防抖的核心就是利用定时器来实现的：",[10,90254,90255],{},"①声明一个定时器变量",[10,90257,90258],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[10,90260,90261],{},"③如果没有定时器则开启定时器，记得存到变量里面",[92,90263,90265],{"className":50622,"code":90264,"language":50624,"meta":20,"style":20},"\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",[98,90266,90267,90277,90291,90295,90303,90317,90337,90349,90357,90363,90373,90385,90397,90407,90419,90429,90439,90451,90455,90463,90471,90475,90483,90501,90519,90527,90545,90555,90563,90573,90577,90581,90585,90590,90595,90600,90605,90610,90615,90633,90640,90645,90653,90658,90671,90687,90697,90702,90706,90710,90730,90734,90739,90744,90749,90754,90762,90770,90774],{"__ignoreMap":20},[101,90268,90269,90271,90273,90275],{"class":103,"line":104},[101,90270,51286],{"class":111},[101,90272,51290],{"class":51289},[101,90274,51293],{"class":1950},[101,90276,51296],{"class":111},[101,90278,90279,90281,90283,90285,90287,90289],{"class":103,"line":21},[101,90280,1021],{"class":111},[101,90282,50624],{"class":51289},[101,90284,51305],{"class":1950},[101,90286,157],{"class":111},[101,90288,51310],{"class":216},[101,90290,51296],{"class":111},[101,90292,90293],{"class":103,"line":1166},[101,90294,2387],{"emptyLinePlaceholder":27},[101,90296,90297,90299,90301],{"class":103,"line":1181},[101,90298,1021],{"class":111},[101,90300,51323],{"class":51289},[101,90302,51296],{"class":111},[101,90304,90305,90307,90309,90311,90313,90315],{"class":103,"line":1187},[101,90306,52133],{"class":111},[101,90308,51333],{"class":51289},[101,90310,51336],{"class":1950},[101,90312,157],{"class":111},[101,90314,51341],{"class":216},[101,90316,51296],{"class":111},[101,90318,90319,90321,90323,90325,90327,90329,90331,90333,90335],{"class":103,"line":1201},[101,90320,52133],{"class":111},[101,90322,51333],{"class":51289},[101,90324,14908],{"class":1950},[101,90326,157],{"class":111},[101,90328,51380],{"class":216},[101,90330,51360],{"class":1950},[101,90332,157],{"class":111},[101,90334,51387],{"class":216},[101,90336,51296],{"class":111},[101,90338,90339,90341,90343,90345,90347],{"class":103,"line":1207},[101,90340,52133],{"class":111},[101,90342,51396],{"class":51289},[101,90344,51399],{"class":111},[101,90346,51396],{"class":51289},[101,90348,51296],{"class":111},[101,90350,90351,90353,90355],{"class":103,"line":1298},[101,90352,52133],{"class":111},[101,90354,5114],{"class":51289},[101,90356,51296],{"class":111},[101,90358,90359,90361],{"class":103,"line":1304},[101,90360,54741],{"class":1950},[101,90362,15560],{"class":111},[101,90364,90365,90367,90369,90371],{"class":103,"line":1316},[101,90366,72585],{"class":160},[101,90368,51426],{"class":111},[101,90370,60494],{"class":160},[101,90372,1277],{"class":111},[101,90374,90375,90377,90379,90381,90383],{"class":103,"line":1599},[101,90376,54760],{"class":160},[101,90378,51426],{"class":111},[101,90380,1709],{"class":160},[101,90382,51481],{"class":107},[101,90384,1277],{"class":111},[101,90386,90387,90389,90391,90393,90395],{"class":103,"line":1604},[101,90388,54774],{"class":160},[101,90390,51426],{"class":111},[101,90392,1709],{"class":160},[101,90394,51481],{"class":107},[101,90396,1277],{"class":111},[101,90398,90399,90401,90403,90405],{"class":103,"line":1610},[101,90400,54873],{"class":160},[101,90402,51426],{"class":111},[101,90404,89995],{"class":160},[101,90406,1277],{"class":111},[101,90408,90409,90411,90413,90415,90417],{"class":103,"line":1615},[101,90410,54911],{"class":160},[101,90412,51426],{"class":111},[101,90414,936],{"class":160},[101,90416,51481],{"class":107},[101,90418,1277],{"class":111},[101,90420,90421,90423,90425,90427],{"class":103,"line":1629},[101,90422,57405],{"class":160},[101,90424,51426],{"class":111},[101,90426,60831],{"class":160},[101,90428,1277],{"class":111},[101,90430,90431,90433,90435,90437],{"class":103,"line":1634},[101,90432,57275],{"class":160},[101,90434,51426],{"class":111},[101,90436,51581],{"class":160},[101,90438,1277],{"class":111},[101,90440,90441,90443,90445,90447,90449],{"class":103,"line":1640},[101,90442,90034],{"class":160},[101,90444,51426],{"class":111},[101,90446,430],{"class":160},[101,90448,51481],{"class":107},[101,90450,1277],{"class":111},[101,90452,90453],{"class":103,"line":1661},[101,90454,2174],{"class":111},[101,90456,90457,90459,90461],{"class":103,"line":1666},[101,90458,52406],{"class":111},[101,90460,5114],{"class":51289},[101,90462,51296],{"class":111},[101,90464,90465,90467,90469],{"class":103,"line":1680},[101,90466,51774],{"class":111},[101,90468,51323],{"class":51289},[101,90470,51296],{"class":111},[101,90472,90473],{"class":103,"line":1685},[101,90474,2387],{"emptyLinePlaceholder":27},[101,90476,90477,90479,90481],{"class":103,"line":1714},[101,90478,1021],{"class":111},[101,90480,51789],{"class":51289},[101,90482,51296],{"class":111},[101,90484,90485,90487,90489,90491,90493,90495,90497,90499],{"class":103,"line":1719},[101,90486,52133],{"class":111},[101,90488,51600],{"class":51289},[101,90490,53475],{"class":1950},[101,90492,157],{"class":111},[101,90494,53480],{"class":216},[101,90496,55303],{"class":111},[101,90498,51600],{"class":51289},[101,90500,51296],{"class":111},[101,90502,90503,90505,90507,90509,90511,90513,90515,90517],{"class":103,"line":1736},[101,90504,52133],{"class":111},[101,90506,51802],{"class":51289},[101,90508,55228],{"class":1950},[101,90510,157],{"class":111},[101,90512,88263],{"class":216},[101,90514,55303],{"class":111},[101,90516,51802],{"class":51289},[101,90518,51296],{"class":111},[101,90520,90521,90523,90525],{"class":103,"line":1741},[101,90522,52133],{"class":111},[101,90524,51802],{"class":51289},[101,90526,51296],{"class":111},[101,90528,90529,90531,90533,90535,90537,90539,90541,90543],{"class":103,"line":1746},[101,90530,11209],{"class":107},[101,90532,86922],{"class":160},[101,90534,13552],{"class":107},[101,90536,54385],{"class":111},[101,90538,54388],{"class":1950},[101,90540,112],{"class":111},[101,90542,90135],{"class":216},[101,90544,118],{"class":111},[101,90546,90547,90549,90551,90553],{"class":103,"line":1751},[101,90548,52208],{"class":107},[101,90550,9426],{"class":111},[101,90552,157],{"class":107},[101,90554,47322],{"class":160},[101,90556,90557,90559,90561],{"class":103,"line":1765},[101,90558,70073],{"class":107},[101,90560,90154],{"class":1950},[101,90562,10841],{"class":111},[101,90564,90565,90567,90569,90571],{"class":103,"line":1770},[101,90566,90161],{"class":111},[101,90568,157],{"class":107},[101,90570,3019],{"class":111},[101,90572,2689],{"class":107},[101,90574,90575],{"class":103,"line":2564},[101,90576,90172],{"class":170},[101,90578,90579],{"class":103,"line":2578},[101,90580,2174],{"class":111},[101,90582,90583],{"class":103,"line":2586},[101,90584,90181],{"class":170},[101,90586,90587],{"class":103,"line":2591},[101,90588,90589],{"class":170},"    \u002F\u002F 手写防抖函数\n",[101,90591,90592],{"class":103,"line":2597},[101,90593,90594],{"class":170},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[101,90596,90597],{"class":103,"line":2603},[101,90598,90599],{"class":170},"    \u002F\u002F 1.声明定时器变量\n",[101,90601,90602],{"class":103,"line":2608},[101,90603,90604],{"class":170},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[101,90606,90607],{"class":103,"line":7936},[101,90608,90609],{"class":170},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[101,90611,90612],{"class":103,"line":7960},[101,90613,90614],{"class":170},"    \u002F\u002F 4.定时器里面写函数调用\n",[101,90616,90617,90619,90622,90624,90627,90629,90631],{"class":103,"line":7965},[101,90618,70073],{"class":107},[101,90620,90621],{"class":1950}," debounce",[101,90623,112],{"class":111},[101,90625,90626],{"class":5204},"fn",[101,90628,12423],{"class":111},[101,90630,831],{"class":5204},[101,90632,12430],{"class":111},[101,90634,90635,90637],{"class":103,"line":7971},[101,90636,79761],{"class":107},[101,90638,90639],{"class":111}," timer\n",[101,90641,90642],{"class":103,"line":7998},[101,90643,90644],{"class":170},"      \u002F\u002F return 返回一个匿名函数\n",[101,90646,90647,90649,90651],{"class":103,"line":8003},[101,90648,73971],{"class":107},[101,90650,58907],{"class":107},[101,90652,54441],{"class":111},[101,90654,90655],{"class":103,"line":8009},[101,90656,90657],{"class":170},"        \u002F\u002F 这里边写第二三四步\n",[101,90659,90660,90662,90665,90668],{"class":103,"line":8021},[101,90661,2484],{"class":107},[101,90663,90664],{"class":111}," (timer) ",[101,90666,90667],{"class":1950},"clearTimeout",[101,90669,90670],{"class":111},"(timer)\n",[101,90672,90673,90676,90678,90681,90683,90685],{"class":103,"line":8033},[101,90674,90675],{"class":111},"        timer ",[101,90677,157],{"class":107},[101,90679,90680],{"class":1950}," setTimeout",[101,90682,112],{"class":111},[101,90684,54438],{"class":107},[101,90686,54441],{"class":111},[101,90688,90689,90692,90694],{"class":103,"line":8045},[101,90690,90691],{"class":1950},"          fn",[101,90693,13038],{"class":111},[101,90695,90696],{"class":170},"\u002F\u002F加小括号调用fn }, t)\n",[101,90698,90699],{"class":103,"line":9704},[101,90700,90701],{"class":111},"        }, t)\n",[101,90703,90704],{"class":103,"line":9729},[101,90705,52387],{"class":111},[101,90707,90708],{"class":103,"line":9752},[101,90709,2174],{"class":111},[101,90711,90712,90714,90716,90718,90720,90722,90724,90726,90728],{"class":103,"line":9776},[101,90713,90196],{"class":111},[101,90715,57802],{"class":1950},[101,90717,112],{"class":111},[101,90719,90203],{"class":216},[101,90721,12423],{"class":111},[101,90723,90209],{"class":1950},[101,90725,90212],{"class":111},[101,90727,65063],{"class":160},[101,90729,30486],{"class":111},[101,90731,90732],{"class":103,"line":9781},[101,90733,2387],{"emptyLinePlaceholder":27},[101,90735,90736],{"class":103,"line":9786},[101,90737,90738],{"class":170},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[101,90740,90741],{"class":103,"line":9791},[101,90742,90743],{"class":170},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[101,90745,90746],{"class":103,"line":9800},[101,90747,90748],{"class":170},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[101,90750,90751],{"class":103,"line":9805},[101,90752,90753],{"class":170},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[101,90755,90756,90758,90760],{"class":103,"line":9811},[101,90757,52406],{"class":111},[101,90759,51802],{"class":51289},[101,90761,51296],{"class":111},[101,90763,90764,90766,90768],{"class":103,"line":9832},[101,90765,51774],{"class":111},[101,90767,51789],{"class":51289},[101,90769,51296],{"class":111},[101,90771,90772],{"class":103,"line":9838},[101,90773,2387],{"emptyLinePlaceholder":27},[101,90775,90776,90778,90780],{"class":103,"line":9852},[101,90777,51774],{"class":111},[101,90779,50624],{"class":51289},[101,90781,51296],{"class":111},[72,90783,90785],{"id":90784},"_4172-节流","4.17.2 节流",[10,90787,90788],{},[1449,90789],{"alt":20,"src":90790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[10,90792,90793],{},[1449,90794],{"alt":20,"src":90795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[10,90797,90798],{},[261,90799,90800],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[10,90802,90803],{},"实现方式：",[1118,90805,90806],{},[58,90807,90808],{},"lodash 提供的节流函数来处理",[10,90810,90811],{},"_.throttle(func,[wait=0],[options=])",[10,90813,90814],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[92,90816,90818],{"className":50622,"code":90817,"language":50624,"meta":20,"style":20},"\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",[98,90819,90820,90830,90844,90848,90856,90870,90890,90902,90910,90916,90926,90938,90950,90960,90972,90982,90992,91004,91008,91016,91024,91028,91036,91054,91072,91080,91098,91108,91116,91126,91130,91134,91138,91143,91148,91169,91177,91185,91189],{"__ignoreMap":20},[101,90821,90822,90824,90826,90828],{"class":103,"line":104},[101,90823,51286],{"class":111},[101,90825,51290],{"class":51289},[101,90827,51293],{"class":1950},[101,90829,51296],{"class":111},[101,90831,90832,90834,90836,90838,90840,90842],{"class":103,"line":21},[101,90833,1021],{"class":111},[101,90835,50624],{"class":51289},[101,90837,51305],{"class":1950},[101,90839,157],{"class":111},[101,90841,51310],{"class":216},[101,90843,51296],{"class":111},[101,90845,90846],{"class":103,"line":1166},[101,90847,2387],{"emptyLinePlaceholder":27},[101,90849,90850,90852,90854],{"class":103,"line":1181},[101,90851,1021],{"class":111},[101,90853,51323],{"class":51289},[101,90855,51296],{"class":111},[101,90857,90858,90860,90862,90864,90866,90868],{"class":103,"line":1187},[101,90859,52133],{"class":111},[101,90861,51333],{"class":51289},[101,90863,51336],{"class":1950},[101,90865,157],{"class":111},[101,90867,51341],{"class":216},[101,90869,51296],{"class":111},[101,90871,90872,90874,90876,90878,90880,90882,90884,90886,90888],{"class":103,"line":1201},[101,90873,52133],{"class":111},[101,90875,51333],{"class":51289},[101,90877,14908],{"class":1950},[101,90879,157],{"class":111},[101,90881,51380],{"class":216},[101,90883,51360],{"class":1950},[101,90885,157],{"class":111},[101,90887,51387],{"class":216},[101,90889,51296],{"class":111},[101,90891,90892,90894,90896,90898,90900],{"class":103,"line":1207},[101,90893,52133],{"class":111},[101,90895,51396],{"class":51289},[101,90897,51399],{"class":111},[101,90899,51396],{"class":51289},[101,90901,51296],{"class":111},[101,90903,90904,90906,90908],{"class":103,"line":1298},[101,90905,52133],{"class":111},[101,90907,5114],{"class":51289},[101,90909,51296],{"class":111},[101,90911,90912,90914],{"class":103,"line":1304},[101,90913,54741],{"class":1950},[101,90915,15560],{"class":111},[101,90917,90918,90920,90922,90924],{"class":103,"line":1316},[101,90919,72585],{"class":160},[101,90921,51426],{"class":111},[101,90923,60494],{"class":160},[101,90925,1277],{"class":111},[101,90927,90928,90930,90932,90934,90936],{"class":103,"line":1599},[101,90929,54760],{"class":160},[101,90931,51426],{"class":111},[101,90933,1709],{"class":160},[101,90935,51481],{"class":107},[101,90937,1277],{"class":111},[101,90939,90940,90942,90944,90946,90948],{"class":103,"line":1604},[101,90941,54774],{"class":160},[101,90943,51426],{"class":111},[101,90945,1709],{"class":160},[101,90947,51481],{"class":107},[101,90949,1277],{"class":111},[101,90951,90952,90954,90956,90958],{"class":103,"line":1610},[101,90953,54873],{"class":160},[101,90955,51426],{"class":111},[101,90957,89995],{"class":160},[101,90959,1277],{"class":111},[101,90961,90962,90964,90966,90968,90970],{"class":103,"line":1615},[101,90963,54911],{"class":160},[101,90965,51426],{"class":111},[101,90967,936],{"class":160},[101,90969,51481],{"class":107},[101,90971,1277],{"class":111},[101,90973,90974,90976,90978,90980],{"class":103,"line":1629},[101,90975,57405],{"class":160},[101,90977,51426],{"class":111},[101,90979,60831],{"class":160},[101,90981,1277],{"class":111},[101,90983,90984,90986,90988,90990],{"class":103,"line":1634},[101,90985,57275],{"class":160},[101,90987,51426],{"class":111},[101,90989,51581],{"class":160},[101,90991,1277],{"class":111},[101,90993,90994,90996,90998,91000,91002],{"class":103,"line":1640},[101,90995,90034],{"class":160},[101,90997,51426],{"class":111},[101,90999,430],{"class":160},[101,91001,51481],{"class":107},[101,91003,1277],{"class":111},[101,91005,91006],{"class":103,"line":1661},[101,91007,2174],{"class":111},[101,91009,91010,91012,91014],{"class":103,"line":1666},[101,91011,52406],{"class":111},[101,91013,5114],{"class":51289},[101,91015,51296],{"class":111},[101,91017,91018,91020,91022],{"class":103,"line":1680},[101,91019,51774],{"class":111},[101,91021,51323],{"class":51289},[101,91023,51296],{"class":111},[101,91025,91026],{"class":103,"line":1685},[101,91027,2387],{"emptyLinePlaceholder":27},[101,91029,91030,91032,91034],{"class":103,"line":1714},[101,91031,1021],{"class":111},[101,91033,51789],{"class":51289},[101,91035,51296],{"class":111},[101,91037,91038,91040,91042,91044,91046,91048,91050,91052],{"class":103,"line":1719},[101,91039,52133],{"class":111},[101,91041,51600],{"class":51289},[101,91043,53475],{"class":1950},[101,91045,157],{"class":111},[101,91047,53480],{"class":216},[101,91049,55303],{"class":111},[101,91051,51600],{"class":51289},[101,91053,51296],{"class":111},[101,91055,91056,91058,91060,91062,91064,91066,91068,91070],{"class":103,"line":1736},[101,91057,52133],{"class":111},[101,91059,51802],{"class":51289},[101,91061,55228],{"class":1950},[101,91063,157],{"class":111},[101,91065,88263],{"class":216},[101,91067,55303],{"class":111},[101,91069,51802],{"class":51289},[101,91071,51296],{"class":111},[101,91073,91074,91076,91078],{"class":103,"line":1741},[101,91075,52133],{"class":111},[101,91077,51802],{"class":51289},[101,91079,51296],{"class":111},[101,91081,91082,91084,91086,91088,91090,91092,91094,91096],{"class":103,"line":1746},[101,91083,11209],{"class":107},[101,91085,86922],{"class":160},[101,91087,13552],{"class":107},[101,91089,54385],{"class":111},[101,91091,54388],{"class":1950},[101,91093,112],{"class":111},[101,91095,90135],{"class":216},[101,91097,118],{"class":111},[101,91099,91100,91102,91104,91106],{"class":103,"line":1751},[101,91101,52208],{"class":107},[101,91103,9426],{"class":111},[101,91105,157],{"class":107},[101,91107,47322],{"class":160},[101,91109,91110,91112,91114],{"class":103,"line":1765},[101,91111,70073],{"class":107},[101,91113,90154],{"class":1950},[101,91115,10841],{"class":111},[101,91117,91118,91120,91122,91124],{"class":103,"line":1770},[101,91119,90161],{"class":111},[101,91121,157],{"class":107},[101,91123,3019],{"class":111},[101,91125,2689],{"class":107},[101,91127,91128],{"class":103,"line":2564},[101,91129,90172],{"class":170},[101,91131,91132],{"class":103,"line":2578},[101,91133,2174],{"class":111},[101,91135,91136],{"class":103,"line":2586},[101,91137,90181],{"class":170},[101,91139,91140],{"class":103,"line":2591},[101,91141,91142],{"class":170},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[101,91144,91145],{"class":103,"line":2597},[101,91146,91147],{"class":170},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[101,91149,91150,91152,91154,91156,91158,91160,91163,91165,91167],{"class":103,"line":2603},[101,91151,90196],{"class":111},[101,91153,57802],{"class":1950},[101,91155,112],{"class":111},[101,91157,90203],{"class":216},[101,91159,90206],{"class":111},[101,91161,91162],{"class":1950},"throttle",[101,91164,90212],{"class":111},[101,91166,65063],{"class":160},[101,91168,30486],{"class":111},[101,91170,91171,91173,91175],{"class":103,"line":2608},[101,91172,52406],{"class":111},[101,91174,51802],{"class":51289},[101,91176,51296],{"class":111},[101,91178,91179,91181,91183],{"class":103,"line":7936},[101,91180,51774],{"class":111},[101,91182,51789],{"class":51289},[101,91184,51296],{"class":111},[101,91186,91187],{"class":103,"line":7960},[101,91188,2387],{"emptyLinePlaceholder":27},[101,91190,91191,91193,91195],{"class":103,"line":7965},[101,91192,51774],{"class":111},[101,91194,50624],{"class":51289},[101,91196,51296],{"class":111},[1118,91198,91199],{},[58,91200,91201],{},"手写一个节流函数来处理",[10,91203,70941],{},[10,91205,90255],{},[10,91207,91208],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[10,91210,91211],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[92,91213,91215],{"className":50622,"code":91214,"language":50624,"meta":20,"style":20},"\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",[98,91216,91217,91227,91241,91245,91253,91267,91287,91299,91307,91313,91323,91335,91347,91357,91369,91379,91389,91401,91405,91413,91421,91425,91433,91451,91469,91477,91495,91505,91513,91523,91527,91531,91535,91540,91545,91550,91555,91560,91565,91582,91588,91596,91607,91622,91629,91634,91639,91649,91654,91659,91664,91668,91672,91676,91696,91704,91712,91716],{"__ignoreMap":20},[101,91218,91219,91221,91223,91225],{"class":103,"line":104},[101,91220,51286],{"class":111},[101,91222,51290],{"class":51289},[101,91224,51293],{"class":1950},[101,91226,51296],{"class":111},[101,91228,91229,91231,91233,91235,91237,91239],{"class":103,"line":21},[101,91230,1021],{"class":111},[101,91232,50624],{"class":51289},[101,91234,51305],{"class":1950},[101,91236,157],{"class":111},[101,91238,51310],{"class":216},[101,91240,51296],{"class":111},[101,91242,91243],{"class":103,"line":1166},[101,91244,2387],{"emptyLinePlaceholder":27},[101,91246,91247,91249,91251],{"class":103,"line":1181},[101,91248,1021],{"class":111},[101,91250,51323],{"class":51289},[101,91252,51296],{"class":111},[101,91254,91255,91257,91259,91261,91263,91265],{"class":103,"line":1187},[101,91256,52133],{"class":111},[101,91258,51333],{"class":51289},[101,91260,51336],{"class":1950},[101,91262,157],{"class":111},[101,91264,51341],{"class":216},[101,91266,51296],{"class":111},[101,91268,91269,91271,91273,91275,91277,91279,91281,91283,91285],{"class":103,"line":1201},[101,91270,52133],{"class":111},[101,91272,51333],{"class":51289},[101,91274,14908],{"class":1950},[101,91276,157],{"class":111},[101,91278,51380],{"class":216},[101,91280,51360],{"class":1950},[101,91282,157],{"class":111},[101,91284,51387],{"class":216},[101,91286,51296],{"class":111},[101,91288,91289,91291,91293,91295,91297],{"class":103,"line":1207},[101,91290,52133],{"class":111},[101,91292,51396],{"class":51289},[101,91294,51399],{"class":111},[101,91296,51396],{"class":51289},[101,91298,51296],{"class":111},[101,91300,91301,91303,91305],{"class":103,"line":1298},[101,91302,52133],{"class":111},[101,91304,5114],{"class":51289},[101,91306,51296],{"class":111},[101,91308,91309,91311],{"class":103,"line":1304},[101,91310,54741],{"class":1950},[101,91312,15560],{"class":111},[101,91314,91315,91317,91319,91321],{"class":103,"line":1316},[101,91316,72585],{"class":160},[101,91318,51426],{"class":111},[101,91320,60494],{"class":160},[101,91322,1277],{"class":111},[101,91324,91325,91327,91329,91331,91333],{"class":103,"line":1599},[101,91326,54760],{"class":160},[101,91328,51426],{"class":111},[101,91330,1709],{"class":160},[101,91332,51481],{"class":107},[101,91334,1277],{"class":111},[101,91336,91337,91339,91341,91343,91345],{"class":103,"line":1604},[101,91338,54774],{"class":160},[101,91340,51426],{"class":111},[101,91342,1709],{"class":160},[101,91344,51481],{"class":107},[101,91346,1277],{"class":111},[101,91348,91349,91351,91353,91355],{"class":103,"line":1610},[101,91350,54873],{"class":160},[101,91352,51426],{"class":111},[101,91354,89995],{"class":160},[101,91356,1277],{"class":111},[101,91358,91359,91361,91363,91365,91367],{"class":103,"line":1615},[101,91360,54911],{"class":160},[101,91362,51426],{"class":111},[101,91364,936],{"class":160},[101,91366,51481],{"class":107},[101,91368,1277],{"class":111},[101,91370,91371,91373,91375,91377],{"class":103,"line":1629},[101,91372,57405],{"class":160},[101,91374,51426],{"class":111},[101,91376,60831],{"class":160},[101,91378,1277],{"class":111},[101,91380,91381,91383,91385,91387],{"class":103,"line":1634},[101,91382,57275],{"class":160},[101,91384,51426],{"class":111},[101,91386,51581],{"class":160},[101,91388,1277],{"class":111},[101,91390,91391,91393,91395,91397,91399],{"class":103,"line":1640},[101,91392,90034],{"class":160},[101,91394,51426],{"class":111},[101,91396,430],{"class":160},[101,91398,51481],{"class":107},[101,91400,1277],{"class":111},[101,91402,91403],{"class":103,"line":1661},[101,91404,2174],{"class":111},[101,91406,91407,91409,91411],{"class":103,"line":1666},[101,91408,52406],{"class":111},[101,91410,5114],{"class":51289},[101,91412,51296],{"class":111},[101,91414,91415,91417,91419],{"class":103,"line":1680},[101,91416,51774],{"class":111},[101,91418,51323],{"class":51289},[101,91420,51296],{"class":111},[101,91422,91423],{"class":103,"line":1685},[101,91424,2387],{"emptyLinePlaceholder":27},[101,91426,91427,91429,91431],{"class":103,"line":1714},[101,91428,1021],{"class":111},[101,91430,51789],{"class":51289},[101,91432,51296],{"class":111},[101,91434,91435,91437,91439,91441,91443,91445,91447,91449],{"class":103,"line":1719},[101,91436,52133],{"class":111},[101,91438,51600],{"class":51289},[101,91440,53475],{"class":1950},[101,91442,157],{"class":111},[101,91444,53480],{"class":216},[101,91446,55303],{"class":111},[101,91448,51600],{"class":51289},[101,91450,51296],{"class":111},[101,91452,91453,91455,91457,91459,91461,91463,91465,91467],{"class":103,"line":1736},[101,91454,52133],{"class":111},[101,91456,51802],{"class":51289},[101,91458,55228],{"class":1950},[101,91460,157],{"class":111},[101,91462,88263],{"class":216},[101,91464,55303],{"class":111},[101,91466,51802],{"class":51289},[101,91468,51296],{"class":111},[101,91470,91471,91473,91475],{"class":103,"line":1741},[101,91472,52133],{"class":111},[101,91474,51802],{"class":51289},[101,91476,51296],{"class":111},[101,91478,91479,91481,91483,91485,91487,91489,91491,91493],{"class":103,"line":1746},[101,91480,11209],{"class":107},[101,91482,86922],{"class":160},[101,91484,13552],{"class":107},[101,91486,54385],{"class":111},[101,91488,54388],{"class":1950},[101,91490,112],{"class":111},[101,91492,90135],{"class":216},[101,91494,118],{"class":111},[101,91496,91497,91499,91501,91503],{"class":103,"line":1751},[101,91498,52208],{"class":107},[101,91500,9426],{"class":111},[101,91502,157],{"class":107},[101,91504,47322],{"class":160},[101,91506,91507,91509,91511],{"class":103,"line":1765},[101,91508,70073],{"class":107},[101,91510,90154],{"class":1950},[101,91512,10841],{"class":111},[101,91514,91515,91517,91519,91521],{"class":103,"line":1770},[101,91516,90161],{"class":111},[101,91518,157],{"class":107},[101,91520,3019],{"class":111},[101,91522,2689],{"class":107},[101,91524,91525],{"class":103,"line":2564},[101,91526,90172],{"class":170},[101,91528,91529],{"class":103,"line":2578},[101,91530,2174],{"class":111},[101,91532,91533],{"class":103,"line":2586},[101,91534,90181],{"class":170},[101,91536,91537],{"class":103,"line":2591},[101,91538,91539],{"class":170},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[101,91541,91542],{"class":103,"line":2597},[101,91543,91544],{"class":170},"    \u002F\u002F 1.声明一个定时器变量\n",[101,91546,91547],{"class":103,"line":2603},[101,91548,91549],{"class":170},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[101,91551,91552],{"class":103,"line":2608},[101,91553,91554],{"class":170},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[101,91556,91557],{"class":103,"line":7936},[101,91558,91559],{"class":170},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[101,91561,91562],{"class":103,"line":7960},[101,91563,91564],{"class":170},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[101,91566,91567,91569,91572,91574,91576,91578,91580],{"class":103,"line":7965},[101,91568,70073],{"class":107},[101,91570,91571],{"class":1950}," throttle",[101,91573,112],{"class":111},[101,91575,90626],{"class":5204},[101,91577,12423],{"class":111},[101,91579,831],{"class":5204},[101,91581,12430],{"class":111},[101,91583,91584,91586],{"class":103,"line":7971},[101,91585,79761],{"class":107},[101,91587,90639],{"class":111},[101,91589,91590,91592,91594],{"class":103,"line":7998},[101,91591,73971],{"class":107},[101,91593,58907],{"class":107},[101,91595,54441],{"class":111},[101,91597,91598,91600,91602,91604],{"class":103,"line":8003},[101,91599,2484],{"class":107},[101,91601,1645],{"class":111},[101,91603,338],{"class":107},[101,91605,91606],{"class":111},"timer) {\n",[101,91608,91609,91612,91614,91616,91618,91620],{"class":103,"line":8009},[101,91610,91611],{"class":111},"          timer ",[101,91613,157],{"class":107},[101,91615,90680],{"class":1950},[101,91617,112],{"class":111},[101,91619,54438],{"class":107},[101,91621,54441],{"class":111},[101,91623,91624,91627],{"class":103,"line":8021},[101,91625,91626],{"class":1950},"            fn",[101,91628,1963],{"class":111},[101,91630,91631],{"class":103,"line":8033},[101,91632,91633],{"class":170},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[101,91635,91636],{"class":103,"line":8045},[101,91637,91638],{"class":170},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[101,91640,91641,91644,91646],{"class":103,"line":9704},[101,91642,91643],{"class":111},"            timer ",[101,91645,157],{"class":107},[101,91647,91648],{"class":160}," null\n",[101,91650,91651],{"class":103,"line":9729},[101,91652,91653],{"class":170},"            \u002F\u002F 不能用clearTimeout(timer)\n",[101,91655,91656],{"class":103,"line":9752},[101,91657,91658],{"class":170},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[101,91660,91661],{"class":103,"line":9776},[101,91662,91663],{"class":111},"          }, t)\n",[101,91665,91666],{"class":103,"line":9781},[101,91667,2516],{"class":111},[101,91669,91670],{"class":103,"line":9786},[101,91671,52387],{"class":111},[101,91673,91674],{"class":103,"line":9791},[101,91675,2174],{"class":111},[101,91677,91678,91680,91682,91684,91686,91688,91690,91692,91694],{"class":103,"line":9800},[101,91679,90196],{"class":111},[101,91681,57802],{"class":1950},[101,91683,112],{"class":111},[101,91685,90203],{"class":216},[101,91687,12423],{"class":111},[101,91689,91162],{"class":1950},[101,91691,90212],{"class":111},[101,91693,65063],{"class":160},[101,91695,30486],{"class":111},[101,91697,91698,91700,91702],{"class":103,"line":9805},[101,91699,52406],{"class":111},[101,91701,51802],{"class":51289},[101,91703,51296],{"class":111},[101,91705,91706,91708,91710],{"class":103,"line":9811},[101,91707,51774],{"class":111},[101,91709,51789],{"class":51289},[101,91711,51296],{"class":111},[101,91713,91714],{"class":103,"line":9832},[101,91715,2387],{"emptyLinePlaceholder":27},[101,91717,91718,91720,91722],{"class":103,"line":9838},[101,91719,51774],{"class":111},[101,91721,50624],{"class":51289},[101,91723,51296],{"class":111},[72,91725,91727],{"id":91726},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[92,91729,91731],{"className":53056,"code":91730,"language":53058,"meta":20,"style":20},"\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",[98,91732,91733,91741,91749,91754,91759,91764,91769,91773,91781],{"__ignoreMap":20},[101,91734,91735,91737,91739],{"class":103,"line":104},[101,91736,1021],{"class":111},[101,91738,51789],{"class":51289},[101,91740,51296],{"class":111},[101,91742,91743,91745,91747],{"class":103,"line":21},[101,91744,52133],{"class":111},[101,91746,51802],{"class":51289},[101,91748,51296],{"class":111},[101,91750,91751],{"class":103,"line":1166},[101,91752,91753],{"class":111},"    let timer = null\n",[101,91755,91756],{"class":103,"line":1181},[101,91757,91758],{"class":111},"    timer = setTimeout(() => {\n",[101,91760,91761],{"class":103,"line":1187},[101,91762,91763],{"class":111},"      clearTimeout(timer)\n",[101,91765,91766],{"class":103,"line":1201},[101,91767,91768],{"class":111},"      console.log(timer)\n",[101,91770,91771],{"class":103,"line":1207},[101,91772,60214],{"class":111},[101,91774,91775,91777,91779],{"class":103,"line":1298},[101,91776,52406],{"class":111},[101,91778,51802],{"class":51289},[101,91780,51296],{"class":111},[101,91782,91783,91785,91787],{"class":103,"line":1304},[101,91784,51774],{"class":111},[101,91786,51789],{"class":51289},[101,91788,51296],{"class":111},[10,91790,91791],{},"输出为1",[10,91793,91794],{},"在开启的定时器里边写清除定时器",[10,91796,91797],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[72,91799,91801],{"id":91800},"_4174-节流综合案例","4.17.4 节流综合案例",[10,91803,91804],{},"页面打开，可以记录上一次的视频播放位置",[10,91806,91807],{},[1449,91808],{"alt":20,"src":91809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[10,91811,91812],{},[1449,91813],{"alt":20,"src":91814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[92,91816,91818],{"className":50622,"code":91817,"language":50624,"meta":20,"style":20},"\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",[98,91819,91820,91830,91844,91848,91856,91870,91890,91910,91932,91945,91953,91959,91969,91979,91989,91993,91997,92004,92017,92029,92033,92037,92047,92059,92073,92077,92081,92088,92098,92111,92123,92133,92143,92159,92171,92175,92179,92187,92197,92209,92219,92229,92239,92243,92247,92257,92268,92272,92280,92288,92292,92300,92315,92330,92345,92366,92374,92382,92397,92419,92427,92442,92468,92494,92520,92528,92536,92555,92563,92568,92587,92592,92610,92615,92620,92628,92633,92647,92655,92660,92677,92681,92686,92708,92712,92720,92728,92732],{"__ignoreMap":20},[101,91821,91822,91824,91826,91828],{"class":103,"line":104},[101,91823,51286],{"class":111},[101,91825,51290],{"class":51289},[101,91827,51293],{"class":1950},[101,91829,51296],{"class":111},[101,91831,91832,91834,91836,91838,91840,91842],{"class":103,"line":21},[101,91833,1021],{"class":111},[101,91835,50624],{"class":51289},[101,91837,51305],{"class":1950},[101,91839,157],{"class":111},[101,91841,51310],{"class":216},[101,91843,51296],{"class":111},[101,91845,91846],{"class":103,"line":1166},[101,91847,2387],{"emptyLinePlaceholder":27},[101,91849,91850,91852,91854],{"class":103,"line":1181},[101,91851,1021],{"class":111},[101,91853,51323],{"class":51289},[101,91855,51296],{"class":111},[101,91857,91858,91860,91862,91864,91866,91868],{"class":103,"line":1187},[101,91859,52133],{"class":111},[101,91861,51333],{"class":51289},[101,91863,51336],{"class":1950},[101,91865,157],{"class":111},[101,91867,51341],{"class":216},[101,91869,59116],{"class":111},[101,91871,91872,91874,91876,91878,91880,91882,91884,91886,91888],{"class":103,"line":1201},[101,91873,52133],{"class":111},[101,91875,51333],{"class":51289},[101,91877,51352],{"class":1950},[101,91879,157],{"class":111},[101,91881,51357],{"class":216},[101,91883,51360],{"class":1950},[101,91885,157],{"class":111},[101,91887,51365],{"class":216},[101,91889,59116],{"class":111},[101,91891,91892,91894,91896,91898,91900,91902,91904,91906,91908],{"class":103,"line":1207},[101,91893,52133],{"class":111},[101,91895,51333],{"class":51289},[101,91897,14908],{"class":1950},[101,91899,157],{"class":111},[101,91901,51380],{"class":216},[101,91903,51360],{"class":1950},[101,91905,157],{"class":111},[101,91907,51387],{"class":216},[101,91909,59116],{"class":111},[101,91911,91912,91914,91916,91918,91920,91923,91925,91927,91930],{"class":103,"line":1298},[101,91913,52133],{"class":111},[101,91915,51333],{"class":51289},[101,91917,14908],{"class":1950},[101,91919,157],{"class":111},[101,91921,91922],{"class":216},"\"referrer\"",[101,91924,51360],{"class":1950},[101,91926,157],{"class":111},[101,91928,91929],{"class":216},"\"never\"",[101,91931,59116],{"class":111},[101,91933,91934,91936,91938,91941,91943],{"class":103,"line":1304},[101,91935,52133],{"class":111},[101,91937,51396],{"class":51289},[101,91939,91940],{"class":111},">综合案例\u003C\u002F",[101,91942,51396],{"class":51289},[101,91944,51296],{"class":111},[101,91946,91947,91949,91951],{"class":103,"line":1316},[101,91948,52133],{"class":111},[101,91950,5114],{"class":51289},[101,91952,51296],{"class":111},[101,91954,91955,91957],{"class":103,"line":1599},[101,91956,6391],{"class":51289},[101,91958,15560],{"class":111},[101,91960,91961,91963,91965,91967],{"class":103,"line":1604},[101,91962,54684],{"class":160},[101,91964,51426],{"class":111},[101,91966,303],{"class":160},[101,91968,1277],{"class":111},[101,91970,91971,91973,91975,91977],{"class":103,"line":1610},[101,91972,54695],{"class":160},[101,91974,51426],{"class":111},[101,91976,303],{"class":160},[101,91978,1277],{"class":111},[101,91980,91981,91983,91985,91987],{"class":103,"line":1615},[101,91982,72585],{"class":160},[101,91984,51426],{"class":111},[101,91986,60494],{"class":160},[101,91988,1277],{"class":111},[101,91990,91991],{"class":103,"line":1629},[101,91992,2174],{"class":111},[101,91994,91995],{"class":103,"line":1634},[101,91996,2387],{"emptyLinePlaceholder":27},[101,91998,91999,92002],{"class":103,"line":1640},[101,92000,92001],{"class":1950},"    .container",[101,92003,15560],{"class":111},[101,92005,92006,92008,92010,92013,92015],{"class":103,"line":1661},[101,92007,54760],{"class":160},[101,92009,51426],{"class":111},[101,92011,92012],{"class":160},"1200",[101,92014,51481],{"class":107},[101,92016,1277],{"class":111},[101,92018,92019,92021,92023,92025,92027],{"class":103,"line":1666},[101,92020,54695],{"class":160},[101,92022,51426],{"class":111},[101,92024,303],{"class":160},[101,92026,51545],{"class":160},[101,92028,1277],{"class":111},[101,92030,92031],{"class":103,"line":1680},[101,92032,2174],{"class":111},[101,92034,92035],{"class":103,"line":1685},[101,92036,2387],{"emptyLinePlaceholder":27},[101,92038,92039,92042,92045],{"class":103,"line":1714},[101,92040,92041],{"class":1950},"    .video",[101,92043,92044],{"class":51289}," video",[101,92046,15560],{"class":111},[101,92048,92049,92051,92053,92055,92057],{"class":103,"line":1719},[101,92050,54760],{"class":160},[101,92052,51426],{"class":111},[101,92054,422],{"class":160},[101,92056,439],{"class":107},[101,92058,1277],{"class":111},[101,92060,92061,92063,92065,92067,92069,92071],{"class":103,"line":1736},[101,92062,54684],{"class":160},[101,92064,51426],{"class":111},[101,92066,811],{"class":160},[101,92068,51481],{"class":107},[101,92070,4080],{"class":160},[101,92072,1277],{"class":111},[101,92074,92075],{"class":103,"line":1741},[101,92076,2174],{"class":111},[101,92078,92079],{"class":103,"line":1746},[101,92080,2387],{"emptyLinePlaceholder":27},[101,92082,92083,92086],{"class":103,"line":1751},[101,92084,92085],{"class":1950},"    .elevator",[101,92087,15560],{"class":111},[101,92089,92090,92092,92094,92096],{"class":103,"line":1765},[101,92091,54748],{"class":160},[101,92093,51426],{"class":111},[101,92095,86222],{"class":160},[101,92097,1277],{"class":111},[101,92099,92100,92102,92104,92107,92109],{"class":103,"line":1770},[101,92101,54936],{"class":160},[101,92103,51426],{"class":111},[101,92105,92106],{"class":160},"280",[101,92108,51481],{"class":107},[101,92110,1277],{"class":111},[101,92112,92113,92115,92117,92119,92121],{"class":103,"line":2564},[101,92114,86416],{"class":160},[101,92116,51426],{"class":111},[101,92118,811],{"class":160},[101,92120,51481],{"class":107},[101,92122,1277],{"class":111},[101,92124,92125,92127,92129,92131],{"class":103,"line":2578},[101,92126,86229],{"class":160},[101,92128,51426],{"class":111},[101,92130,86234],{"class":160},[101,92132,1277],{"class":111},[101,92134,92135,92137,92139,92141],{"class":103,"line":2586},[101,92136,61710],{"class":160},[101,92138,51426],{"class":111},[101,92140,60831],{"class":160},[101,92142,1277],{"class":111},[101,92144,92145,92147,92149,92151,92153,92155,92157],{"class":103,"line":2591},[101,92146,61966],{"class":160},[101,92148,51426],{"class":111},[101,92150,329],{"class":160},[101,92152,51481],{"class":107},[101,92154,51510],{"class":160},[101,92156,62233],{"class":160},[101,92158,1277],{"class":111},[101,92160,92161,92163,92165,92167,92169],{"class":103,"line":2597},[101,92162,54760],{"class":160},[101,92164,51426],{"class":111},[101,92166,1018],{"class":160},[101,92168,51481],{"class":107},[101,92170,1277],{"class":111},[101,92172,92173],{"class":103,"line":2603},[101,92174,2174],{"class":111},[101,92176,92177],{"class":103,"line":2608},[101,92178,2387],{"emptyLinePlaceholder":27},[101,92180,92181,92183,92185],{"class":103,"line":7936},[101,92182,92085],{"class":1950},[101,92184,1385],{"class":51289},[101,92186,15560],{"class":111},[101,92188,92189,92191,92193,92195],{"class":103,"line":7960},[101,92190,54998],{"class":160},[101,92192,51426],{"class":111},[101,92194,60858],{"class":160},[101,92196,1277],{"class":111},[101,92198,92199,92201,92203,92205,92207],{"class":103,"line":7965},[101,92200,54684],{"class":160},[101,92202,51426],{"class":111},[101,92204,557],{"class":160},[101,92206,51481],{"class":107},[101,92208,1277],{"class":111},[101,92210,92211,92213,92215,92217],{"class":103,"line":7971},[101,92212,63959],{"class":160},[101,92214,51426],{"class":111},[101,92216,54726],{"class":160},[101,92218,1277],{"class":111},[101,92220,92221,92223,92225,92227],{"class":103,"line":7998},[101,92222,57275],{"class":160},[101,92224,51426],{"class":111},[101,92226,51581],{"class":160},[101,92228,1277],{"class":111},[101,92230,92231,92233,92235,92237],{"class":103,"line":8003},[101,92232,57405],{"class":160},[101,92234,51426],{"class":111},[101,92236,62059],{"class":160},[101,92238,1277],{"class":111},[101,92240,92241],{"class":103,"line":8009},[101,92242,2174],{"class":111},[101,92244,92245],{"class":103,"line":8021},[101,92246,2387],{"emptyLinePlaceholder":27},[101,92248,92249,92251,92253,92255],{"class":103,"line":8033},[101,92250,92085],{"class":1950},[101,92252,1385],{"class":51289},[101,92254,64013],{"class":1950},[101,92256,15560],{"class":111},[101,92258,92259,92261,92263,92266],{"class":103,"line":8045},[101,92260,57405],{"class":160},[101,92262,51426],{"class":111},[101,92264,92265],{"class":160},"#1286ff",[101,92267,1277],{"class":111},[101,92269,92270],{"class":103,"line":9704},[101,92271,2174],{"class":111},[101,92273,92274,92276,92278],{"class":103,"line":9729},[101,92275,52406],{"class":111},[101,92277,5114],{"class":51289},[101,92279,51296],{"class":111},[101,92281,92282,92284,92286],{"class":103,"line":9752},[101,92283,51774],{"class":111},[101,92285,51323],{"class":51289},[101,92287,51296],{"class":111},[101,92289,92290],{"class":103,"line":9776},[101,92291,2387],{"emptyLinePlaceholder":27},[101,92293,92294,92296,92298],{"class":103,"line":9781},[101,92295,1021],{"class":111},[101,92297,51789],{"class":51289},[101,92299,51296],{"class":111},[101,92301,92302,92304,92306,92308,92310,92313],{"class":103,"line":9786},[101,92303,52133],{"class":111},[101,92305,51600],{"class":51289},[101,92307,53475],{"class":1950},[101,92309,157],{"class":111},[101,92311,92312],{"class":216},"\"container\"",[101,92314,51296],{"class":111},[101,92316,92317,92319,92321,92323,92325,92328],{"class":103,"line":9791},[101,92318,51330],{"class":111},[101,92320,51600],{"class":51289},[101,92322,53475],{"class":1950},[101,92324,157],{"class":111},[101,92326,92327],{"class":216},"\"header\"",[101,92329,51296],{"class":111},[101,92331,92332,92334,92336,92338,92340,92343],{"class":103,"line":9800},[101,92333,55223],{"class":111},[101,92335,14],{"class":51289},[101,92337,61046],{"class":1950},[101,92339,157],{"class":111},[101,92341,92342],{"class":216},"\"http:\u002F\u002Fpip.itcast.cn\"",[101,92344,51296],{"class":111},[101,92346,92347,92349,92351,92353,92355,92358,92360,92362,92364],{"class":103,"line":9805},[101,92348,55291],{"class":111},[101,92350,1449],{"class":51289},[101,92352,55228],{"class":1950},[101,92354,157],{"class":111},[101,92356,92357],{"class":216},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[101,92359,55236],{"class":1950},[101,92361,157],{"class":111},[101,92363,7640],{"class":216},[101,92365,59116],{"class":111},[101,92367,92368,92370,92372],{"class":103,"line":9811},[101,92369,55396],{"class":111},[101,92371,14],{"class":51289},[101,92373,51296],{"class":111},[101,92375,92376,92378,92380],{"class":103,"line":9832},[101,92377,51765],{"class":111},[101,92379,51600],{"class":51289},[101,92381,51296],{"class":111},[101,92383,92384,92386,92388,92390,92392,92395],{"class":103,"line":9838},[101,92385,51330],{"class":111},[101,92387,51600],{"class":51289},[101,92389,53475],{"class":1950},[101,92391,157],{"class":111},[101,92393,92394],{"class":216},"\"video\"",[101,92396,51296],{"class":111},[101,92398,92399,92401,92403,92405,92407,92410,92413,92415,92417],{"class":103,"line":9852},[101,92400,55223],{"class":111},[101,92402,28172],{"class":51289},[101,92404,55228],{"class":1950},[101,92406,157],{"class":111},[101,92408,92409],{"class":216},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[101,92411,92412],{"class":1950}," controls",[101,92414,55303],{"class":111},[101,92416,28172],{"class":51289},[101,92418,51296],{"class":111},[101,92420,92421,92423,92425],{"class":103,"line":9858},[101,92422,51765],{"class":111},[101,92424,51600],{"class":51289},[101,92426,51296],{"class":111},[101,92428,92429,92431,92433,92435,92437,92440],{"class":103,"line":9885},[101,92430,51330],{"class":111},[101,92432,51600],{"class":51289},[101,92434,53475],{"class":1950},[101,92436,157],{"class":111},[101,92438,92439],{"class":216},"\"elevator\"",[101,92441,51296],{"class":111},[101,92443,92444,92446,92448,92450,92452,92454,92457,92459,92461,92464,92466],{"class":103,"line":9894},[101,92445,55223],{"class":111},[101,92447,14],{"class":51289},[101,92449,61046],{"class":1950},[101,92451,157],{"class":111},[101,92453,64225],{"class":216},[101,92455,92456],{"class":1950}," data-ref",[101,92458,157],{"class":111},[101,92460,92394],{"class":216},[101,92462,92463],{"class":111},">视频介绍\u003C\u002F",[101,92465,14],{"class":51289},[101,92467,51296],{"class":111},[101,92469,92470,92472,92474,92476,92478,92480,92482,92484,92487,92490,92492],{"class":103,"line":9900},[101,92471,55223],{"class":111},[101,92473,14],{"class":51289},[101,92475,61046],{"class":1950},[101,92477,157],{"class":111},[101,92479,64225],{"class":216},[101,92481,92456],{"class":1950},[101,92483,157],{"class":111},[101,92485,92486],{"class":216},"\"intro\"",[101,92488,92489],{"class":111},">课程简介\u003C\u002F",[101,92491,14],{"class":51289},[101,92493,51296],{"class":111},[101,92495,92496,92498,92500,92502,92504,92506,92508,92510,92513,92516,92518],{"class":103,"line":9908},[101,92497,55223],{"class":111},[101,92499,14],{"class":51289},[101,92501,61046],{"class":1950},[101,92503,157],{"class":111},[101,92505,64225],{"class":216},[101,92507,92456],{"class":1950},[101,92509,157],{"class":111},[101,92511,92512],{"class":216},"\"outline\"",[101,92514,92515],{"class":111},">评论列表\u003C\u002F",[101,92517,14],{"class":51289},[101,92519,51296],{"class":111},[101,92521,92522,92524,92526],{"class":103,"line":9913},[101,92523,51765],{"class":111},[101,92525,51600],{"class":51289},[101,92527,51296],{"class":111},[101,92529,92530,92532,92534],{"class":103,"line":16592},[101,92531,52406],{"class":111},[101,92533,51600],{"class":51289},[101,92535,51296],{"class":111},[101,92537,92538,92540,92542,92544,92546,92549,92551,92553],{"class":103,"line":16598},[101,92539,52133],{"class":111},[101,92541,51802],{"class":51289},[101,92543,55228],{"class":1950},[101,92545,157],{"class":111},[101,92547,92548],{"class":216},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[101,92550,55303],{"class":111},[101,92552,51802],{"class":51289},[101,92554,51296],{"class":111},[101,92556,92557,92559,92561],{"class":103,"line":16621},[101,92558,52133],{"class":111},[101,92560,51802],{"class":51289},[101,92562,51296],{"class":111},[101,92564,92565],{"class":103,"line":16627},[101,92566,92567],{"class":170},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[101,92569,92570,92572,92574,92576,92578,92580,92582,92585],{"class":103,"line":16650},[101,92571,11209],{"class":107},[101,92573,92044],{"class":160},[101,92575,13552],{"class":107},[101,92577,54385],{"class":111},[101,92579,54388],{"class":1950},[101,92581,112],{"class":111},[101,92583,92584],{"class":216},"'video'",[101,92586,118],{"class":111},[101,92588,92589],{"class":103,"line":16664},[101,92590,92591],{"class":170},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[101,92593,92594,92597,92599,92601,92603,92606,92608],{"class":103,"line":16684},[101,92595,92596],{"class":111},"    video.ontimeupdate ",[101,92598,157],{"class":107},[101,92600,88344],{"class":111},[101,92602,91162],{"class":1950},[101,92604,92605],{"class":111},"(() ",[101,92607,84711],{"class":107},[101,92609,15560],{"class":111},[101,92611,92612],{"class":103,"line":16690},[101,92613,92614],{"class":170},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[101,92616,92617],{"class":103,"line":16701},[101,92618,92619],{"class":170},"      \u002F\u002F 控制台输出当前的时间\n",[101,92621,92622,92625],{"class":103,"line":16724},[101,92623,92624],{"class":170},"      \u002F\u002F console.log(video.currentTime)",[101,92626,92627],{"class":170},"  \u002F\u002F获得当前的视频时间\n",[101,92629,92630],{"class":103,"line":16746},[101,92631,92632],{"class":170},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[101,92634,92635,92637,92639,92641,92644],{"class":103,"line":16751},[101,92636,74672],{"class":111},[101,92638,71643],{"class":1950},[101,92640,112],{"class":111},[101,92642,92643],{"class":216},"'currentTime'",[101,92645,92646],{"class":111},", video.currentTime)\n",[101,92648,92649,92651,92653],{"class":103,"line":16757},[101,92650,54524],{"class":111},[101,92652,6398],{"class":160},[101,92654,118],{"class":111},[101,92656,92657],{"class":103,"line":16771},[101,92658,92659],{"class":170},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[101,92661,92662,92665,92668,92670,92673,92675],{"class":103,"line":16784},[101,92663,92664],{"class":111},"    video.",[101,92666,92667],{"class":1950},"onloadeddata",[101,92669,13552],{"class":107},[101,92671,92672],{"class":111}," () ",[101,92674,84711],{"class":107},[101,92676,15560],{"class":111},[101,92678,92679],{"class":103,"line":16789},[101,92680,60001],{"class":170},[101,92682,92683],{"class":103,"line":16803},[101,92684,92685],{"class":170},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[101,92687,92688,92691,92693,92696,92698,92700,92702,92704,92706],{"class":103,"line":16808},[101,92689,92690],{"class":111},"      video.currentTime ",[101,92692,157],{"class":107},[101,92694,92695],{"class":111}," localStorage.",[101,92697,71674],{"class":1950},[101,92699,112],{"class":111},[101,92701,92643],{"class":216},[101,92703,13702],{"class":111},[101,92705,71346],{"class":107},[101,92707,47322],{"class":160},[101,92709,92710],{"class":103,"line":16814},[101,92711,2174],{"class":111},[101,92713,92714,92716,92718],{"class":103,"line":16819},[101,92715,52406],{"class":111},[101,92717,51802],{"class":51289},[101,92719,51296],{"class":111},[101,92721,92722,92724,92726],{"class":103,"line":16833},[101,92723,51774],{"class":111},[101,92725,51789],{"class":51289},[101,92727,51296],{"class":111},[101,92729,92730],{"class":103,"line":16838},[101,92731,2387],{"emptyLinePlaceholder":27},[101,92733,92734,92736,92738],{"class":103,"line":16843},[101,92735,51774],{"class":111},[101,92737,50624],{"class":51289},[101,92739,51296],{"class":111},[5114,92741,92742],{},"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":20,"searchDepth":21,"depth":21,"links":92744},[92745,92750,92754,92755,92756,92761,92766,92767,92768,92769,92776,92781,92782,92792,92796,92797,92801],{"id":76680,"depth":21,"text":76681,"children":92746},[92747,92748,92749],{"id":76684,"depth":1166,"text":76685},{"id":76709,"depth":1166,"text":76710},{"id":76721,"depth":1166,"text":76722},{"id":76733,"depth":21,"text":76734,"children":92751},[92752,92753],{"id":76737,"depth":1166,"text":76738},{"id":76752,"depth":1166,"text":76753},{"id":76804,"depth":21,"text":76805},{"id":76848,"depth":21,"text":76849},{"id":76865,"depth":21,"text":76866,"children":92757},[92758,92759,92760],{"id":76869,"depth":1166,"text":76870},{"id":76882,"depth":1166,"text":76883},{"id":76987,"depth":1166,"text":76988},{"id":77276,"depth":21,"text":77277,"children":92762},[92763,92764,92765],{"id":77280,"depth":1166,"text":77281},{"id":77723,"depth":1166,"text":77724},{"id":78134,"depth":1166,"text":78135},{"id":78197,"depth":21,"text":78198},{"id":78276,"depth":21,"text":78277},{"id":78369,"depth":21,"text":78370},{"id":80214,"depth":21,"text":80215,"children":92770},[92771,92772,92773,92774,92775],{"id":80218,"depth":1166,"text":80219},{"id":80230,"depth":1166,"text":80231},{"id":80449,"depth":1166,"text":80450},{"id":80467,"depth":1166,"text":80468},{"id":80527,"depth":1166,"text":80528},{"id":84795,"depth":21,"text":84796,"children":92777},[92778,92779,92780],{"id":84799,"depth":1166,"text":84800},{"id":84817,"depth":1166,"text":84818},{"id":84843,"depth":1166,"text":84844},{"id":84852,"depth":21,"text":84853},{"id":84874,"depth":21,"text":84875,"children":92783},[92784,92785,92786,92787,92788,92789,92790,92791],{"id":84878,"depth":1166,"text":84879},{"id":85139,"depth":1166,"text":85140},{"id":85325,"depth":1166,"text":85326},{"id":85692,"depth":1166,"text":85693},{"id":85808,"depth":1166,"text":85809},{"id":85844,"depth":1166,"text":85845},{"id":85891,"depth":1166,"text":85892},{"id":85925,"depth":1166,"text":85926},{"id":87288,"depth":21,"text":87289,"children":92793},[92794,92795],{"id":87292,"depth":1166,"text":87293},{"id":87329,"depth":1166,"text":87330},{"id":88684,"depth":21,"text":88685},{"id":89055,"depth":21,"text":89056,"children":92798},[92799,92800],{"id":89059,"depth":1166,"text":89060},{"id":89093,"depth":1166,"text":89094},{"id":89822,"depth":21,"text":89823,"children":92802},[92803,92804,92805,92806],{"id":89826,"depth":1166,"text":89827},{"id":90784,"depth":1166,"text":90785},{"id":91726,"depth":1166,"text":91727},{"id":91800,"depth":1166,"text":91801},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76669,"description":23365},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":4,"title":5,"body":92813,"description":23,"extension":24,"meta":92822,"navigation":27,"path":28,"seo":92823,"stem":30,"__hash__":31},{"type":7,"value":92814,"toc":92820},[92815],[10,92816,12,92817],{},[14,92818,16],{"href":16,"rel":92819},[18],{"title":20,"searchDepth":21,"depth":21,"links":92821},[],{"category":26},{"title":5,"description":23},{"id":92825,"title":92826,"body":92827,"description":23365,"extension":24,"meta":92932,"navigation":27,"path":92933,"seo":92934,"stem":92935,"__hash__":92936},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92828,"toc":92927},[92829,92836,92839,92842,92845,92849,92858,92861,92864,92868,92877,92880,92884,92887,92907,92910,92924],[10,92830,92831],{},[14,92832,92835],{"href":92833,"rel":92834},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[18],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[39,92837,92826],{"id":92838},"_1安装",[10,92840,92841],{},"numpy是科学计算基础库,底层是C语言",[10,92843,92844],{},"三种方式：",[43,92846,92848],{"id":92847},"_11-通过pip安装","1.1 通过pip安装",[92,92850,92852],{"className":30367,"code":92851,"language":30369,"meta":20,"style":20},"pip install numpy\n",[98,92853,92854],{"__ignoreMap":20},[101,92855,92856],{"class":103,"line":104},[101,92857,92851],{"class":111},[10,92859,92860],{},"首选方式，自动处理依赖项",[10,92862,92863],{},"在提示系统命令符中使用cmd",[43,92865,92867],{"id":92866},"_12-通过anaconda安装","1.2 通过Anaconda安装",[92,92869,92871],{"className":30367,"code":92870,"language":30369,"meta":20,"style":20},"conda install numpy\n",[98,92872,92873],{"__ignoreMap":20},[101,92874,92875],{"class":103,"line":104},[101,92876,92870],{"class":111},[10,92878,92879],{},"自动解决环境依赖",[43,92881,92883],{"id":92882},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[10,92885,92886],{},"对于Debian\u002FUbuntu",[92,92888,92890],{"className":30367,"code":92889,"language":30369,"meta":20,"style":20},"sudo apt-get install python3-numpy\n",[98,92891,92892],{"__ignoreMap":20},[101,92893,92894,92897,92899,92902,92904],{"class":103,"line":104},[101,92895,92896],{"class":111},"sudo apt",[101,92898,643],{"class":107},[101,92900,92901],{"class":111},"get install python3",[101,92903,643],{"class":107},[101,92905,92906],{"class":111},"numpy\n",[10,92908,92909],{},"对于Fedora:",[92,92911,92913],{"className":30367,"code":92912,"language":30369,"meta":20,"style":20},"sudo dnf install python3-numpy\n",[98,92914,92915],{"__ignoreMap":20},[101,92916,92917,92920,92922],{"class":103,"line":104},[101,92918,92919],{"class":111},"sudo dnf install python3",[101,92921,643],{"class":107},[101,92923,92906],{"class":111},[5114,92925,92926],{},"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":20,"searchDepth":21,"depth":21,"links":92928},[92929,92930,92931],{"id":92847,"depth":21,"text":92848},{"id":92866,"depth":21,"text":92867},{"id":92882,"depth":21,"text":92883},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92826,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92938,"title":92939,"body":92940,"description":23365,"extension":24,"meta":93053,"navigation":27,"path":93054,"seo":93055,"stem":93056,"__hash__":93057},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92941,"toc":93051},[92942,92945,92948,92951,92954,92957,92960,92963,92966,92969,93045,93048],[39,92943,92939],{"id":92944},"_10算数函数",[10,92946,92947],{},"加减乘除运算跟python基础语法没区别",[10,92949,92950],{},"除了python那种方法外还可以使用函数",[10,92952,92953],{},"加：np.add(a,b)",[10,92955,92956],{},"减：np.subtract(a,b)",[10,92958,92959],{},"乘：np.multiply(a,b)",[10,92961,92962],{},"除：np.divide(a,b) == a\u002Fb",[10,92964,92965],{},"取余：np.mod(a,b) == a%b",[10,92967,92968],{},"必须会的用法：",[92,92970,92972],{"className":30367,"code":92971,"language":30369,"meta":20,"style":20},"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",[98,92973,92974,92996,93017,93027,93040],{"__ignoreMap":20},[101,92975,92976,92978,92980,92983,92985,92988,92990,92992,92994],{"class":103,"line":104},[101,92977,14],{"class":111},[101,92979,157],{"class":107},[101,92981,92982],{"class":111},"np.arange(",[101,92984,531],{"class":160},[101,92986,92987],{"class":111},").reshape(",[101,92989,183],{"class":160},[101,92991,489],{"class":111},[101,92993,183],{"class":160},[101,92995,118],{"class":111},[101,92997,92998,93000,93002,93005,93007,93009,93011,93013,93015],{"class":103,"line":21},[101,92999,374],{"class":111},[101,93001,157],{"class":107},[101,93003,93004],{"class":111},"np.array([",[101,93006,557],{"class":160},[101,93008,489],{"class":111},[101,93010,557],{"class":160},[101,93012,489],{"class":111},[101,93014,557],{"class":160},[101,93016,4644],{"class":111},[101,93018,93019,93022,93024],{"class":103,"line":1166},[101,93020,93021],{"class":111},"result",[101,93023,157],{"class":107},[101,93025,93026],{"class":111},"np.empty_like(a)\n",[101,93028,93029,93032,93035,93037],{"class":103,"line":1181},[101,93030,93031],{"class":111},"np.add(a,b,",[101,93033,93034],{"class":5204},"out",[101,93036,157],{"class":107},[101,93038,93039],{"class":111},"result)\n",[101,93041,93042],{"class":103,"line":1187},[101,93043,93044],{"class":111},"result\n",[10,93046,93047],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5114,93049,93050],{},"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":20,"searchDepth":21,"depth":21,"links":93052},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92939,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93059,"title":93060,"body":93061,"description":23365,"extension":24,"meta":93823,"navigation":27,"path":93824,"seo":93825,"stem":93826,"__hash__":93827},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93062,"toc":93810},[93063,93066,93069,93072,93076,93115,93119,93163,93223,93227,93230,93269,93272,93317,93321,93357,93361,93430,93434,93498,93502,93505,93508,93511,93514,93550,93554,93594,93598,93670,93673,93677,93740,93744,93807],[39,93064,93060],{"id":93065},"_11统计函数",[10,93067,93068],{},"sum max min mean",[10,93070,93071],{},"这些有axis参数，可以指定方向",[43,93073,93075],{"id":93074},"_111-sum求和函数","11.1 sum()求和函数",[92,93077,93079],{"className":30367,"code":93078,"language":30369,"meta":20,"style":20},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[98,93080,93081,93086,93107],{"__ignoreMap":20},[101,93082,93083],{"class":103,"line":104},[101,93084,93085],{"class":170},"#创建一维数组\n",[101,93087,93088,93090,93092,93095,93097,93099,93101,93103,93105],{"class":103,"line":21},[101,93089,14],{"class":111},[101,93091,157],{"class":107},[101,93093,93094],{"class":111},"np.random.randint(",[101,93096,329],{"class":160},[101,93098,489],{"class":111},[101,93100,422],{"class":160},[101,93102,489],{"class":111},[101,93104,811],{"class":160},[101,93106,118],{"class":111},[101,93108,93109,93112],{"class":103,"line":1166},[101,93110,93111],{"class":111},"np.sum(a)",[101,93113,93114],{"class":170},"#求和\n",[43,93116,93118],{"id":93117},"_112-max求最大值函数","11.2 max()求最大值函数",[92,93120,93122],{"className":30367,"code":93121,"language":30369,"meta":20,"style":20},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[98,93123,93124,93128,93148,93153,93158],{"__ignoreMap":20},[101,93125,93126],{"class":103,"line":104},[101,93127,93085],{"class":170},[101,93129,93130,93132,93134,93136,93138,93140,93142,93144,93146],{"class":103,"line":21},[101,93131,14],{"class":111},[101,93133,157],{"class":107},[101,93135,93094],{"class":111},[101,93137,329],{"class":160},[101,93139,489],{"class":111},[101,93141,422],{"class":160},[101,93143,489],{"class":111},[101,93145,811],{"class":160},[101,93147,118],{"class":111},[101,93149,93150],{"class":103,"line":1166},[101,93151,93152],{"class":111},"np.max(a)\n",[101,93154,93155],{"class":103,"line":1181},[101,93156,93157],{"class":170},"#最大索引(求最大元素的索引)arg\n",[101,93159,93160],{"class":103,"line":1187},[101,93161,93162],{"class":111},"np.argmax(a)\n",[92,93164,93166],{"className":30367,"code":93165,"language":30369,"meta":20,"style":20},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[98,93167,93168,93189,93209,93213],{"__ignoreMap":20},[101,93169,93170,93172,93174,93177,93179,93181,93183,93185,93187],{"class":103,"line":104},[101,93171,10907],{"class":111},[101,93173,157],{"class":107},[101,93175,93176],{"class":111}," np.array([",[101,93178,329],{"class":160},[101,93180,12423],{"class":111},[101,93182,430],{"class":160},[101,93184,12423],{"class":111},[101,93186,183],{"class":160},[101,93188,4644],{"class":111},[101,93190,93191,93193,93195,93197,93199,93201,93203,93205,93207],{"class":103,"line":21},[101,93192,10933],{"class":111},[101,93194,157],{"class":107},[101,93196,93176],{"class":111},[101,93198,183],{"class":160},[101,93200,12423],{"class":111},[101,93202,189],{"class":160},[101,93204,12423],{"class":111},[101,93206,404],{"class":160},[101,93208,4644],{"class":111},[101,93210,93211],{"class":103,"line":1166},[101,93212,2387],{"emptyLinePlaceholder":27},[101,93214,93215,93217,93220],{"class":103,"line":1181},[101,93216,30404],{"class":160},[101,93218,93219],{"class":111},"(np.maximum(a, b))   ",[101,93221,93222],{"class":170},"# [3 5 4]，每个位置上取较大值\n",[43,93224,93226],{"id":93225},"_113-mean求平均值函数","11.3 mean()求平均值函数",[10,93228,93229],{},"①一维数组：",[92,93231,93233],{"className":30367,"code":93232,"language":30369,"meta":20,"style":20},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[98,93234,93235,93239,93259,93264],{"__ignoreMap":20},[101,93236,93237],{"class":103,"line":104},[101,93238,93085],{"class":170},[101,93240,93241,93243,93245,93247,93249,93251,93253,93255,93257],{"class":103,"line":21},[101,93242,14],{"class":111},[101,93244,157],{"class":107},[101,93246,93094],{"class":111},[101,93248,329],{"class":160},[101,93250,489],{"class":111},[101,93252,422],{"class":160},[101,93254,489],{"class":111},[101,93256,811],{"class":160},[101,93258,118],{"class":111},[101,93260,93261],{"class":103,"line":1166},[101,93262,93263],{"class":170},"#求平均值\n",[101,93265,93266],{"class":103,"line":1181},[101,93267,93268],{"class":111},"np.mean(a)\n",[10,93270,93271],{},"②二维数组",[92,93273,93275],{"className":30367,"code":93274,"language":30369,"meta":20,"style":20},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[98,93276,93277,93282,93307,93312],{"__ignoreMap":20},[101,93278,93279],{"class":103,"line":104},[101,93280,93281],{"class":170},"#二维数组\n",[101,93283,93284,93287,93289,93291,93293,93295,93297,93299,93301,93303,93305],{"class":103,"line":21},[101,93285,93286],{"class":111},"aa",[101,93288,157],{"class":107},[101,93290,92982],{"class":111},[101,93292,329],{"class":160},[101,93294,489],{"class":111},[101,93296,634],{"class":160},[101,93298,92987],{"class":111},[101,93300,183],{"class":160},[101,93302,489],{"class":111},[101,93304,404],{"class":160},[101,93306,118],{"class":111},[101,93308,93309],{"class":103,"line":1166},[101,93310,93311],{"class":170},"#对数组中的所有数求平均\n",[101,93313,93314],{"class":103,"line":1181},[101,93315,93316],{"class":111},"np.mean(aa)\n",[43,93318,93320],{"id":93319},"_114-median求中位数函数","11.4 median()求中位数函数",[92,93322,93324],{"className":30367,"code":93323,"language":30369,"meta":20,"style":20},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[98,93325,93326,93331,93347,93352],{"__ignoreMap":20},[101,93327,93328],{"class":103,"line":104},[101,93329,93330],{"class":170},"#求中位数\n",[101,93332,93333,93335,93337,93339,93341,93343,93345],{"class":103,"line":21},[101,93334,374],{"class":111},[101,93336,157],{"class":107},[101,93338,92982],{"class":111},[101,93340,329],{"class":160},[101,93342,489],{"class":111},[101,93344,557],{"class":160},[101,93346,118],{"class":111},[101,93348,93349],{"class":103,"line":1166},[101,93350,93351],{"class":111},"np.median(b)\n",[101,93353,93354],{"class":103,"line":1181},[101,93355,93356],{"class":170},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[43,93358,93360],{"id":93359},"_115-power求幂运算函数","11.5 power()求幂运算函数",[92,93362,93364],{"className":30367,"code":93363,"language":30369,"meta":20,"style":20},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[98,93365,93366,93382,93387,93392,93401,93406,93415],{"__ignoreMap":20},[101,93367,93368,93370,93372,93374,93376,93378,93380],{"class":103,"line":104},[101,93369,374],{"class":111},[101,93371,157],{"class":107},[101,93373,92982],{"class":111},[101,93375,329],{"class":160},[101,93377,489],{"class":111},[101,93379,557],{"class":160},[101,93381,118],{"class":111},[101,93383,93384],{"class":103,"line":21},[101,93385,93386],{"class":170},"#幂运算\n",[101,93388,93389],{"class":103,"line":1166},[101,93390,93391],{"class":170},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[101,93393,93394,93397,93399],{"class":103,"line":1181},[101,93395,93396],{"class":111},"np.power(b,",[101,93398,189],{"class":160},[101,93400,118],{"class":111},[101,93402,93403],{"class":103,"line":1187},[101,93404,93405],{"class":170},"#或者以下代码，将数据存储起来\n",[101,93407,93408,93410,93412],{"class":103,"line":1201},[101,93409,956],{"class":111},[101,93411,157],{"class":107},[101,93413,93414],{"class":111},"np.empty_like(b)\n",[101,93416,93417,93419,93421,93423,93425,93427],{"class":103,"line":1207},[101,93418,93396],{"class":111},[101,93420,189],{"class":160},[101,93422,489],{"class":111},[101,93424,93034],{"class":5204},[101,93426,157],{"class":107},[101,93428,93429],{"class":111},"y)\n",[43,93431,93433],{"id":93432},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[92,93435,93437],{"className":30367,"code":93436,"language":30369,"meta":20,"style":20},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[98,93438,93439,93455,93460,93465,93469,93487],{"__ignoreMap":20},[101,93440,93441,93443,93445,93447,93449,93451,93453],{"class":103,"line":104},[101,93442,374],{"class":111},[101,93444,157],{"class":107},[101,93446,92982],{"class":111},[101,93448,329],{"class":160},[101,93450,489],{"class":111},[101,93452,557],{"class":160},[101,93454,118],{"class":111},[101,93456,93457],{"class":103,"line":21},[101,93458,93459],{"class":170},"#开方\n",[101,93461,93462],{"class":103,"line":1166},[101,93463,93464],{"class":111},"np.sqrt(b)\n",[101,93466,93467],{"class":103,"line":1181},[101,93468,93405],{"class":170},[101,93470,93471,93473,93475,93478,93481,93483,93485],{"class":103,"line":1187},[101,93472,956],{"class":111},[101,93474,157],{"class":107},[101,93476,93477],{"class":111},"np.empty_like(b,",[101,93479,93480],{"class":5204},"dtype",[101,93482,157],{"class":107},[101,93484,151],{"class":160},[101,93486,118],{"class":111},[101,93488,93489,93492,93494,93496],{"class":103,"line":1201},[101,93490,93491],{"class":111},"np.sqrt(b,",[101,93493,93034],{"class":5204},[101,93495,157],{"class":107},[101,93497,93429],{"class":111},[43,93499,93501],{"id":93500},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[10,93503,93504],{},"对数组中的元素累计求和，可指定轴",[10,93506,93507],{},"#累计求和的意思是：",[10,93509,93510],{},"a = np.array([1, 2, 3, 4])",[10,93512,93513],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[92,93515,93517],{"className":30367,"code":93516,"language":30369,"meta":20,"style":20},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[98,93518,93519,93535,93540,93545],{"__ignoreMap":20},[101,93520,93521,93523,93525,93527,93529,93531,93533],{"class":103,"line":104},[101,93522,374],{"class":111},[101,93524,157],{"class":107},[101,93526,92982],{"class":111},[101,93528,329],{"class":160},[101,93530,489],{"class":111},[101,93532,557],{"class":160},[101,93534,118],{"class":111},[101,93536,93537],{"class":103,"line":21},[101,93538,93539],{"class":111},"np.cumsum(b)\n",[101,93541,93542],{"class":103,"line":1166},[101,93543,93544],{"class":170},"#结果：\n",[101,93546,93547],{"class":103,"line":1181},[101,93548,93549],{"class":170},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[43,93551,93553],{"id":93552},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[92,93555,93557],{"className":30367,"code":93556,"language":30369,"meta":20,"style":20},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[98,93558,93559,93575,93580,93585,93589],{"__ignoreMap":20},[101,93560,93561,93563,93565,93567,93569,93571,93573],{"class":103,"line":104},[101,93562,374],{"class":111},[101,93564,157],{"class":107},[101,93566,92982],{"class":111},[101,93568,329],{"class":160},[101,93570,489],{"class":111},[101,93572,557],{"class":160},[101,93574,118],{"class":111},[101,93576,93577],{"class":103,"line":21},[101,93578,93579],{"class":170},"#对数组中的元素累计求积，可指定轴\n",[101,93581,93582],{"class":103,"line":1166},[101,93583,93584],{"class":111},"np.cumprod(b)\n",[101,93586,93587],{"class":103,"line":1181},[101,93588,93544],{"class":170},[101,93590,93591],{"class":103,"line":1187},[101,93592,93593],{"class":170},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[43,93595,93597],{"id":93596},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[92,93599,93601],{"className":30367,"code":93600,"language":30369,"meta":20,"style":20},"#删除数组中的重复数据，并对数据进行排序\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",[98,93602,93603,93608,93656,93661,93665],{"__ignoreMap":20},[101,93604,93605],{"class":103,"line":104},[101,93606,93607],{"class":170},"#删除数组中的重复数据，并对数据进行排序\n",[101,93609,93610,93612,93614,93616,93618,93620,93622,93624,93626,93628,93630,93632,93634,93636,93638,93640,93642,93644,93646,93648,93650,93652,93654],{"class":103,"line":21},[101,93611,14],{"class":111},[101,93613,157],{"class":107},[101,93615,93004],{"class":111},[101,93617,329],{"class":160},[101,93619,489],{"class":111},[101,93621,189],{"class":160},[101,93623,489],{"class":111},[101,93625,183],{"class":160},[101,93627,489],{"class":111},[101,93629,609],{"class":160},[101,93631,489],{"class":111},[101,93633,183],{"class":160},[101,93635,489],{"class":111},[101,93637,557],{"class":160},[101,93639,489],{"class":111},[101,93641,309],{"class":160},[101,93643,489],{"class":111},[101,93645,303],{"class":160},[101,93647,489],{"class":111},[101,93649,886],{"class":160},[101,93651,489],{"class":111},[101,93653,404],{"class":160},[101,93655,4644],{"class":111},[101,93657,93658],{"class":103,"line":1166},[101,93659,93660],{"class":111},"np.unique(a)\n",[101,93662,93663],{"class":103,"line":1181},[101,93664,93544],{"class":170},[101,93666,93667],{"class":103,"line":1187},[101,93668,93669],{"class":170},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[10,93671,93672],{},"升序形式排序",[43,93674,93676],{"id":93675},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[92,93678,93680],{"className":30367,"code":93679,"language":30369,"meta":20,"style":20},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[98,93681,93682,93730,93735],{"__ignoreMap":20},[101,93683,93684,93686,93688,93690,93692,93694,93696,93698,93700,93702,93704,93706,93708,93710,93712,93714,93716,93718,93720,93722,93724,93726,93728],{"class":103,"line":104},[101,93685,14],{"class":111},[101,93687,157],{"class":107},[101,93689,93004],{"class":111},[101,93691,329],{"class":160},[101,93693,489],{"class":111},[101,93695,189],{"class":160},[101,93697,489],{"class":111},[101,93699,183],{"class":160},[101,93701,489],{"class":111},[101,93703,609],{"class":160},[101,93705,489],{"class":111},[101,93707,183],{"class":160},[101,93709,489],{"class":111},[101,93711,557],{"class":160},[101,93713,489],{"class":111},[101,93715,309],{"class":160},[101,93717,489],{"class":111},[101,93719,303],{"class":160},[101,93721,489],{"class":111},[101,93723,886],{"class":160},[101,93725,489],{"class":111},[101,93727,404],{"class":160},[101,93729,4644],{"class":111},[101,93731,93732],{"class":103,"line":21},[101,93733,93734],{"class":170},"#返回数组中非零元素的索引\n",[101,93736,93737],{"class":103,"line":1166},[101,93738,93739],{"class":111},"np.nonzero(a)\n",[43,93741,93743],{"id":93742},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[92,93745,93747],{"className":30367,"code":93746,"language":30369,"meta":20,"style":20},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[98,93748,93749,93797,93802],{"__ignoreMap":20},[101,93750,93751,93753,93755,93757,93759,93761,93763,93765,93767,93769,93771,93773,93775,93777,93779,93781,93783,93785,93787,93789,93791,93793,93795],{"class":103,"line":104},[101,93752,14],{"class":111},[101,93754,157],{"class":107},[101,93756,93004],{"class":111},[101,93758,329],{"class":160},[101,93760,489],{"class":111},[101,93762,189],{"class":160},[101,93764,489],{"class":111},[101,93766,183],{"class":160},[101,93768,489],{"class":111},[101,93770,609],{"class":160},[101,93772,489],{"class":111},[101,93774,183],{"class":160},[101,93776,489],{"class":111},[101,93778,557],{"class":160},[101,93780,489],{"class":111},[101,93782,309],{"class":160},[101,93784,489],{"class":111},[101,93786,303],{"class":160},[101,93788,489],{"class":111},[101,93790,886],{"class":160},[101,93792,489],{"class":111},[101,93794,404],{"class":160},[101,93796,4644],{"class":111},[101,93798,93799],{"class":103,"line":21},[101,93800,93801],{"class":170},"#计算一组数中最大值与最小值的差，可指定轴\n",[101,93803,93804],{"class":103,"line":1166},[101,93805,93806],{"class":111},"np.ptp(a)\n",[5114,93808,93809],{},"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":20,"searchDepth":21,"depth":21,"links":93811},[93812,93813,93814,93815,93816,93817,93818,93819,93820,93821,93822],{"id":93074,"depth":21,"text":93075},{"id":93117,"depth":21,"text":93118},{"id":93225,"depth":21,"text":93226},{"id":93319,"depth":21,"text":93320},{"id":93359,"depth":21,"text":93360},{"id":93432,"depth":21,"text":93433},{"id":93500,"depth":21,"text":93501},{"id":93552,"depth":21,"text":93553},{"id":93596,"depth":21,"text":93597},{"id":93675,"depth":21,"text":93676},{"id":93742,"depth":21,"text":93743},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93060,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93829,"title":93830,"body":93831,"description":23365,"extension":24,"meta":94486,"navigation":27,"path":94487,"seo":94488,"stem":94489,"__hash__":94490},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93832,"toc":94474},[93833,93836,93840,93843,94059,94063,94066,94275,94279,94345,94350,94354,94357,94360,94398,94402,94405,94410,94414,94417,94420,94425,94429,94432,94436,94439,94442,94447,94451,94454,94457,94462,94466,94471],[39,93834,93830],{"id":93835},"_12其他常用函数",[43,93837,93839],{"id":93838},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[10,93841,93842],{},"将数组的数据按照行列复制扩展",[92,93844,93846],{"className":30367,"code":93845,"language":30369,"meta":20,"style":20},"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",[98,93847,93848,93864,93873,93877,93882,93887,93900,93904,93909,93914,93919,93923,93928,93952,93964,93968,93972,93977,93982,93987,93992,93996,94009,94013,94017,94022,94027,94032,94037,94042,94046,94050,94055],{"__ignoreMap":20},[101,93849,93850,93852,93854,93856,93858,93860,93862],{"class":103,"line":104},[101,93851,14],{"class":111},[101,93853,157],{"class":107},[101,93855,92982],{"class":111},[101,93857,329],{"class":160},[101,93859,489],{"class":111},[101,93861,430],{"class":160},[101,93863,118],{"class":111},[101,93865,93866,93869,93871],{"class":103,"line":21},[101,93867,93868],{"class":111},"np.tile(a,",[101,93870,189],{"class":160},[101,93872,118],{"class":111},[101,93874,93875],{"class":103,"line":1166},[101,93876,93544],{"class":170},[101,93878,93879],{"class":103,"line":1181},[101,93880,93881],{"class":170},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[101,93883,93884],{"class":103,"line":1187},[101,93885,93886],{"class":170},"#行复制两次，列复制三次\n",[101,93888,93889,93892,93894,93896,93898],{"class":103,"line":1201},[101,93890,93891],{"class":111},"np.tile(a,(",[101,93893,189],{"class":160},[101,93895,489],{"class":111},[101,93897,183],{"class":160},[101,93899,30486],{"class":111},[101,93901,93902],{"class":103,"line":1207},[101,93903,93544],{"class":170},[101,93905,93906],{"class":103,"line":1298},[101,93907,93908],{"class":216},"'''\n",[101,93910,93911],{"class":103,"line":1304},[101,93912,93913],{"class":216},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[101,93915,93916],{"class":103,"line":1316},[101,93917,93918],{"class":216},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[101,93920,93921],{"class":103,"line":1599},[101,93922,93908],{"class":216},[101,93924,93925],{"class":103,"line":1604},[101,93926,93927],{"class":170},"#创建二维数组\n",[101,93929,93930,93932,93934,93936,93938,93940,93942,93944,93946,93948,93950],{"class":103,"line":1610},[101,93931,93286],{"class":111},[101,93933,157],{"class":107},[101,93935,92982],{"class":111},[101,93937,329],{"class":160},[101,93939,489],{"class":111},[101,93941,634],{"class":160},[101,93943,92987],{"class":111},[101,93945,404],{"class":160},[101,93947,489],{"class":111},[101,93949,183],{"class":160},[101,93951,118],{"class":111},[101,93953,93954,93957,93959,93961],{"class":103,"line":1615},[101,93955,93956],{"class":111},"np.tile(aa,",[101,93958,189],{"class":160},[101,93960,540],{"class":111},[101,93962,93963],{"class":170},"#一个数的时候就是行\n",[101,93965,93966],{"class":103,"line":1629},[101,93967,93544],{"class":170},[101,93969,93970],{"class":103,"line":1634},[101,93971,93908],{"class":216},[101,93973,93974],{"class":103,"line":1640},[101,93975,93976],{"class":216},"array([[ 1,  2,  3,  1,  2,  3],\n",[101,93978,93979],{"class":103,"line":1661},[101,93980,93981],{"class":216},"       [ 4,  5,  6,  4,  5,  6],\n",[101,93983,93984],{"class":103,"line":1666},[101,93985,93986],{"class":216},"       [ 7,  8,  9,  7,  8,  9],\n",[101,93988,93989],{"class":103,"line":1680},[101,93990,93991],{"class":216},"       [10, 11, 12, 10, 11, 12]])\n",[101,93993,93994],{"class":103,"line":1685},[101,93995,93908],{"class":216},[101,93997,93998,94001,94003,94005,94007],{"class":103,"line":1714},[101,93999,94000],{"class":111},"np.tile(aa,(",[101,94002,189],{"class":160},[101,94004,489],{"class":111},[101,94006,183],{"class":160},[101,94008,30486],{"class":111},[101,94010,94011],{"class":103,"line":1719},[101,94012,93544],{"class":170},[101,94014,94015],{"class":103,"line":1736},[101,94016,93908],{"class":216},[101,94018,94019],{"class":103,"line":1741},[101,94020,94021],{"class":216},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[101,94023,94024],{"class":103,"line":1746},[101,94025,94026],{"class":216},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[101,94028,94029],{"class":103,"line":1751},[101,94030,94031],{"class":216},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[101,94033,94034],{"class":103,"line":1765},[101,94035,94036],{"class":216},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[101,94038,94039],{"class":103,"line":1770},[101,94040,94041],{"class":216},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[101,94043,94044],{"class":103,"line":2564},[101,94045,94026],{"class":216},[101,94047,94048],{"class":103,"line":2578},[101,94049,94031],{"class":216},[101,94051,94052],{"class":103,"line":2586},[101,94053,94054],{"class":216},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[101,94056,94057],{"class":103,"line":2591},[101,94058,93908],{"class":216},[43,94060,94062],{"id":94061},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[10,94064,94065],{},"repeat()将数组中的每个元素重复若干次",[92,94067,94069],{"className":30367,"code":94068,"language":30369,"meta":20,"style":20},"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",[98,94070,94071,94087,94096,94100,94105,94129,94134,94143,94147,94152,94156,94161,94177,94181,94185,94190,94195,94200,94204,94209,94213,94218,94223,94227,94243,94247,94251,94256,94261,94266,94271],{"__ignoreMap":20},[101,94072,94073,94075,94077,94079,94081,94083,94085],{"class":103,"line":104},[101,94074,14],{"class":111},[101,94076,157],{"class":107},[101,94078,92982],{"class":111},[101,94080,329],{"class":160},[101,94082,489],{"class":111},[101,94084,430],{"class":160},[101,94086,118],{"class":111},[101,94088,94089,94092,94094],{"class":103,"line":21},[101,94090,94091],{"class":111},"np.repeat(a,",[101,94093,183],{"class":160},[101,94095,118],{"class":111},[101,94097,94098],{"class":103,"line":1166},[101,94099,93544],{"class":170},[101,94101,94102],{"class":103,"line":1181},[101,94103,94104],{"class":170},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[101,94106,94107,94109,94111,94113,94115,94117,94119,94121,94123,94125,94127],{"class":103,"line":1187},[101,94108,93286],{"class":111},[101,94110,157],{"class":107},[101,94112,92982],{"class":111},[101,94114,329],{"class":160},[101,94116,489],{"class":111},[101,94118,634],{"class":160},[101,94120,92987],{"class":111},[101,94122,404],{"class":160},[101,94124,489],{"class":111},[101,94126,183],{"class":160},[101,94128,118],{"class":111},[101,94130,94131],{"class":103,"line":1201},[101,94132,94133],{"class":170},"#这个重复之后二维变成一维\n",[101,94135,94136,94139,94141],{"class":103,"line":1207},[101,94137,94138],{"class":111},"np.repeat(aa,",[101,94140,189],{"class":160},[101,94142,118],{"class":111},[101,94144,94145],{"class":103,"line":1298},[101,94146,93908],{"class":216},[101,94148,94149],{"class":103,"line":1304},[101,94150,94151],{"class":216},"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",[101,94153,94154],{"class":103,"line":1316},[101,94155,93908],{"class":216},[101,94157,94158],{"class":103,"line":1599},[101,94159,94160],{"class":170},"#指定axis\n",[101,94162,94163,94165,94167,94169,94171,94173,94175],{"class":103,"line":1604},[101,94164,94138],{"class":111},[101,94166,189],{"class":160},[101,94168,489],{"class":111},[101,94170,47503],{"class":5204},[101,94172,157],{"class":107},[101,94174,303],{"class":160},[101,94176,118],{"class":111},[101,94178,94179],{"class":103,"line":1610},[101,94180,93544],{"class":170},[101,94182,94183],{"class":103,"line":1615},[101,94184,93908],{"class":216},[101,94186,94187],{"class":103,"line":1629},[101,94188,94189],{"class":216},"array([[ 1,  2,  3],\n",[101,94191,94192],{"class":103,"line":1634},[101,94193,94194],{"class":216},"       [ 1,  2,  3],\n",[101,94196,94197],{"class":103,"line":1640},[101,94198,94199],{"class":216},"       [ 4,  5,  6],\n",[101,94201,94202],{"class":103,"line":1661},[101,94203,94199],{"class":216},[101,94205,94206],{"class":103,"line":1666},[101,94207,94208],{"class":216},"       [ 7,  8,  9],\n",[101,94210,94211],{"class":103,"line":1680},[101,94212,94208],{"class":216},[101,94214,94215],{"class":103,"line":1685},[101,94216,94217],{"class":216},"       [10, 11, 12],\n",[101,94219,94220],{"class":103,"line":1714},[101,94221,94222],{"class":216},"       [10, 11, 12]])\n",[101,94224,94225],{"class":103,"line":1719},[101,94226,93908],{"class":216},[101,94228,94229,94231,94233,94235,94237,94239,94241],{"class":103,"line":1736},[101,94230,94138],{"class":111},[101,94232,189],{"class":160},[101,94234,489],{"class":111},[101,94236,47503],{"class":5204},[101,94238,157],{"class":107},[101,94240,329],{"class":160},[101,94242,118],{"class":111},[101,94244,94245],{"class":103,"line":1741},[101,94246,93544],{"class":170},[101,94248,94249],{"class":103,"line":1746},[101,94250,93908],{"class":216},[101,94252,94253],{"class":103,"line":1751},[101,94254,94255],{"class":216},"array([[ 1,  1,  2,  2,  3,  3],\n",[101,94257,94258],{"class":103,"line":1765},[101,94259,94260],{"class":216},"       [ 4,  4,  5,  5,  6,  6],\n",[101,94262,94263],{"class":103,"line":1770},[101,94264,94265],{"class":216},"       [ 7,  7,  8,  8,  9,  9],\n",[101,94267,94268],{"class":103,"line":2564},[101,94269,94270],{"class":216},"       [10, 10, 11, 11, 12, 12]])\n",[101,94272,94273],{"class":103,"line":2578},[101,94274,93908],{"class":216},[43,94276,94278],{"id":94277},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[92,94280,94282],{"className":30367,"code":94281,"language":30369,"meta":20,"style":20},"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",[98,94283,94284,94300,94305,94317,94321,94326,94336,94340],{"__ignoreMap":20},[101,94285,94286,94288,94290,94292,94294,94296,94298],{"class":103,"line":104},[101,94287,14],{"class":111},[101,94289,157],{"class":107},[101,94291,92982],{"class":111},[101,94293,329],{"class":160},[101,94295,489],{"class":111},[101,94297,430],{"class":160},[101,94299,118],{"class":111},[101,94301,94302],{"class":103,"line":21},[101,94303,94304],{"class":170},"#array([，2，3，4])\n",[101,94306,94307,94310,94312,94314],{"class":103,"line":1166},[101,94308,94309],{"class":111},"np.roll(a,",[101,94311,189],{"class":160},[101,94313,540],{"class":111},[101,94315,94316],{"class":170},"#传正数向后调多少位，传负数向前调多少位\n",[101,94318,94319],{"class":103,"line":1181},[101,94320,93544],{"class":170},[101,94322,94323],{"class":103,"line":1187},[101,94324,94325],{"class":170},"#array([3, 4, 1, 2])\n",[101,94327,94328,94330,94332,94334],{"class":103,"line":1201},[101,94329,94309],{"class":111},[101,94331,643],{"class":107},[101,94333,329],{"class":160},[101,94335,118],{"class":111},[101,94337,94338],{"class":103,"line":1207},[101,94339,93544],{"class":170},[101,94341,94342],{"class":103,"line":1298},[101,94343,94344],{"class":170},"#array([2, 3, 4, 1])\n",[10,94346,94347],{},[1449,94348],{"alt":20,"src":94349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[43,94351,94353],{"id":94352},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[10,94355,94356],{},"resize()重新调整数组的大小",[10,94358,94359],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[92,94361,94363],{"className":30367,"code":94362,"language":30369,"meta":20,"style":20},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[98,94364,94365,94370,94383],{"__ignoreMap":20},[101,94366,94367],{"class":103,"line":104},[101,94368,94369],{"class":170},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[101,94371,94372,94375,94377,94379,94381],{"class":103,"line":21},[101,94373,94374],{"class":111},"np.resize(aa,(",[101,94376,189],{"class":160},[101,94378,489],{"class":111},[101,94380,455],{"class":160},[101,94382,30486],{"class":111},[101,94384,94385,94387,94389,94391,94393,94395],{"class":103,"line":1166},[101,94386,94374],{"class":111},[101,94388,189],{"class":160},[101,94390,489],{"class":111},[101,94392,531],{"class":160},[101,94394,82760],{"class":111},[101,94396,94397],{"class":170},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[43,94399,94401],{"id":94400},"_125-placeput函数","12.5 place()\u002Fput()函数",[10,94403,94404],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[10,94406,94407],{},[1449,94408],{"alt":20,"src":94409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[43,94411,94413],{"id":94412},"_126-保存加载文件","12.6 保存加载文件",[10,94415,94416],{},"savetxt():将数据保存到txt文件中",[10,94418,94419],{},"loadtxt():从文件加载数据",[10,94421,94422],{},[1449,94423],{"alt":20,"src":94424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[43,94426,94428],{"id":94427},"_127-genfromtxt函数","12.7 genfromtxt()函数",[10,94430,94431],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[43,94433,94435],{"id":94434},"_128-anyall函数","12.8 any()\u002Fall()函数",[10,94437,94438],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[10,94440,94441],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[10,94443,94444],{},[1449,94445],{"alt":20,"src":94446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[43,94448,94450],{"id":94449},"_129-where语句","12.9 where语句",[10,94452,94453],{},"np.where(条件,x,y)",[10,94455,94456],{},"如果条件为True,对应值为x,否则对应值为y",[10,94458,94459],{},[1449,94460],{"alt":20,"src":94461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[43,94463,94465],{"id":94464},"_1210-dot矩阵","12.10 dot()矩阵",[10,94467,94468],{},[1449,94469],{"alt":20,"src":94470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5114,94472,94473],{},"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":20,"searchDepth":21,"depth":21,"links":94475},[94476,94477,94478,94479,94480,94481,94482,94483,94484,94485],{"id":93838,"depth":21,"text":93839},{"id":94061,"depth":21,"text":94062},{"id":94277,"depth":21,"text":94278},{"id":94352,"depth":21,"text":94353},{"id":94400,"depth":21,"text":94401},{"id":94412,"depth":21,"text":94413},{"id":94427,"depth":21,"text":94428},{"id":94434,"depth":21,"text":94435},{"id":94449,"depth":21,"text":94450},{"id":94464,"depth":21,"text":94465},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93830,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94492,"title":94493,"body":94494,"description":23365,"extension":24,"meta":94847,"navigation":27,"path":94848,"seo":94849,"stem":94850,"__hash__":94851},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94495,"toc":94845},[94496,94499,94502,94505,94508,94511,94576,94578,94842],[39,94497,94493],{"id":94498},"_13数组排序",[10,94500,94501],{},"排序主要用到的方法是np.sort和np.argsort",[10,94503,94504],{},"其中np.sort()对数组直接排序",[10,94506,94507],{},"而np.argsort()是返回排序后的原始索引",[10,94509,94510],{},"①一维数组",[92,94512,94514],{"className":30367,"code":94513,"language":30369,"meta":20,"style":20},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[98,94515,94516,94520,94560,94568],{"__ignoreMap":20},[101,94517,94518],{"class":103,"line":104},[101,94519,93085],{"class":170},[101,94521,94522,94524,94526,94528,94530,94532,94534,94536,94538,94540,94542,94544,94546,94548,94550,94552,94554,94556,94558],{"class":103,"line":21},[101,94523,14],{"class":111},[101,94525,157],{"class":107},[101,94527,93004],{"class":111},[101,94529,183],{"class":160},[101,94531,489],{"class":111},[101,94533,609],{"class":160},[101,94535,489],{"class":111},[101,94537,506],{"class":160},[101,94539,489],{"class":111},[101,94541,886],{"class":160},[101,94543,489],{"class":111},[101,94545,390],{"class":160},[101,94547,489],{"class":111},[101,94549,1004],{"class":160},[101,94551,489],{"class":111},[101,94553,455],{"class":160},[101,94555,489],{"class":111},[101,94557,557],{"class":160},[101,94559,4644],{"class":111},[101,94561,94562,94565],{"class":103,"line":1166},[101,94563,94564],{"class":111},"np.sort(a)",[101,94566,94567],{"class":170},"#升序排序\n",[101,94569,94570,94573],{"class":103,"line":1181},[101,94571,94572],{"class":111},"np.argsort(a)",[101,94574,94575],{"class":170},"#按照元素大小来索引排序\n",[10,94577,93271],{},[92,94579,94581],{"className":30367,"code":94580,"language":30369,"meta":20,"style":20},"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",[98,94582,94583,94595,94621,94626,94630,94635,94640,94645,94650,94654,94662,94666,94671,94676,94681,94686,94690,94695,94708,94712,94717,94722,94727,94732,94736,94741,94753,94757,94761,94765,94769,94773,94777,94782,94797,94802,94811,94816,94820,94824,94829,94833,94838],{"__ignoreMap":20},[101,94584,94585,94588,94590,94592],{"class":103,"line":104},[101,94586,94587],{"class":111},"np.random.seed(",[101,94589,303],{"class":160},[101,94591,540],{"class":111},[101,94593,94594],{"class":170},"#保证每次值一样\n",[101,94596,94597,94599,94601,94603,94605,94607,94609,94611,94613,94615,94617,94619],{"class":103,"line":21},[101,94598,93286],{"class":111},[101,94600,157],{"class":107},[101,94602,93094],{"class":111},[101,94604,422],{"class":160},[101,94606,489],{"class":111},[101,94608,31485],{"class":5204},[101,94610,157],{"class":107},[101,94612,112],{"class":111},[101,94614,404],{"class":160},[101,94616,489],{"class":111},[101,94618,455],{"class":160},[101,94620,30486],{"class":111},[101,94622,94623],{"class":103,"line":1166},[101,94624,94625],{"class":170},"#原数组：\n",[101,94627,94628],{"class":103,"line":1181},[101,94629,93908],{"class":216},[101,94631,94632],{"class":103,"line":1187},[101,94633,94634],{"class":216},"array([[44, 47, 64, 67, 67,  9],\n",[101,94636,94637],{"class":103,"line":1201},[101,94638,94639],{"class":216},"       [83, 21, 36, 87, 70, 88],\n",[101,94641,94642],{"class":103,"line":1207},[101,94643,94644],{"class":216},"       [88, 12, 58, 65, 39, 87],\n",[101,94646,94647],{"class":103,"line":1298},[101,94648,94649],{"class":216},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[101,94651,94652],{"class":103,"line":1304},[101,94653,93908],{"class":216},[101,94655,94656,94659],{"class":103,"line":1316},[101,94657,94658],{"class":111},"np.sort(aa)",[101,94660,94661],{"class":170},"#每行进行了排序\n",[101,94663,94664],{"class":103,"line":1599},[101,94665,93908],{"class":216},[101,94667,94668],{"class":103,"line":1604},[101,94669,94670],{"class":216},"array([[ 9, 44, 47, 64, 67, 67],\n",[101,94672,94673],{"class":103,"line":1610},[101,94674,94675],{"class":216},"       [21, 36, 70, 83, 87, 88],\n",[101,94677,94678],{"class":103,"line":1615},[101,94679,94680],{"class":216},"       [12, 39, 58, 65, 87, 88],\n",[101,94682,94683],{"class":103,"line":1629},[101,94684,94685],{"class":216},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[101,94687,94688],{"class":103,"line":1634},[101,94689,93908],{"class":216},[101,94691,94692],{"class":103,"line":1640},[101,94693,94694],{"class":170},"#axis=0时\n",[101,94696,94697,94700,94702,94704,94706],{"class":103,"line":1661},[101,94698,94699],{"class":111},"np.sort(aa,",[101,94701,47503],{"class":5204},[101,94703,157],{"class":107},[101,94705,303],{"class":160},[101,94707,118],{"class":111},[101,94709,94710],{"class":103,"line":1666},[101,94711,93908],{"class":216},[101,94713,94714],{"class":103,"line":1680},[101,94715,94716],{"class":216},"array([[44, 12, 36, 37, 25,  9],\n",[101,94718,94719],{"class":103,"line":1685},[101,94720,94721],{"class":216},"       [46, 21, 58, 65, 39, 77],\n",[101,94723,94724],{"class":103,"line":1714},[101,94725,94726],{"class":216},"       [83, 47, 64, 67, 67, 87],\n",[101,94728,94729],{"class":103,"line":1719},[101,94730,94731],{"class":216},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[101,94733,94734],{"class":103,"line":1736},[101,94735,93908],{"class":216},[101,94737,94738],{"class":103,"line":1741},[101,94739,94740],{"class":170},"#axis=1时,为默认值\n",[101,94742,94743,94745,94747,94749,94751],{"class":103,"line":1746},[101,94744,94699],{"class":111},[101,94746,47503],{"class":5204},[101,94748,157],{"class":107},[101,94750,329],{"class":160},[101,94752,118],{"class":111},[101,94754,94755],{"class":103,"line":1751},[101,94756,93908],{"class":216},[101,94758,94759],{"class":103,"line":1765},[101,94760,94670],{"class":216},[101,94762,94763],{"class":103,"line":1770},[101,94764,94675],{"class":216},[101,94766,94767],{"class":103,"line":2564},[101,94768,94680],{"class":216},[101,94770,94771],{"class":103,"line":2578},[101,94772,94685],{"class":216},[101,94774,94775],{"class":103,"line":2586},[101,94776,93908],{"class":216},[101,94778,94779],{"class":103,"line":2591},[101,94780,94781],{"class":170},"#按最后一列排序\n",[101,94783,94784,94786,94788,94791,94793,94795],{"class":103,"line":2597},[101,94785,374],{"class":111},[101,94787,157],{"class":107},[101,94789,94790],{"class":111},"aa[:,",[101,94792,643],{"class":107},[101,94794,329],{"class":160},[101,94796,33235],{"class":111},[101,94798,94799],{"class":103,"line":2603},[101,94800,94801],{"class":170},"#获取最后一列排好序的索引\n",[101,94803,94804,94806,94808],{"class":103,"line":2608},[101,94805,74047],{"class":111},[101,94807,157],{"class":107},[101,94809,94810],{"class":111},"np.argsort(b)\n",[101,94812,94813],{"class":103,"line":7936},[101,94814,94815],{"class":111},"aa[index]\n",[101,94817,94818],{"class":103,"line":7960},[101,94819,93908],{"class":216},[101,94821,94822],{"class":103,"line":7965},[101,94823,94634],{"class":216},[101,94825,94826],{"class":103,"line":7971},[101,94827,94828],{"class":216},"       [46, 88, 81, 37, 25, 77],\n",[101,94830,94831],{"class":103,"line":7998},[101,94832,94644],{"class":216},[101,94834,94835],{"class":103,"line":8003},[101,94836,94837],{"class":216},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[101,94839,94840],{"class":103,"line":8009},[101,94841,93908],{"class":216},[5114,94843,94844],{},"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":20,"searchDepth":21,"depth":21,"links":94846},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94493,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94853,"title":94854,"body":94855,"description":23365,"extension":24,"meta":94885,"navigation":27,"path":94886,"seo":94887,"stem":94888,"__hash__":94889},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94856,"toc":94883},[94857,94860,94863,94866,94869,94872,94875,94878],[39,94858,94854],{"id":94859},"_14广播机制",[10,94861,94862],{},"广播的规则：",[10,94864,94865],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[10,94867,94868],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[10,94870,94871],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[10,94873,94874],{},"3.如果没有维度形状为1，则会引发异常",[10,94876,94877],{},"也就是只有维度或者个数为1才可以进行广播操作",[10,94879,94880],{},[1449,94881],{"alt":20,"src":94882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":20,"searchDepth":21,"depth":21,"links":94884},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94854,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94891,"title":94892,"body":94893,"description":23365,"extension":24,"meta":94991,"navigation":27,"path":94992,"seo":94993,"stem":94994,"__hash__":94995},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94894,"toc":94989},[94895,94898,94901,94986],[39,94896,94892],{"id":94897},"_15比较掩码",[10,94899,94900],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[92,94902,94904],{"className":30367,"code":94903,"language":30369,"meta":20,"style":20},"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",[98,94905,94906,94952,94963,94977,94981],{"__ignoreMap":20},[101,94907,94908,94910,94912,94915,94917,94919,94921,94923,94925,94927,94929,94931,94933,94935,94937,94939,94941,94943,94945,94947,94949],{"class":103,"line":104},[101,94909,14],{"class":111},[101,94911,157],{"class":107},[101,94913,94914],{"class":111},"np.array([[",[101,94916,329],{"class":160},[101,94918,489],{"class":111},[101,94920,189],{"class":160},[101,94922,489],{"class":111},[101,94924,183],{"class":160},[101,94926,48019],{"class":111},[101,94928,583],{"class":160},[101,94930,489],{"class":111},[101,94932,609],{"class":160},[101,94934,489],{"class":111},[101,94936,634],{"class":160},[101,94938,48019],{"class":111},[101,94940,836],{"class":160},[101,94942,489],{"class":111},[101,94944,861],{"class":160},[101,94946,489],{"class":111},[101,94948,886],{"class":160},[101,94950,94951],{"class":111},"]])\n",[101,94953,94954,94956,94958,94960],{"class":103,"line":21},[101,94955,14],{"class":111},[101,94957,1021],{"class":107},[101,94959,811],{"class":160},[101,94961,94962],{"class":170},"#结果是一个由True,False组成的数组\n",[101,94964,94965,94968,94970,94972,94974],{"class":103,"line":1166},[101,94966,94967],{"class":111},"a[a",[101,94969,1021],{"class":107},[101,94971,811],{"class":160},[101,94973,1051],{"class":111},[101,94975,94976],{"class":170},"#小于20的元素会存到这个数组中\n",[101,94978,94979],{"class":103,"line":1181},[101,94980,93544],{"class":170},[101,94982,94983],{"class":103,"line":1187},[101,94984,94985],{"class":170},"#array([ 1,  2,  3, 11, 12, 13])\n",[5114,94987,94988],{},"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":20,"searchDepth":21,"depth":21,"links":94990},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94892,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":94997,"title":94998,"body":94999,"description":23365,"extension":24,"meta":95091,"navigation":27,"path":95092,"seo":95093,"stem":95094,"__hash__":95095},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95000,"toc":95089},[95001,95004,95007,95010,95013,95016,95081,95086],[39,95002,94998],{"id":95003},"_16魔法命令time",[10,95005,95006],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[10,95008,95009],{},"%:行模式",[10,95011,95012],{},"%%:单元格模式",[10,95014,95015],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[92,95017,95019],{"className":30367,"code":95018,"language":30369,"meta":20,"style":20},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[98,95020,95021,95026,95033,95038,95047,95060,95064,95072],{"__ignoreMap":20},[101,95022,95023],{"class":103,"line":104},[101,95024,95025],{"class":170},"#程序执行时间\n",[101,95027,95028,95030],{"class":103,"line":21},[101,95029,30381],{"class":107},[101,95031,95032],{"class":111}," time \n",[101,95034,95035],{"class":103,"line":1166},[101,95036,95037],{"class":170},"#获取时间\n",[101,95039,95040,95043,95045],{"class":103,"line":1181},[101,95041,95042],{"class":111},"start",[101,95044,157],{"class":107},[101,95046,32407],{"class":111},[101,95048,95049,95052,95055,95057],{"class":103,"line":1187},[101,95050,95051],{"class":111},"time.sleep(",[101,95053,95054],{"class":160},"0.4",[101,95056,540],{"class":111},[101,95058,95059],{"class":170},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[101,95061,95062],{"class":103,"line":1201},[101,95063,95037],{"class":170},[101,95065,95066,95068,95070],{"class":103,"line":1207},[101,95067,45790],{"class":111},[101,95069,157],{"class":107},[101,95071,32407],{"class":111},[101,95073,95074,95076,95078],{"class":103,"line":1298},[101,95075,45790],{"class":111},[101,95077,643],{"class":107},[101,95079,95080],{"class":111},"start\n",[10,95082,95083],{},[1449,95084],{"alt":20,"src":95085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5114,95087,95088],{},"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":20,"searchDepth":21,"depth":21,"links":95090},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":94998,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95097,"title":95098,"body":95099,"description":23365,"extension":24,"meta":95134,"navigation":27,"path":95135,"seo":95136,"stem":95137,"__hash__":95138},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95100,"toc":95132},[95101,95104,95107,95110,95113,95116,95119,95122,95127],[39,95102,95098],{"id":95103},"_17魔法命令timeit",[10,95105,95106],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[10,95108,95109],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[10,95111,95112],{},"单元格模式：",[10,95114,95115],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[10,95117,95118],{},"初始化语句执行次数由轮数来决定",[10,95120,95121],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[10,95123,95124],{},[1449,95125],{"alt":20,"src":95126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[10,95128,95129],{},[1449,95130],{"alt":20,"src":95131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":20,"searchDepth":21,"depth":21,"links":95133},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95098,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95140,"title":95141,"body":95142,"description":23365,"extension":24,"meta":95160,"navigation":27,"path":95161,"seo":95162,"stem":95163,"__hash__":95164},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95143,"toc":95158},[95144,95147,95150,95153],[39,95145,95141],{"id":95146},"_18魔法命令writefile和run",[10,95148,95149],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[10,95151,95152],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[10,95154,95155],{},[1449,95156],{"alt":20,"src":95157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":20,"searchDepth":21,"depth":21,"links":95159},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95141,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95166,"title":95167,"body":95168,"description":23365,"extension":24,"meta":95221,"navigation":27,"path":95222,"seo":95223,"stem":95224,"__hash__":95225},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95169,"toc":95219},[95170,95173,95176,95178,95181,95184,95189,95192,95195,95198,95201,95204,95207,95210,95213,95216],[39,95171,95167],{"id":95172},"_19魔法命令memit",[10,95174,95175],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[10,95177,24588],{},[10,95179,95180],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[10,95182,95183],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[10,95185,95186],{},[1449,95187],{"alt":20,"src":95188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[10,95190,95191],{},"补充：",[10,95193,95194],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[10,95196,95197],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[10,95199,95200],{},"解决方法：",[10,95202,95203],{},"1.cmd",[10,95205,95206],{},"2.依次输入以下代码：",[10,95208,95209],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[10,95211,95212],{},"pip install --upgrade ipython",[10,95214,95215],{},"#升级 memory_profiler 和 setuptools",[10,95217,95218],{},"pip install --upgrade memory_profiler setuptools",{"title":20,"searchDepth":21,"depth":21,"links":95220},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95167,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95227,"title":95228,"body":95229,"description":23365,"extension":24,"meta":96875,"navigation":27,"path":96876,"seo":96877,"stem":96878,"__hash__":96879},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95230,"toc":96845},[95231,95234,95238,95242,95303,95306,95311,95315,95320,95325,95330,95335,95338,95343,95347,95351,95384,95387,95390,95393,95445,95448,95484,95487,95529,95533,95554,95556,95593,95595,95600,95602,95607,95611,95614,95642,95646,95650,95703,95707,95799,95803,95807,95810,95815,95819,95844,95849,95853,95856,95859,95862,95865,95868,95871,95874,95886,95890,95894,95897,95929,95932,95955,95958,95984,95987,96013,96016,96050,96053,96115,96119,96122,96126,96129,96155,96158,96161,96166,96169,96238,96240,96245,96306,96309,96320,96326,96331,96335,96338,96351,96355,96370,96372,96395,96397,96423,96426,96429,96432,96480,96482,96487,96491,96495,96522,96526,96553,96556,96561,96566,96656,96660,96718,96723,96726,96729,96771,96775,96831,96836,96839,96842],[39,95232,95228],{"id":95233},"_2创建数组",[43,95235,95237],{"id":95236},"_21-array函数创建数组","2.1 array()函数创建数组",[72,95239,95241],{"id":95240},"_221-函数语句","2.2.1 函数语句",[92,95243,95245],{"className":30367,"code":95244,"language":30369,"meta":20,"style":20},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[98,95246,95247],{"__ignoreMap":20},[101,95248,95249,95252,95255,95257,95259,95261,95263,95265,95268,95270,95273,95275,95278,95280,95282,95284,95287,95289,95292,95294,95297,95299,95301],{"class":103,"line":104},[101,95250,95251],{"class":111},"numpy.array(",[101,95253,95254],{"class":160},"object",[101,95256,12423],{"class":111},[101,95258,93480],{"class":5204},[101,95260,13552],{"class":107},[101,95262,38922],{"class":160},[101,95264,12423],{"class":111},[101,95266,95267],{"class":5204},"copy",[101,95269,13552],{"class":107},[101,95271,95272],{"class":160}," True",[101,95274,12423],{"class":111},[101,95276,95277],{"class":5204},"order",[101,95279,13552],{"class":107},[101,95281,38922],{"class":160},[101,95283,12423],{"class":111},[101,95285,95286],{"class":5204},"subok",[101,95288,13552],{"class":107},[101,95290,95291],{"class":160}," False",[101,95293,12423],{"class":111},[101,95295,95296],{"class":5204},"ndmin",[101,95298,13552],{"class":107},[101,95300,4080],{"class":160},[101,95302,118],{"class":111},[10,95304,95305],{},"参数：",[10,95307,95308],{},[1449,95309],{"alt":20,"src":95310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[72,95312,95314],{"id":95313},"_222-实例","2.2.2 实例",[10,95316,95317],{},[1449,95318],{"alt":20,"src":95319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[10,95321,95322],{},[1449,95323],{"alt":20,"src":95324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[10,95326,95327],{},[1449,95328],{"alt":20,"src":95329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[10,95331,95332],{},[1449,95333],{"alt":20,"src":95334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[10,95336,95337],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[10,95339,95340],{},[1449,95341],{"alt":20,"src":95342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[43,95344,95346],{"id":95345},"_22-随机数创建数组","2.2 随机数创建数组",[72,95348,95350],{"id":95349},"_221-random语句","2.2.1 random语句",[92,95352,95354],{"className":30367,"code":95353,"language":30369,"meta":20,"style":20},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[98,95355,95356,95361,95366,95374,95379],{"__ignoreMap":20},[101,95357,95358],{"class":103,"line":104},[101,95359,95360],{"class":170},"#random.random()\n",[101,95362,95363],{"class":103,"line":21},[101,95364,95365],{"class":170},"#确定随机种子,就是每次运行结果是相同的\n",[101,95367,95368,95370,95372],{"class":103,"line":1166},[101,95369,94587],{"class":111},[101,95371,303],{"class":160},[101,95373,118],{"class":111},[101,95375,95376],{"class":103,"line":1181},[101,95377,95378],{"class":111},"np.random.random()\n",[101,95380,95381],{"class":103,"line":1187},[101,95382,95383],{"class":170},"#生成一个随机的数目\n",[10,95385,95386],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[10,95388,95389],{},"可以指定数组形状 size",[10,95391,95392],{},"①生成一维数组",[92,95394,95396],{"className":30367,"code":95395,"language":30369,"meta":20,"style":20},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[98,95397,95398,95403,95416,95421,95437],{"__ignoreMap":20},[101,95399,95400],{"class":103,"line":104},[101,95401,95402],{"class":170},"#random.random(size())\n",[101,95404,95405,95408,95410,95412,95414],{"class":103,"line":21},[101,95406,95407],{"class":111},"np.random.random(",[101,95409,31485],{"class":5204},[101,95411,157],{"class":107},[101,95413,430],{"class":160},[101,95415,118],{"class":111},[101,95417,95418],{"class":103,"line":1166},[101,95419,95420],{"class":170},"#生成一位的五个元素\n",[101,95422,95423,95425,95427,95429,95431,95433,95435],{"class":103,"line":1181},[101,95424,14],{"class":111},[101,95426,157],{"class":107},[101,95428,95407],{"class":111},[101,95430,31485],{"class":5204},[101,95432,157],{"class":107},[101,95434,404],{"class":160},[101,95436,118],{"class":111},[101,95438,95439,95442],{"class":103,"line":1187},[101,95440,95441],{"class":111},"a.shape ",[101,95443,95444],{"class":170},"#输出数组形状\n",[10,95446,95447],{},"②生成二维数组",[92,95449,95451],{"className":30367,"code":95450,"language":30369,"meta":20,"style":20},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[98,95452,95453,95457,95479],{"__ignoreMap":20},[101,95454,95455],{"class":103,"line":104},[101,95456,93281],{"class":170},[101,95458,95459,95461,95463,95465,95467,95469,95471,95473,95475,95477],{"class":103,"line":21},[101,95460,93286],{"class":111},[101,95462,157],{"class":107},[101,95464,95407],{"class":111},[101,95466,31485],{"class":5204},[101,95468,157],{"class":107},[101,95470,112],{"class":111},[101,95472,404],{"class":160},[101,95474,489],{"class":111},[101,95476,430],{"class":160},[101,95478,30486],{"class":111},[101,95480,95481],{"class":103,"line":1166},[101,95482,95483],{"class":170},"#生成四行五列的数组\n",[10,95485,95486],{},"③生成三维数组",[92,95488,95490],{"className":30367,"code":95489,"language":30369,"meta":20,"style":20},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[98,95491,95492,95497,95524],{"__ignoreMap":20},[101,95493,95494],{"class":103,"line":104},[101,95495,95496],{"class":170},"#三维数组\n",[101,95498,95499,95502,95504,95506,95508,95510,95512,95514,95516,95518,95520,95522],{"class":103,"line":21},[101,95500,95501],{"class":111},"aaa",[101,95503,157],{"class":107},[101,95505,95407],{"class":111},[101,95507,31485],{"class":5204},[101,95509,157],{"class":107},[101,95511,112],{"class":111},[101,95513,189],{"class":160},[101,95515,489],{"class":111},[101,95517,183],{"class":160},[101,95519,489],{"class":111},[101,95521,404],{"class":160},[101,95523,30486],{"class":111},[101,95525,95526],{"class":103,"line":1166},[101,95527,95528],{"class":111},"aaa.shape\n",[72,95530,95532],{"id":95531},"_222-randint语句","2.2.2 randint语句",[92,95534,95536],{"className":30367,"code":95535,"language":30369,"meta":20,"style":20},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[98,95537,95538,95543],{"__ignoreMap":20},[101,95539,95540],{"class":103,"line":104},[101,95541,95542],{"class":170},"#生成随机的整数 random.randint(low,high,size)\n",[101,95544,95545,95547,95549,95551],{"class":103,"line":21},[101,95546,93094],{"class":111},[101,95548,430],{"class":160},[101,95550,13702],{"class":111},[101,95552,95553],{"class":170},"#0~5中的随机一个数\n",[10,95555,95392],{},[92,95557,95559],{"className":30367,"code":95558,"language":30369,"meta":20,"style":20},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[98,95560,95561,95566,95588],{"__ignoreMap":20},[101,95562,95563],{"class":103,"line":104},[101,95564,95565],{"class":170},"#一维\n",[101,95567,95568,95570,95572,95574,95576,95578,95580,95582,95584,95586],{"class":103,"line":21},[101,95569,93094],{"class":111},[101,95571,329],{"class":160},[101,95573,489],{"class":111},[101,95575,583],{"class":160},[101,95577,489],{"class":111},[101,95579,31485],{"class":5204},[101,95581,157],{"class":107},[101,95583,112],{"class":111},[101,95585,557],{"class":160},[101,95587,30486],{"class":111},[101,95589,95590],{"class":103,"line":1166},[101,95591,95592],{"class":170},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[10,95594,95447],{},[10,95596,95597],{},[1449,95598],{"alt":20,"src":95599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[10,95601,95486],{},[10,95603,95604],{},[1449,95605],{"alt":20,"src":95606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[72,95608,95610],{"id":95609},"_222-rand语句","2.2.2 rand语句",[10,95612,95613],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[92,95615,95617],{"className":30367,"code":95616,"language":30369,"meta":20,"style":20},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[98,95618,95619,95632,95637],{"__ignoreMap":20},[101,95620,95621,95624,95626,95628,95630],{"class":103,"line":104},[101,95622,95623],{"class":111},"np.random.rand(",[101,95625,422],{"class":160},[101,95627,489],{"class":111},[101,95629,557],{"class":160},[101,95631,118],{"class":111},[101,95633,95634],{"class":103,"line":21},[101,95635,95636],{"class":170},"#第一个参数100：行数，表示有100个样本\n",[101,95638,95639],{"class":103,"line":1166},[101,95640,95641],{"class":170},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[43,95643,95645],{"id":95644},"_23-arange创建数组","2.3 arange()创建数组",[72,95647,95649],{"id":95648},"_231-函数语句","2.3.1 函数语句",[92,95651,95653],{"className":30367,"code":95652,"language":30369,"meta":20,"style":20},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[98,95654,95655,95669,95674,95679,95684,95689,95694,95699],{"__ignoreMap":20},[101,95656,95657,95660,95662,95664,95667],{"class":103,"line":104},[101,95658,95659],{"class":111},"numpy.arange([start,] stop[, step], ",[101,95661,93480],{"class":5204},[101,95663,157],{"class":107},[101,95665,95666],{"class":160},"None",[101,95668,118],{"class":111},[101,95670,95671],{"class":103,"line":21},[101,95672,95673],{"class":170},"#参数\n",[101,95675,95676],{"class":103,"line":1166},[101,95677,95678],{"class":216},"\"\"\"\n",[101,95680,95681],{"class":103,"line":1181},[101,95682,95683],{"class":216},"start:起始值，可选，默认从 0 开始。\n",[101,95685,95686],{"class":103,"line":1187},[101,95687,95688],{"class":216},"stop:结束值（不包含该值）。\n",[101,95690,95691],{"class":103,"line":1201},[101,95692,95693],{"class":216},"step:步长，可选，默认是 1。可以为浮点数。\n",[101,95695,95696],{"class":103,"line":1207},[101,95697,95698],{"class":216},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[101,95700,95701],{"class":103,"line":1298},[101,95702,95678],{"class":216},[72,95704,95706],{"id":95705},"_232-实例","2.3.2 实例",[92,95708,95710],{"className":30367,"code":95709,"language":30369,"meta":20,"style":20},"#创建一维数组\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",[98,95711,95712,95716,95740,95745,95750,95754,95777,95781,95785,95790,95795],{"__ignoreMap":20},[101,95713,95714],{"class":103,"line":104},[101,95715,93085],{"class":170},[101,95717,95718,95720,95722,95724,95726,95728,95730,95732,95734,95736,95738],{"class":103,"line":21},[101,95719,92982],{"class":111},[101,95721,329],{"class":160},[101,95723,489],{"class":111},[101,95725,836],{"class":160},[101,95727,489],{"class":111},[101,95729,329],{"class":160},[101,95731,489],{"class":111},[101,95733,93480],{"class":5204},[101,95735,157],{"class":107},[101,95737,115],{"class":160},[101,95739,118],{"class":111},[101,95741,95742],{"class":103,"line":1166},[101,95743,95744],{"class":170},"#输出结果：\n",[101,95746,95747],{"class":103,"line":1181},[101,95748,95749],{"class":170},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[101,95751,95752],{"class":103,"line":1187},[101,95753,93927],{"class":170},[101,95755,95756,95759,95761,95763,95765,95768,95770,95772,95774],{"class":103,"line":1201},[101,95757,95758],{"class":111},"np.array([np.arange(",[101,95760,329],{"class":160},[101,95762,489],{"class":111},[101,95764,404],{"class":160},[101,95766,95767],{"class":111},"),np.arange(",[101,95769,404],{"class":160},[101,95771,489],{"class":111},[101,95773,480],{"class":160},[101,95775,95776],{"class":111},")])\n",[101,95778,95779],{"class":103,"line":1207},[101,95780,93544],{"class":170},[101,95782,95783],{"class":103,"line":1298},[101,95784,95678],{"class":216},[101,95786,95787],{"class":103,"line":1304},[101,95788,95789],{"class":216},"array([[1, 2, 3],\n",[101,95791,95792],{"class":103,"line":1316},[101,95793,95794],{"class":216},"       [4, 5, 6]])\n",[101,95796,95797],{"class":103,"line":1599},[101,95798,95678],{"class":216},[43,95800,95802],{"id":95801},"_24-生态分布","2.4 生态分布",[72,95804,95806],{"id":95805},"_241-标准正态分布","2.4.1 标准正态分布",[10,95808,95809],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[10,95811,95812],{},[1449,95813],{"alt":20,"src":95814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[72,95816,95818],{"id":95817},"_242-常规正态分布","2.4.2 常规正态分布",[92,95820,95822],{"className":30367,"code":95821,"language":30369,"meta":20,"style":20},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[98,95823,95824,95829,95834,95839],{"__ignoreMap":20},[101,95825,95826],{"class":103,"line":104},[101,95827,95828],{"class":111},"random.normal(loc,scale,size)也可以生成正态分布\n",[101,95830,95831],{"class":103,"line":21},[101,95832,95833],{"class":170},"#loc:期望\n",[101,95835,95836],{"class":103,"line":1166},[101,95837,95838],{"class":170},"#scale:方差\n",[101,95840,95841],{"class":103,"line":1181},[101,95842,95843],{"class":170},"#size:用于确定是几维的数列\n",[10,95845,95846],{},[1449,95847],{"alt":20,"src":95848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[43,95850,95852],{"id":95851},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[10,95854,95855],{},"ndim:秩，维度个数",[10,95857,95858],{},"size:数组元素的个数",[10,95860,95861],{},"shape:数组的形状",[10,95863,95864],{},"dtype:数组元素的类型",[10,95866,95867],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[10,95869,95870],{},"他们都是属性，通过数组.属性的形式来确定",[10,95872,95873],{},"如果需要输出多个可以通过以下方式：",[92,95875,95877],{"className":30367,"code":95876,"language":30369,"meta":20,"style":20},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[98,95878,95879],{"__ignoreMap":20},[101,95880,95881,95883],{"class":103,"line":104},[101,95882,30404],{"class":160},[101,95884,95885],{"class":111},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[43,95887,95889],{"id":95888},"_26-其他方式创建数组","2.6 其他方式创建数组",[72,95891,95893],{"id":95892},"_261-zeros创建数组","2.6.1 zeros()创建数组",[10,95895,95896],{},"①创建一维数组",[92,95898,95900],{"className":30367,"code":95899,"language":30369,"meta":20,"style":20},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[98,95901,95902,95911,95915,95920,95925],{"__ignoreMap":20},[101,95903,95904,95907,95909],{"class":103,"line":104},[101,95905,95906],{"class":111},"np.zeros(",[101,95908,557],{"class":160},[101,95910,118],{"class":111},[101,95912,95913],{"class":103,"line":21},[101,95914,95678],{"class":216},[101,95916,95917],{"class":103,"line":1166},[101,95918,95919],{"class":216},"输出结果：\n",[101,95921,95922],{"class":103,"line":1181},[101,95923,95924],{"class":216},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[101,95926,95927],{"class":103,"line":1187},[101,95928,95678],{"class":216},[10,95930,95931],{},"上方代码等价于：",[92,95933,95935],{"className":30367,"code":95934,"language":30369,"meta":20,"style":20},"np.zeros(shape=(10))#创建10个元素的0数组\n",[98,95936,95937],{"__ignoreMap":20},[101,95938,95939,95941,95944,95946,95948,95950,95952],{"class":103,"line":104},[101,95940,95906],{"class":111},[101,95942,95943],{"class":5204},"shape",[101,95945,157],{"class":107},[101,95947,112],{"class":111},[101,95949,557],{"class":160},[101,95951,82760],{"class":111},[101,95953,95954],{"class":170},"#创建10个元素的0数组\n",[10,95956,95957],{},"也可以指定类型",[92,95959,95961],{"className":30367,"code":95960,"language":30369,"meta":20,"style":20},"#指定类型\nnp.zeros(5,dtype=int)\n",[98,95962,95963,95968],{"__ignoreMap":20},[101,95964,95965],{"class":103,"line":104},[101,95966,95967],{"class":170},"#指定类型\n",[101,95969,95970,95972,95974,95976,95978,95980,95982],{"class":103,"line":21},[101,95971,95906],{"class":111},[101,95973,430],{"class":160},[101,95975,489],{"class":111},[101,95977,93480],{"class":5204},[101,95979,157],{"class":107},[101,95981,115],{"class":160},[101,95983,118],{"class":111},[10,95985,95986],{},"②创建二维数组",[92,95988,95990],{"className":30367,"code":95989,"language":30369,"meta":20,"style":20},"np.zeros((3,4),dtype=int)\n",[98,95991,95992],{"__ignoreMap":20},[101,95993,95994,95997,95999,96001,96003,96005,96007,96009,96011],{"class":103,"line":104},[101,95995,95996],{"class":111},"np.zeros((",[101,95998,183],{"class":160},[101,96000,489],{"class":111},[101,96002,404],{"class":160},[101,96004,42245],{"class":111},[101,96006,93480],{"class":5204},[101,96008,157],{"class":107},[101,96010,115],{"class":160},[101,96012,118],{"class":111},[10,96014,96015],{},"③创建三维数组",[92,96017,96019],{"className":30367,"code":96018,"language":30369,"meta":20,"style":20},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[98,96020,96021,96026],{"__ignoreMap":20},[101,96022,96023],{"class":103,"line":104},[101,96024,96025],{"class":170},"#创建三维数组\n",[101,96027,96028,96030,96032,96034,96036,96038,96040,96042,96044,96046,96048],{"class":103,"line":21},[101,96029,95996],{"class":111},[101,96031,183],{"class":160},[101,96033,489],{"class":111},[101,96035,404],{"class":160},[101,96037,489],{"class":111},[101,96039,430],{"class":160},[101,96041,42245],{"class":111},[101,96043,93480],{"class":5204},[101,96045,157],{"class":107},[101,96047,115],{"class":160},[101,96049,118],{"class":111},[10,96051,96052],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[92,96054,96056],{"className":30367,"code":96055,"language":30369,"meta":20,"style":20},"#使用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",[98,96057,96058,96063,96078,96083,96088,96110],{"__ignoreMap":20},[101,96059,96060],{"class":103,"line":104},[101,96061,96062],{"class":170},"#使用zeros_like将创建的一维数组变成全0的数组\n",[101,96064,96065,96067,96069,96071,96073,96075],{"class":103,"line":21},[101,96066,14],{"class":111},[101,96068,157],{"class":107},[101,96070,92982],{"class":111},[101,96072,404],{"class":160},[101,96074,540],{"class":111},[101,96076,96077],{"class":170},"#这个得到的结果：一维数组0，1，2，3\n",[101,96079,96080],{"class":103,"line":1166},[101,96081,96082],{"class":111},"np.zeros_like(a)\n",[101,96084,96085],{"class":103,"line":1181},[101,96086,96087],{"class":170},"#使用zeros_like将创建的二维数组变成全0的数组\n",[101,96089,96090,96092,96094,96096,96098,96100,96102,96104,96106,96108],{"class":103,"line":1187},[101,96091,93286],{"class":111},[101,96093,157],{"class":107},[101,96095,95407],{"class":111},[101,96097,31485],{"class":5204},[101,96099,157],{"class":107},[101,96101,112],{"class":111},[101,96103,404],{"class":160},[101,96105,489],{"class":111},[101,96107,430],{"class":160},[101,96109,30486],{"class":111},[101,96111,96112],{"class":103,"line":1201},[101,96113,96114],{"class":111},"np.zeros_like(aa)\n",[72,96116,96118],{"id":96117},"_262-ones创建数组","2.6.2 ones()创建数组",[10,96120,96121],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[72,96123,96125],{"id":96124},"_263-empty创建数组","2.6.3 empty()创建数组",[10,96127,96128],{},"①empty()用法",[92,96130,96132],{"className":30367,"code":96131,"language":30369,"meta":20,"style":20},"numpy.empty(shape,dtype=float,order='c')\n",[98,96133,96134],{"__ignoreMap":20},[101,96135,96136,96139,96141,96143,96145,96147,96149,96151,96153],{"class":103,"line":104},[101,96137,96138],{"class":111},"numpy.empty(shape,",[101,96140,93480],{"class":5204},[101,96142,157],{"class":107},[101,96144,151],{"class":160},[101,96146,489],{"class":111},[101,96148,95277],{"class":5204},[101,96150,157],{"class":107},[101,96152,76017],{"class":216},[101,96154,118],{"class":111},[10,96156,96157],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[10,96159,96160],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[10,96162,96163],{},[1449,96164],{"alt":20,"src":96165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[10,96167,96168],{},"②empty()用法",[92,96170,96172],{"className":30367,"code":96171,"language":30369,"meta":20,"style":20},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[98,96173,96174,96195,96207,96228,96233],{"__ignoreMap":20},[101,96175,96176,96178,96180,96183,96185,96187,96189,96191,96193],{"class":103,"line":104},[101,96177,956],{"class":111},[101,96179,157],{"class":107},[101,96181,96182],{"class":111},"np.empty(",[101,96184,557],{"class":160},[101,96186,489],{"class":111},[101,96188,93480],{"class":5204},[101,96190,157],{"class":107},[101,96192,115],{"class":160},[101,96194,118],{"class":111},[101,96196,96197,96199,96201,96203,96205],{"class":103,"line":21},[101,96198,931],{"class":111},[101,96200,157],{"class":107},[101,96202,92982],{"class":111},[101,96204,430],{"class":160},[101,96206,118],{"class":111},[101,96208,96209,96212,96214,96217,96219,96221,96224,96226],{"class":103,"line":1166},[101,96210,96211],{"class":111},"np.add(",[101,96213,189],{"class":160},[101,96215,96216],{"class":111},",x,",[101,96218,93034],{"class":5204},[101,96220,157],{"class":107},[101,96222,96223],{"class":111},"y[:",[101,96225,430],{"class":160},[101,96227,4644],{"class":111},[101,96229,96230],{"class":103,"line":1181},[101,96231,96232],{"class":170},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[101,96234,96235],{"class":103,"line":1187},[101,96236,96237],{"class":111},"y\n",[10,96239,11502],{},[10,96241,96242],{},[1449,96243],{"alt":20,"src":96244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[92,96246,96248],{"className":30367,"code":96247,"language":30369,"meta":20,"style":20},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[98,96249,96250,96266,96286,96301],{"__ignoreMap":20},[101,96251,96252,96254,96256,96258,96260,96262,96264],{"class":103,"line":104},[101,96253,931],{"class":111},[101,96255,157],{"class":107},[101,96257,92982],{"class":111},[101,96259,329],{"class":160},[101,96261,489],{"class":111},[101,96263,455],{"class":160},[101,96265,118],{"class":111},[101,96267,96268,96270,96272,96274,96276,96278,96280,96282,96284],{"class":103,"line":21},[101,96269,956],{"class":111},[101,96271,157],{"class":107},[101,96273,96182],{"class":111},[101,96275,430],{"class":160},[101,96277,489],{"class":111},[101,96279,93480],{"class":5204},[101,96281,157],{"class":107},[101,96283,115],{"class":160},[101,96285,118],{"class":111},[101,96287,96288,96291,96293,96295,96297,96299],{"class":103,"line":1166},[101,96289,96290],{"class":111},"np.add(x,",[101,96292,189],{"class":160},[101,96294,489],{"class":111},[101,96296,93034],{"class":5204},[101,96298,157],{"class":107},[101,96300,93429],{"class":111},[101,96302,96303],{"class":103,"line":1181},[101,96304,96305],{"class":170},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[10,96307,96308],{},"③empty_like()",[10,96310,96311],{},[261,96312,96313,96314,96319],{},"创建一个",[261,96315,96316],{},[261,96317,96318],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[10,96321,96322,96325],{},[98,96323,96324],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[10,96327,96328],{},[1449,96329],{"alt":20,"src":96330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[72,96332,96334],{"id":96333},"_264-用法","2.6.4 ？？用法",[10,96336,96337],{},"当想查看一个函数的参数时，可以通过？？来实现",[92,96339,96341],{"className":30367,"code":96340,"language":30369,"meta":20,"style":20},"np.full??\n",[98,96342,96343],{"__ignoreMap":20},[101,96344,96345,96348],{"class":103,"line":104},[101,96346,96347],{"class":111},"np.full",[101,96349,96350],{"class":77392},"??\n",[72,96352,96354],{"id":96353},"_265-full创建数组","2.6.5 full()创建数组",[92,96356,96358],{"className":30367,"code":96357,"language":30369,"meta":20,"style":20},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[98,96359,96360,96365],{"__ignoreMap":20},[101,96361,96362],{"class":103,"line":104},[101,96363,96364],{"class":111},"full(shape,fill_value)\n",[101,96366,96367],{"class":103,"line":21},[101,96368,96369],{"class":111},"创建全为某个指定值的数组\n",[10,96371,94510],{},[92,96373,96375],{"className":30367,"code":96374,"language":30369,"meta":20,"style":20},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[98,96376,96377,96382],{"__ignoreMap":20},[101,96378,96379],{"class":103,"line":104},[101,96380,96381],{"class":170},"#创建一个一维数组,以20进行填充\n",[101,96383,96384,96387,96389,96391,96393],{"class":103,"line":21},[101,96385,96386],{"class":111},"np.full(",[101,96388,557],{"class":160},[101,96390,489],{"class":111},[101,96392,811],{"class":160},[101,96394,118],{"class":111},[10,96396,93271],{},[92,96398,96400],{"className":30367,"code":96399,"language":30369,"meta":20,"style":20},"#创建二维数组\nnp.full((3,5),11)\n",[98,96401,96402,96406],{"__ignoreMap":20},[101,96403,96404],{"class":103,"line":104},[101,96405,93927],{"class":170},[101,96407,96408,96411,96413,96415,96417,96419,96421],{"class":103,"line":21},[101,96409,96410],{"class":111},"np.full((",[101,96412,183],{"class":160},[101,96414,489],{"class":111},[101,96416,430],{"class":160},[101,96418,42245],{"class":111},[101,96420,583],{"class":160},[101,96422,118],{"class":111},[10,96424,96425],{},"③full_like用法",[10,96427,96428],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[10,96430,96431],{},"这里是指定填充而已",[92,96433,96435],{"className":30367,"code":96434,"language":30369,"meta":20,"style":20},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[98,96436,96437,96442,96466,96471],{"__ignoreMap":20},[101,96438,96439],{"class":103,"line":104},[101,96440,96441],{"class":170},"#创建一个指定形状数组\n",[101,96443,96444,96446,96448,96450,96452,96454,96456,96458,96460,96462,96464],{"class":103,"line":21},[101,96445,14],{"class":111},[101,96447,157],{"class":107},[101,96449,92982],{"class":111},[101,96451,329],{"class":160},[101,96453,489],{"class":111},[101,96455,436],{"class":160},[101,96457,92987],{"class":111},[101,96459,404],{"class":160},[101,96461,489],{"class":111},[101,96463,531],{"class":160},[101,96465,118],{"class":111},[101,96467,96468],{"class":103,"line":1166},[101,96469,96470],{"class":170},"#进行指定填充\n",[101,96472,96473,96476,96478],{"class":103,"line":1181},[101,96474,96475],{"class":111},"np.full_like(a,",[101,96477,557],{"class":160},[101,96479,118],{"class":111},[10,96481,11502],{},[10,96483,96484],{},[1449,96485],{"alt":20,"src":96486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[72,96488,96490],{"id":96489},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21986,96492,96494],{"id":96493},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[92,96496,96498],{"className":30367,"code":96497,"language":30369,"meta":20,"style":20},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[98,96499,96500,96517],{"__ignoreMap":20},[101,96501,96502,96505,96507,96509,96511,96513,96515],{"class":103,"line":104},[101,96503,96504],{"class":111},"np.eye(",[101,96506,404],{"class":160},[101,96508,489],{"class":111},[101,96510,93480],{"class":5204},[101,96512,157],{"class":107},[101,96514,115],{"class":160},[101,96516,118],{"class":111},[101,96518,96519],{"class":103,"line":21},[101,96520,96521],{"class":170},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21986,96523,96525],{"id":96524},"_2662-法2identity","2.6.6.2 法2：identity()",[92,96527,96529],{"className":30367,"code":96528,"language":30369,"meta":20,"style":20},"#identity()\nnp.identity(5,dtype=int)\n",[98,96530,96531,96536],{"__ignoreMap":20},[101,96532,96533],{"class":103,"line":104},[101,96534,96535],{"class":170},"#identity()\n",[101,96537,96538,96541,96543,96545,96547,96549,96551],{"class":103,"line":21},[101,96539,96540],{"class":111},"np.identity(",[101,96542,430],{"class":160},[101,96544,489],{"class":111},[101,96546,93480],{"class":5204},[101,96548,157],{"class":107},[101,96550,115],{"class":160},[101,96552,118],{"class":111},[10,96554,96555],{},"两个函数是有区别的",[10,96557,96558],{},[1449,96559],{"alt":20,"src":96560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[10,96562,96563],{},[1449,96564],{"alt":20,"src":96565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[92,96567,96569],{"className":30367,"code":96568,"language":30369,"meta":20,"style":20},"# 创建一个 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",[98,96570,96571,96576,96588,96593,96598,96603,96608,96612,96617,96637,96641,96646,96651],{"__ignoreMap":20},[101,96572,96573],{"class":103,"line":104},[101,96574,96575],{"class":170},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[101,96577,96578,96580,96582,96584,96586],{"class":103,"line":21},[101,96579,96504],{"class":111},[101,96581,183],{"class":160},[101,96583,12423],{"class":111},[101,96585,404],{"class":160},[101,96587,118],{"class":111},[101,96589,96590],{"class":103,"line":1166},[101,96591,96592],{"class":170},"# 输出:\n",[101,96594,96595],{"class":103,"line":1181},[101,96596,96597],{"class":170},"# [[1. 0. 0. 0.]\n",[101,96599,96600],{"class":103,"line":1187},[101,96601,96602],{"class":170},"#  [0. 1. 0. 0.]\n",[101,96604,96605],{"class":103,"line":1201},[101,96606,96607],{"class":170},"#  [0. 0. 1. 0.]]\n",[101,96609,96610],{"class":103,"line":1207},[101,96611,2387],{"emptyLinePlaceholder":27},[101,96613,96614],{"class":103,"line":1298},[101,96615,96616],{"class":170},"# 对角线向上偏移1\n",[101,96618,96619,96621,96623,96625,96627,96629,96631,96633,96635],{"class":103,"line":1304},[101,96620,96504],{"class":111},[101,96622,183],{"class":160},[101,96624,12423],{"class":111},[101,96626,404],{"class":160},[101,96628,12423],{"class":111},[101,96630,604],{"class":5204},[101,96632,157],{"class":107},[101,96634,329],{"class":160},[101,96636,118],{"class":111},[101,96638,96639],{"class":103,"line":1316},[101,96640,96592],{"class":170},[101,96642,96643],{"class":103,"line":1599},[101,96644,96645],{"class":170},"# [[0. 1. 0. 0.]\n",[101,96647,96648],{"class":103,"line":1604},[101,96649,96650],{"class":170},"#  [0. 0. 1. 0.]\n",[101,96652,96653],{"class":103,"line":1610},[101,96654,96655],{"class":170},"#  [0. 0. 0. 1.]]\n",[72,96657,96659],{"id":96658},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[92,96661,96663],{"className":30367,"code":96662,"language":30369,"meta":20,"style":20},"#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",[98,96664,96665,96670,96674,96679,96684,96689,96694,96699,96704,96709,96714],{"__ignoreMap":20},[101,96666,96667],{"class":103,"line":104},[101,96668,96669],{"class":170},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[101,96671,96672],{"class":103,"line":21},[101,96673,95678],{"class":216},[101,96675,96676],{"class":103,"line":1166},[101,96677,96678],{"class":216},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[101,96680,96681],{"class":103,"line":1181},[101,96682,96683],{"class":216},"参数介绍：\n",[101,96685,96686],{"class":103,"line":1187},[101,96687,96688],{"class":216},"start：序列的起始值\n",[101,96690,96691],{"class":103,"line":1201},[101,96692,96693],{"class":216},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[101,96695,96696],{"class":103,"line":1207},[101,96697,96698],{"class":216},"num：要生长的等步长的样本数量，默认为50\n",[101,96700,96701],{"class":103,"line":1298},[101,96702,96703],{"class":216},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[101,96705,96706],{"class":103,"line":1304},[101,96707,96708],{"class":216},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[101,96710,96711],{"class":103,"line":1316},[101,96712,96713],{"class":216},"dtype：ndarry的数据类型\n",[101,96715,96716],{"class":103,"line":1599},[101,96717,95678],{"class":216},[10,96719,96720],{},[1449,96721],{"alt":20,"src":96722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[10,96724,96725],{},"这里num=是可以省略的",[10,96727,96728],{},"也就是下方两行代码结果是一模一样的",[92,96730,96732],{"className":30367,"code":96731,"language":30369,"meta":20,"style":20},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[98,96733,96734,96751],{"__ignoreMap":20},[101,96735,96736,96739,96741,96743,96745,96747,96749],{"class":103,"line":104},[101,96737,96738],{"class":111},"np.linspace(",[101,96740,329],{"class":160},[101,96742,489],{"class":111},[101,96744,430],{"class":160},[101,96746,489],{"class":111},[101,96748,430],{"class":160},[101,96750,118],{"class":111},[101,96752,96753,96755,96757,96759,96761,96763,96765,96767,96769],{"class":103,"line":21},[101,96754,96738],{"class":111},[101,96756,329],{"class":160},[101,96758,489],{"class":111},[101,96760,430],{"class":160},[101,96762,489],{"class":111},[101,96764,1652],{"class":5204},[101,96766,157],{"class":107},[101,96768,430],{"class":160},[101,96770,118],{"class":111},[72,96772,96774],{"id":96773},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[92,96776,96778],{"className":30367,"code":96777,"language":30369,"meta":20,"style":20},"#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",[98,96779,96780,96785,96789,96794,96799,96804,96809,96813,96818,96823,96827],{"__ignoreMap":20},[101,96781,96782],{"class":103,"line":104},[101,96783,96784],{"class":170},"#logspace函数用于创建一个等比数列，格式如下：\n",[101,96786,96787],{"class":103,"line":21},[101,96788,95678],{"class":216},[101,96790,96791],{"class":103,"line":1166},[101,96792,96793],{"class":216},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[101,96795,96796],{"class":103,"line":1181},[101,96797,96798],{"class":216},"参数为：\n",[101,96800,96801],{"class":103,"line":1187},[101,96802,96803],{"class":216},"start:序列的起始位置为：base**start\n",[101,96805,96806],{"class":103,"line":1201},[101,96807,96808],{"class":216},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[101,96810,96811],{"class":103,"line":1207},[101,96812,96698],{"class":216},[101,96814,96815],{"class":103,"line":1298},[101,96816,96817],{"class":216},"endpoint：是否包含 stop 这个值，默认是 True\n",[101,96819,96820],{"class":103,"line":1304},[101,96821,96822],{"class":216},"base：对数的底数，默认是 10（常见对数）\n",[101,96824,96825],{"class":103,"line":1316},[101,96826,96713],{"class":216},[101,96828,96829],{"class":103,"line":1599},[101,96830,95678],{"class":216},[10,96832,96833],{},[1449,96834],{"alt":20,"src":96835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[10,96837,96838],{},"logspace()函数中的num参数也是可以不写num=的",[10,96840,96841],{},"endpoint是不可以省略的",[5114,96843,96844],{},"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":20,"searchDepth":21,"depth":21,"links":96846},[96847,96851,96856,96860,96864,96865],{"id":95236,"depth":21,"text":95237,"children":96848},[96849,96850],{"id":95240,"depth":1166,"text":95241},{"id":95313,"depth":1166,"text":95314},{"id":95345,"depth":21,"text":95346,"children":96852},[96853,96854,96855],{"id":95349,"depth":1166,"text":95350},{"id":95531,"depth":1166,"text":95532},{"id":95609,"depth":1166,"text":95610},{"id":95644,"depth":21,"text":95645,"children":96857},[96858,96859],{"id":95648,"depth":1166,"text":95649},{"id":95705,"depth":1166,"text":95706},{"id":95801,"depth":21,"text":95802,"children":96861},[96862,96863],{"id":95805,"depth":1166,"text":95806},{"id":95817,"depth":1166,"text":95818},{"id":95851,"depth":21,"text":95852},{"id":95888,"depth":21,"text":95889,"children":96866},[96867,96868,96869,96870,96871,96872,96873,96874],{"id":95892,"depth":1166,"text":95893},{"id":96117,"depth":1166,"text":96118},{"id":96124,"depth":1166,"text":96125},{"id":96333,"depth":1166,"text":96334},{"id":96353,"depth":1166,"text":96354},{"id":96489,"depth":1166,"text":96490},{"id":96658,"depth":1166,"text":96659},{"id":96773,"depth":1166,"text":96774},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95228,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96881,"title":96882,"body":96883,"description":23365,"extension":24,"meta":96976,"navigation":27,"path":96977,"seo":96978,"stem":96979,"__hash__":96980},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96884,"toc":96974},[96885,96888,96891,96894,96897,96900,96903,96906,96909,96912,96915,96918,96920,96923,96926,96931,96934,96937,96971],[39,96886,96882],{"id":96887},"_20魔法命令mprun",[10,96889,96890],{},"逐行分析数据内存的使用情况",[10,96892,96893],{},"语法格式：",[10,96895,96896],{},"%mprun -f 模块名.函数名 模块名.函数名()",[10,96898,96899],{},"分析结果列如下：",[10,96901,96902],{},"Line行号",[10,96904,96905],{},"Mem usage内存使用大小",[10,96907,96908],{},"increment内存增量",[10,96910,96911],{},"Line content代码内容",[10,96913,96914],{},"补充说明：",[10,96916,96917],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[10,96919,95183],{},[10,96921,96922],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[10,96924,96925],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[10,96927,96928],{},[1449,96929],{"alt":20,"src":96930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[10,96932,96933],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[10,96935,96936],{},"这时候需要重新加载模块",[92,96938,96940],{"className":30367,"code":96939,"language":30369,"meta":20,"style":20},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[98,96941,96942,96947,96954,96959],{"__ignoreMap":20},[101,96943,96944],{"class":103,"line":104},[101,96945,96946],{"class":170},"#重新加载模块\n",[101,96948,96949,96951],{"class":103,"line":21},[101,96950,30381],{"class":107},[101,96952,96953],{"class":111}," importlib\n",[101,96955,96956],{"class":103,"line":1166},[101,96957,96958],{"class":111},"importlib.reload(mprun_test)\n",[101,96960,96961,96963,96966,96968],{"class":103,"line":1181},[101,96962,439],{"class":107},[101,96964,96965],{"class":111},"mprun ",[101,96967,643],{"class":107},[101,96969,96970],{"class":111},"f mprun_test.fun_test mprun_test.fun_test()\n",[5114,96972,96973],{},"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":20,"searchDepth":21,"depth":21,"links":96975},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96882,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96982,"title":96983,"body":96984,"description":23365,"extension":24,"meta":97001,"navigation":27,"path":97002,"seo":97003,"stem":97004,"__hash__":97005},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":96985,"toc":96999},[96986,96989,96994],[39,96987,96983],{"id":96988},"_3一维数组的索引和切片",[10,96990,96991],{},[1449,96992],{"alt":20,"src":96993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[10,96995,96996],{},[1449,96997],{"alt":20,"src":96998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":20,"searchDepth":21,"depth":21,"links":97000},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96983,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97007,"title":97008,"body":97009,"description":23365,"extension":24,"meta":97492,"navigation":27,"path":97493,"seo":97494,"stem":97495,"__hash__":97496},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97010,"toc":97490},[97011,97014,97017,97022,97055,97058,97096,97099,97133,97136,97241,97244,97281,97284,97385,97388,97439,97442,97484,97487],[39,97012,97008],{"id":97013},"_4二维数组的索引与切片",[10,97015,97016],{},"①获取指定单个元素",[10,97018,97019],{},[1449,97020],{"alt":20,"src":97021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[92,97023,97025],{"className":30367,"code":97024,"language":30369,"meta":20,"style":20},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[98,97026,97027,97032,97037,97042],{"__ignoreMap":20},[101,97028,97029],{"class":103,"line":104},[101,97030,97031],{"class":170},"#获取元素9\n",[101,97033,97034],{"class":103,"line":21},[101,97035,97036],{"class":170},"#先获取所在行，再获取所在列\n",[101,97038,97039],{"class":103,"line":1166},[101,97040,97041],{"class":170},"#数组[行索引号，列索引号]\n",[101,97043,97044,97047,97049,97051,97053],{"class":103,"line":1181},[101,97045,97046],{"class":111},"a[",[101,97048,329],{"class":160},[101,97050,489],{"class":111},[101,97052,189],{"class":160},[101,97054,33235],{"class":111},[10,97056,97057],{},"②获取整行元素",[92,97059,97061],{"className":30367,"code":97060,"language":30369,"meta":20,"style":20},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[98,97062,97063,97068,97073,97081,97086],{"__ignoreMap":20},[101,97064,97065],{"class":103,"line":104},[101,97066,97067],{"class":170},"#获取整行 数组[行索引号]\n",[101,97069,97070],{"class":103,"line":21},[101,97071,97072],{"class":170},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[101,97074,97075,97077,97079],{"class":103,"line":1166},[101,97076,97046],{"class":111},[101,97078,189],{"class":160},[101,97080,33235],{"class":111},[101,97082,97083],{"class":103,"line":1181},[101,97084,97085],{"class":170},"#也可以负索引获取一行\n",[101,97087,97088,97090,97092,97094],{"class":103,"line":1187},[101,97089,97046],{"class":111},[101,97091,643],{"class":107},[101,97093,329],{"class":160},[101,97095,33235],{"class":111},[10,97097,97098],{},"③获取整列元素",[92,97100,97102],{"className":30367,"code":97101,"language":30369,"meta":20,"style":20},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[98,97103,97104,97109,97118,97123],{"__ignoreMap":20},[101,97105,97106],{"class":103,"line":104},[101,97107,97108],{"class":170},"#获取整列 数组名[:,列索引]\n",[101,97110,97111,97114,97116],{"class":103,"line":21},[101,97112,97113],{"class":111},"a[:,",[101,97115,189],{"class":160},[101,97117,33235],{"class":111},[101,97119,97120],{"class":103,"line":1166},[101,97121,97122],{"class":170},"#也可以负索引获取一列\n",[101,97124,97125,97127,97129,97131],{"class":103,"line":1181},[101,97126,97113],{"class":111},[101,97128,643],{"class":107},[101,97130,329],{"class":160},[101,97132,33235],{"class":111},[10,97134,97135],{},"④部分行部分列的元素",[92,97137,97139],{"className":30367,"code":97138,"language":30369,"meta":20,"style":20},"#部分行部分列 数组名[行切片，列切片]\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",[98,97140,97141,97146,97156,97160,97164,97169,97174,97178,97190,97194,97198,97203,97208,97213,97218,97222,97227],{"__ignoreMap":20},[101,97142,97143],{"class":103,"line":104},[101,97144,97145],{"class":170},"#部分行部分列 数组名[行切片，列切片]\n",[101,97147,97148,97151,97153],{"class":103,"line":21},[101,97149,97150],{"class":111},"a[:",[101,97152,189],{"class":160},[101,97154,97155],{"class":111},",:]\n",[101,97157,97158],{"class":103,"line":1166},[101,97159,93544],{"class":170},[101,97161,97162],{"class":103,"line":1181},[101,97163,93908],{"class":216},[101,97165,97166],{"class":103,"line":1187},[101,97167,97168],{"class":216},"array([[ 1,  2,  3,  4,  5,  6],\n",[101,97170,97171],{"class":103,"line":1201},[101,97172,97173],{"class":216},"       [ 7,  8,  9, 10, 11, 12]])\n",[101,97175,97176],{"class":103,"line":1207},[101,97177,93908],{"class":216},[101,97179,97180,97182,97184,97186,97188],{"class":103,"line":1298},[101,97181,97113],{"class":111},[101,97183,329],{"class":160},[101,97185,970],{"class":111},[101,97187,404],{"class":160},[101,97189,33235],{"class":111},[101,97191,97192],{"class":103,"line":1304},[101,97193,93544],{"class":170},[101,97195,97196],{"class":103,"line":1316},[101,97197,93908],{"class":216},[101,97199,97200],{"class":103,"line":1599},[101,97201,97202],{"class":216},"array([[ 2,  3,  4],\n",[101,97204,97205],{"class":103,"line":1604},[101,97206,97207],{"class":216},"       [ 8,  9, 10],\n",[101,97209,97210],{"class":103,"line":1610},[101,97211,97212],{"class":216},"       [14, 15, 16],\n",[101,97214,97215],{"class":103,"line":1615},[101,97216,97217],{"class":216},"       [20, 21, 22]])\n",[101,97219,97220],{"class":103,"line":1629},[101,97221,93908],{"class":216},[101,97223,97224],{"class":103,"line":1634},[101,97225,97226],{"class":170},"#对列行同时进行切片，使用了step参数\n",[101,97228,97229,97232,97234,97237,97239],{"class":103,"line":1640},[101,97230,97231],{"class":111},"a[::",[101,97233,189],{"class":160},[101,97235,97236],{"class":111},",::",[101,97238,189],{"class":160},[101,97240,33235],{"class":111},[10,97242,97243],{},"⑤同时获取两个元素",[92,97245,97247],{"className":30367,"code":97246,"language":30369,"meta":20,"style":20},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[98,97248,97249,97254,97259],{"__ignoreMap":20},[101,97250,97251],{"class":103,"line":104},[101,97252,97253],{"class":170},"#同时获取第三行第二列，第四行第一列\n",[101,97255,97256],{"class":103,"line":21},[101,97257,97258],{"class":170},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[101,97260,97261,97264,97266,97268,97270,97272,97274,97276,97278],{"class":103,"line":1166},[101,97262,97263],{"class":111},"a[(",[101,97265,189],{"class":160},[101,97267,489],{"class":111},[101,97269,183],{"class":160},[101,97271,42236],{"class":111},[101,97273,329],{"class":160},[101,97275,489],{"class":111},[101,97277,303],{"class":160},[101,97279,97280],{"class":111},")]\n",[10,97282,97283],{},"⑥切片，对行进行反向获取",[92,97285,97287],{"className":30367,"code":97286,"language":30369,"meta":20,"style":20},"#切片 对所有行进行反向获取\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",[98,97288,97289,97294,97304,97308,97312,97317,97322,97327,97332,97336,97341,97357,97361,97366,97371,97376,97381],{"__ignoreMap":20},[101,97290,97291],{"class":103,"line":104},[101,97292,97293],{"class":170},"#切片 对所有行进行反向获取\n",[101,97295,97296,97298,97300,97302],{"class":103,"line":21},[101,97297,97231],{"class":111},[101,97299,643],{"class":107},[101,97301,329],{"class":160},[101,97303,33235],{"class":111},[101,97305,97306],{"class":103,"line":1166},[101,97307,93544],{"class":170},[101,97309,97310],{"class":103,"line":1181},[101,97311,93908],{"class":216},[101,97313,97314],{"class":103,"line":1187},[101,97315,97316],{"class":216},"array([[19, 20, 21, 22, 23, 24],\n",[101,97318,97319],{"class":103,"line":1201},[101,97320,97321],{"class":216},"       [13, 14, 15, 16, 17, 18],\n",[101,97323,97324],{"class":103,"line":1207},[101,97325,97326],{"class":216},"       [ 7,  8,  9, 10, 11, 12],\n",[101,97328,97329],{"class":103,"line":1298},[101,97330,97331],{"class":216},"       [ 1,  2,  3,  4,  5,  6]])\n",[101,97333,97334],{"class":103,"line":1304},[101,97335,93908],{"class":216},[101,97337,97338],{"class":103,"line":1316},[101,97339,97340],{"class":170},"#对行列都进行反向切片获取\n",[101,97342,97343,97345,97347,97349,97351,97353,97355],{"class":103,"line":1599},[101,97344,97231],{"class":111},[101,97346,643],{"class":107},[101,97348,329],{"class":160},[101,97350,97236],{"class":111},[101,97352,643],{"class":107},[101,97354,329],{"class":160},[101,97356,33235],{"class":111},[101,97358,97359],{"class":103,"line":1604},[101,97360,93908],{"class":216},[101,97362,97363],{"class":103,"line":1610},[101,97364,97365],{"class":216},"array([[24, 23, 22, 21, 20, 19],\n",[101,97367,97368],{"class":103,"line":1615},[101,97369,97370],{"class":216},"       [18, 17, 16, 15, 14, 13],\n",[101,97372,97373],{"class":103,"line":1629},[101,97374,97375],{"class":216},"       [12, 11, 10,  9,  8,  7],\n",[101,97377,97378],{"class":103,"line":1634},[101,97379,97380],{"class":216},"       [ 6,  5,  4,  3,  2,  1]])\n",[101,97382,97383],{"class":103,"line":1640},[101,97384,93908],{"class":216},[10,97386,97387],{},"⑦修改元素",[92,97389,97391],{"className":30367,"code":97390,"language":30369,"meta":20,"style":20},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[98,97392,97393,97398,97416,97421],{"__ignoreMap":20},[101,97394,97395],{"class":103,"line":104},[101,97396,97397],{"class":170},"#获取前两行和前两列\n",[101,97399,97400,97403,97405,97407,97409,97412,97414],{"class":103,"line":21},[101,97401,97402],{"class":111},"sub_a",[101,97404,157],{"class":107},[101,97406,97150],{"class":111},[101,97408,189],{"class":160},[101,97410,97411],{"class":111},",:",[101,97413,189],{"class":160},[101,97415,33235],{"class":111},[101,97417,97418],{"class":103,"line":1166},[101,97419,97420],{"class":170},"#修改sub_a第一个元素的值\n",[101,97422,97423,97426,97428,97430,97432,97434,97436],{"class":103,"line":1181},[101,97424,97425],{"class":111},"sub_a[",[101,97427,303],{"class":160},[101,97429,489],{"class":111},[101,97431,303],{"class":160},[101,97433,1051],{"class":111},[101,97435,157],{"class":107},[101,97437,97438],{"class":160},"100\n",[10,97440,97441],{},"⑧数组复制copy()",[92,97443,97445],{"className":30367,"code":97444,"language":30369,"meta":20,"style":20},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[98,97446,97447,97452,97462,97467],{"__ignoreMap":20},[101,97448,97449],{"class":103,"line":104},[101,97450,97451],{"class":170},"#数组复制\n",[101,97453,97454,97457,97459],{"class":103,"line":21},[101,97455,97456],{"class":111},"copy_a",[101,97458,157],{"class":107},[101,97460,97461],{"class":111},"np.copy(sub_a)\n",[101,97463,97464],{"class":103,"line":1166},[101,97465,97466],{"class":170},"#修改copy_a后不影响原数组\n",[101,97468,97469,97472,97474,97476,97478,97480,97482],{"class":103,"line":1181},[101,97470,97471],{"class":111},"copy_a[",[101,97473,303],{"class":160},[101,97475,489],{"class":111},[101,97477,303],{"class":160},[101,97479,1051],{"class":111},[101,97481,157],{"class":107},[101,97483,97438],{"class":160},[10,97485,97486],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5114,97488,97489],{},"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":20,"searchDepth":21,"depth":21,"links":97491},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97008,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97498,"title":97499,"body":97500,"description":23365,"extension":24,"meta":97992,"navigation":27,"path":97993,"seo":97994,"stem":97995,"__hash__":97996},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97501,"toc":97984},[97502,97505,97509,97512,97515,97568,97571,97596,97599,97618,97638,97641,97657,97661,97707,97711,97753,97757,97760,97763,97766,97769,97772,97834,97894,97898,97901,97958,97962,97967,97976,97981],[39,97503,97499],{"id":97504},"_5改变数组的维度",[43,97506,97508],{"id":97507},"_51-使用reshape","5.1 使用reshape()",[10,97510,97511],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[10,97513,97514],{},"①一维数组转换为二维数组",[92,97516,97518],{"className":30367,"code":97517,"language":30369,"meta":20,"style":20},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[98,97519,97520,97536,97541,97546,97551],{"__ignoreMap":20},[101,97521,97522,97524,97526,97528,97530,97532,97534],{"class":103,"line":104},[101,97523,14],{"class":111},[101,97525,157],{"class":107},[101,97527,92982],{"class":111},[101,97529,329],{"class":160},[101,97531,489],{"class":111},[101,97533,634],{"class":160},[101,97535,118],{"class":111},[101,97537,97538],{"class":103,"line":21},[101,97539,97540],{"class":170},"#将一维数组进行转换\n",[101,97542,97543],{"class":103,"line":1166},[101,97544,97545],{"class":170},"#注意点：元素个数不可以变\n",[101,97547,97548],{"class":103,"line":1181},[101,97549,97550],{"class":170},"#转换维度要保持一致，不一致就异常！！！\n",[101,97552,97553,97555,97557,97560,97562,97564,97566],{"class":103,"line":1187},[101,97554,93286],{"class":111},[101,97556,157],{"class":107},[101,97558,97559],{"class":111},"a.reshape(",[101,97561,189],{"class":160},[101,97563,489],{"class":111},[101,97565,455],{"class":160},[101,97567,118],{"class":111},[10,97569,97570],{},"②一维数组转换为三维数组",[92,97572,97574],{"className":30367,"code":97573,"language":30369,"meta":20,"style":20},"aaa=a.reshape(2,3,2)\n",[98,97575,97576],{"__ignoreMap":20},[101,97577,97578,97580,97582,97584,97586,97588,97590,97592,97594],{"class":103,"line":104},[101,97579,95501],{"class":111},[101,97581,157],{"class":107},[101,97583,97559],{"class":111},[101,97585,189],{"class":160},[101,97587,489],{"class":111},[101,97589,183],{"class":160},[101,97591,489],{"class":111},[101,97593,189],{"class":160},[101,97595,118],{"class":111},[10,97597,97598],{},"③二维数组转化为一维数组",[92,97600,97602],{"className":30367,"code":97601,"language":30369,"meta":20,"style":20},"#知道元素个数：\naa.reshape(12)\n",[98,97603,97604,97609],{"__ignoreMap":20},[101,97605,97606],{"class":103,"line":104},[101,97607,97608],{"class":170},"#知道元素个数：\n",[101,97610,97611,97614,97616],{"class":103,"line":21},[101,97612,97613],{"class":111},"aa.reshape(",[101,97615,609],{"class":160},[101,97617,118],{"class":111},[92,97619,97621],{"className":30367,"code":97620,"language":30369,"meta":20,"style":20},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[98,97622,97623,97628],{"__ignoreMap":20},[101,97624,97625],{"class":103,"line":104},[101,97626,97627],{"class":170},"#不知道元素个数，参数传递-1\n",[101,97629,97630,97632,97634,97636],{"class":103,"line":21},[101,97631,97613],{"class":111},[101,97633,643],{"class":107},[101,97635,329],{"class":160},[101,97637,118],{"class":111},[10,97639,97640],{},"④三维数组转换为一维数组",[92,97642,97644],{"className":30367,"code":97643,"language":30369,"meta":20,"style":20},"aaa.reshape(-1)\n",[98,97645,97646],{"__ignoreMap":20},[101,97647,97648,97651,97653,97655],{"class":103,"line":104},[101,97649,97650],{"class":111},"aaa.reshape(",[101,97652,643],{"class":107},[101,97654,329],{"class":160},[101,97656,118],{"class":111},[43,97658,97660],{"id":97659},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[92,97662,97664],{"className":30367,"code":97663,"language":30369,"meta":20,"style":20},"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",[98,97665,97666,97693,97698,97702],{"__ignoreMap":20},[101,97667,97668,97670,97672,97674,97676,97678,97680,97682,97684,97686,97688,97690],{"class":103,"line":104},[101,97669,93286],{"class":111},[101,97671,157],{"class":107},[101,97673,92982],{"class":111},[101,97675,329],{"class":160},[101,97677,489],{"class":111},[101,97679,634],{"class":160},[101,97681,92987],{"class":111},[101,97683,189],{"class":160},[101,97685,489],{"class":111},[101,97687,455],{"class":160},[101,97689,540],{"class":111},[101,97691,97692],{"class":170},"#转换为2行6列的数组\n",[101,97694,97695],{"class":103,"line":21},[101,97696,97697],{"class":111},"aa.revel()\n",[101,97699,97700],{"class":103,"line":1166},[101,97701,93544],{"class":170},[101,97703,97704],{"class":103,"line":1181},[101,97705,97706],{"class":170},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[43,97708,97710],{"id":97709},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[92,97712,97714],{"className":30367,"code":97713,"language":30369,"meta":20,"style":20},"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",[98,97715,97716,97740,97745,97749],{"__ignoreMap":20},[101,97717,97718,97720,97722,97724,97726,97728,97730,97732,97734,97736,97738],{"class":103,"line":104},[101,97719,93286],{"class":111},[101,97721,157],{"class":107},[101,97723,92982],{"class":111},[101,97725,329],{"class":160},[101,97727,489],{"class":111},[101,97729,634],{"class":160},[101,97731,92987],{"class":111},[101,97733,189],{"class":160},[101,97735,489],{"class":111},[101,97737,455],{"class":160},[101,97739,118],{"class":111},[101,97741,97742],{"class":103,"line":21},[101,97743,97744],{"class":111},"aa.flatten()\n",[101,97746,97747],{"class":103,"line":1166},[101,97748,93544],{"class":170},[101,97750,97751],{"class":103,"line":1181},[101,97752,97706],{"class":170},[43,97754,97756],{"id":97755},"_54-使用resize","5.4 使用resize()",[10,97758,97759],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[10,97761,97762],{},"通过resize方法可以改变数组的维度",[10,97764,97765],{},"#resize修改数组维度",[10,97767,97768],{},"#以元组的形式指定形状",[10,97770,97771],{},"#改变的是原数组",[92,97773,97775],{"className":30367,"code":97774,"language":30369,"meta":20,"style":20},"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",[98,97776,97777,97793,97813,97826,97830],{"__ignoreMap":20},[101,97778,97779,97781,97783,97785,97787,97789,97791],{"class":103,"line":104},[101,97780,14],{"class":111},[101,97782,157],{"class":107},[101,97784,92982],{"class":111},[101,97786,329],{"class":160},[101,97788,489],{"class":111},[101,97790,634],{"class":160},[101,97792,118],{"class":111},[101,97794,97795,97798,97800,97802,97804,97806,97808,97810],{"class":103,"line":21},[101,97796,97797],{"class":111},"a.shape",[101,97799,157],{"class":107},[101,97801,112],{"class":111},[101,97803,189],{"class":160},[101,97805,489],{"class":111},[101,97807,455],{"class":160},[101,97809,540],{"class":111},[101,97811,97812],{"class":170},"#改变了原数组\n",[101,97814,97815,97817,97819,97822,97824],{"class":103,"line":1166},[101,97816,14],{"class":111},[101,97818,157],{"class":107},[101,97820,97821],{"class":111},"resize((",[101,97823,609],{"class":160},[101,97825,30486],{"class":111},[101,97827,97828],{"class":103,"line":1181},[101,97829,93544],{"class":170},[101,97831,97832],{"class":103,"line":1187},[101,97833,97706],{"class":170},[92,97835,97837],{"className":30367,"code":97836,"language":30369,"meta":20,"style":20},"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",[98,97838,97839,97852,97856,97860,97865,97870,97875,97880,97885,97890],{"__ignoreMap":20},[101,97840,97841,97844,97846,97848,97850],{"class":103,"line":104},[101,97842,97843],{"class":111},"a.resize((",[101,97845,455],{"class":160},[101,97847,489],{"class":111},[101,97849,189],{"class":160},[101,97851,30486],{"class":111},[101,97853,97854],{"class":103,"line":21},[101,97855,93544],{"class":170},[101,97857,97858],{"class":103,"line":1166},[101,97859,93908],{"class":216},[101,97861,97862],{"class":103,"line":1181},[101,97863,97864],{"class":216},"array([[ 1,  2],\n",[101,97866,97867],{"class":103,"line":1187},[101,97868,97869],{"class":216},"       [ 3,  4],\n",[101,97871,97872],{"class":103,"line":1201},[101,97873,97874],{"class":216},"       [ 5,  6],\n",[101,97876,97877],{"class":103,"line":1207},[101,97878,97879],{"class":216},"       [ 7,  8],\n",[101,97881,97882],{"class":103,"line":1298},[101,97883,97884],{"class":216},"       [ 9, 10],\n",[101,97886,97887],{"class":103,"line":1304},[101,97888,97889],{"class":216},"       [11, 12]])\n",[101,97891,97892],{"class":103,"line":1316},[101,97893,93908],{"class":216},[43,97895,97897],{"id":97896},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[10,97899,97900],{},"改变了原数组",[92,97902,97904],{"className":30367,"code":97903,"language":30369,"meta":20,"style":20},"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",[98,97905,97906,97922,97938,97942,97946,97950,97954],{"__ignoreMap":20},[101,97907,97908,97910,97912,97914,97916,97918,97920],{"class":103,"line":104},[101,97909,14],{"class":111},[101,97911,157],{"class":107},[101,97913,92982],{"class":111},[101,97915,329],{"class":160},[101,97917,489],{"class":111},[101,97919,634],{"class":160},[101,97921,118],{"class":111},[101,97923,97924,97926,97928,97930,97932,97934,97936],{"class":103,"line":21},[101,97925,97797],{"class":111},[101,97927,157],{"class":107},[101,97929,112],{"class":111},[101,97931,189],{"class":160},[101,97933,489],{"class":111},[101,97935,455],{"class":160},[101,97937,118],{"class":111},[101,97939,97940],{"class":103,"line":1166},[101,97941,93544],{"class":170},[101,97943,97944],{"class":103,"line":1181},[101,97945,93908],{"class":216},[101,97947,97948],{"class":103,"line":1187},[101,97949,97168],{"class":216},[101,97951,97952],{"class":103,"line":1201},[101,97953,97173],{"class":216},[101,97955,97956],{"class":103,"line":1207},[101,97957,93908],{"class":216},[43,97959,97961],{"id":97960},"_56-重要比较","5.6 重要比较：",[10,97963,97964],{},[1449,97965],{"alt":20,"src":97966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[10,97968,97969,97970,97972,97973,97975],{},"口诀：NumPy 函数要么用 ",[98,97971,95943],{},"，要么用 ",[98,97974,31485],{},"，创建结构用 shape，造数据用 size",[10,97977,97978],{},[1449,97979],{"alt":20,"src":97980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5114,97982,97983],{},"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":20,"searchDepth":21,"depth":21,"links":97985},[97986,97987,97988,97989,97990,97991],{"id":97507,"depth":21,"text":97508},{"id":97659,"depth":21,"text":97660},{"id":97709,"depth":21,"text":97710},{"id":97755,"depth":21,"text":97756},{"id":97896,"depth":21,"text":97897},{"id":97960,"depth":21,"text":97961},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97499,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":97998,"title":97999,"body":98000,"description":23365,"extension":24,"meta":99072,"navigation":27,"path":99073,"seo":99074,"stem":99075,"__hash__":99076},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98001,"toc":99066},[98002,98005,98009,98012,98015,98018,98083,98086,98126,98129,98211,98214,98219,98241,98243,98248,98253,98256,98259,98414,98417,98619,98623,98626,98629,98697,98699,98704,98707,98710,98790,98794,98797,98799,98872,98874,98879,98881,98961,98965,98968,98971,98974,98977,98980,98983,99063],[39,98003,97999],{"id":98004},"_6数组的拼接",[43,98006,98008],{"id":98007},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[10,98010,98011],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[10,98013,98014],{},"函数内部传两个数列构成的数列或者元组",[10,98016,98017],{},"①一维数组的拼接",[92,98019,98021],{"className":30367,"code":98020,"language":30369,"meta":20,"style":20},"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",[98,98022,98023,98043,98063,98068,98073,98078],{"__ignoreMap":20},[101,98024,98025,98027,98029,98031,98033,98035,98037,98039,98041],{"class":103,"line":104},[101,98026,14],{"class":111},[101,98028,157],{"class":107},[101,98030,93004],{"class":111},[101,98032,329],{"class":160},[101,98034,489],{"class":111},[101,98036,189],{"class":160},[101,98038,489],{"class":111},[101,98040,183],{"class":160},[101,98042,4644],{"class":111},[101,98044,98045,98047,98049,98051,98053,98055,98057,98059,98061],{"class":103,"line":21},[101,98046,374],{"class":111},[101,98048,157],{"class":107},[101,98050,93004],{"class":111},[101,98052,404],{"class":160},[101,98054,489],{"class":111},[101,98056,430],{"class":160},[101,98058,489],{"class":111},[101,98060,455],{"class":160},[101,98062,4644],{"class":111},[101,98064,98065],{"class":103,"line":1166},[101,98066,98067],{"class":170},"#调用concatenate进行数组拼接\n",[101,98069,98070],{"class":103,"line":1181},[101,98071,98072],{"class":111},"np.concatenate((a,b))\n",[101,98074,98075],{"class":103,"line":1187},[101,98076,98077],{"class":170},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[101,98079,98080],{"class":103,"line":1201},[101,98081,98082],{"class":170},"#np.concatenate([a,b])\n",[10,98084,98085],{},"②一维多个数组拼接",[92,98087,98089],{"className":30367,"code":98088,"language":30369,"meta":20,"style":20},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[98,98090,98091,98096,98116,98121],{"__ignoreMap":20},[101,98092,98093],{"class":103,"line":104},[101,98094,98095],{"class":170},"#也可以多个数组进行拼接\n",[101,98097,98098,98100,98102,98104,98106,98108,98110,98112,98114],{"class":103,"line":21},[101,98099,399],{"class":111},[101,98101,157],{"class":107},[101,98103,93004],{"class":111},[101,98105,557],{"class":160},[101,98107,489],{"class":111},[101,98109,583],{"class":160},[101,98111,489],{"class":111},[101,98113,634],{"class":160},[101,98115,4644],{"class":111},[101,98117,98118],{"class":103,"line":1166},[101,98119,98120],{"class":111},"c\n",[101,98122,98123],{"class":103,"line":1181},[101,98124,98125],{"class":111},"np.concatenate((a,b,c))\n",[10,98127,98128],{},"③二维数组拼接",[92,98130,98132],{"className":30367,"code":98131,"language":30369,"meta":20,"style":20},"#二维数组使用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",[98,98133,98134,98139,98163,98188,98193,98198],{"__ignoreMap":20},[101,98135,98136],{"class":103,"line":104},[101,98137,98138],{"class":170},"#二维数组使用concatenate进行拼接\n",[101,98140,98141,98143,98145,98147,98149,98151,98153,98155,98157,98159,98161],{"class":103,"line":21},[101,98142,93286],{"class":111},[101,98144,157],{"class":107},[101,98146,92982],{"class":111},[101,98148,329],{"class":160},[101,98150,489],{"class":111},[101,98152,634],{"class":160},[101,98154,92987],{"class":111},[101,98156,183],{"class":160},[101,98158,489],{"class":111},[101,98160,404],{"class":160},[101,98162,118],{"class":111},[101,98164,98165,98168,98170,98172,98174,98176,98178,98180,98182,98184,98186],{"class":103,"line":1166},[101,98166,98167],{"class":111},"bb",[101,98169,157],{"class":107},[101,98171,92982],{"class":111},[101,98173,448],{"class":160},[101,98175,489],{"class":111},[101,98177,753],{"class":160},[101,98179,92987],{"class":111},[101,98181,183],{"class":160},[101,98183,489],{"class":111},[101,98185,404],{"class":160},[101,98187,118],{"class":111},[101,98189,98190],{"class":103,"line":1181},[101,98191,98192],{"class":170},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[101,98194,98195],{"class":103,"line":1187},[101,98196,98197],{"class":170},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[101,98199,98200,98203,98205,98207,98209],{"class":103,"line":1201},[101,98201,98202],{"class":111},"np.concatenate((aa,bb),",[101,98204,47503],{"class":5204},[101,98206,157],{"class":107},[101,98208,303],{"class":160},[101,98210,118],{"class":111},[10,98212,98213],{},"结果：",[10,98215,98216],{},[1449,98217],{"alt":20,"src":98218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[92,98220,98222],{"className":30367,"code":98221,"language":30369,"meta":20,"style":20},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[98,98223,98224,98229],{"__ignoreMap":20},[101,98225,98226],{"class":103,"line":104},[101,98227,98228],{"class":170},"#指定axis为1进行拼接\n",[101,98230,98231,98233,98235,98237,98239],{"class":103,"line":21},[101,98232,98202],{"class":111},[101,98234,47503],{"class":5204},[101,98236,157],{"class":107},[101,98238,329],{"class":160},[101,98240,118],{"class":111},[10,98242,98213],{},[10,98244,98245],{},[1449,98246],{"alt":20,"src":98247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[10,98249,98250],{},[261,98251,98252],{},"二维数组总结：0竖着方向，1横着方向",[10,98254,98255],{},"④三维数组拼接",[10,98257,98258],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[92,98260,98262],{"className":30367,"code":98261,"language":30369,"meta":20,"style":20},"#两个三行六列\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",[98,98263,98264,98269,98297,98327,98332,98349,98354,98359,98364,98381,98386,98391,98396,98409],{"__ignoreMap":20},[101,98265,98266],{"class":103,"line":104},[101,98267,98268],{"class":170},"#两个三行六列\n",[101,98270,98271,98273,98275,98277,98279,98281,98283,98285,98287,98289,98291,98293,98295],{"class":103,"line":21},[101,98272,95501],{"class":111},[101,98274,157],{"class":107},[101,98276,92982],{"class":111},[101,98278,329],{"class":160},[101,98280,489],{"class":111},[101,98282,436],{"class":160},[101,98284,92987],{"class":111},[101,98286,189],{"class":160},[101,98288,489],{"class":111},[101,98290,183],{"class":160},[101,98292,489],{"class":111},[101,98294,455],{"class":160},[101,98296,118],{"class":111},[101,98298,98299,98302,98304,98306,98308,98310,98313,98315,98317,98319,98321,98323,98325],{"class":103,"line":1166},[101,98300,98301],{"class":111},"bbb",[101,98303,157],{"class":107},[101,98305,92982],{"class":111},[101,98307,448],{"class":160},[101,98309,489],{"class":111},[101,98311,98312],{"class":160},"137",[101,98314,92987],{"class":111},[101,98316,189],{"class":160},[101,98318,489],{"class":111},[101,98320,183],{"class":160},[101,98322,489],{"class":111},[101,98324,455],{"class":160},[101,98326,118],{"class":111},[101,98328,98329],{"class":103,"line":1181},[101,98330,98331],{"class":170},"#axis=0\n",[101,98333,98334,98336,98338,98341,98343,98345,98347],{"class":103,"line":1187},[101,98335,806],{"class":111},[101,98337,157],{"class":107},[101,98339,98340],{"class":111},"np.concatenate((aaa,bbb),",[101,98342,47503],{"class":5204},[101,98344,157],{"class":107},[101,98346,303],{"class":160},[101,98348,118],{"class":111},[101,98350,98351],{"class":103,"line":1201},[101,98352,98353],{"class":111},"s.shape\n",[101,98355,98356],{"class":103,"line":1207},[101,98357,98358],{"class":170},"#输出：(4,3,6)\n",[101,98360,98361],{"class":103,"line":1298},[101,98362,98363],{"class":170},"#axis=1\n",[101,98365,98366,98369,98371,98373,98375,98377,98379],{"class":103,"line":1304},[101,98367,98368],{"class":111},"ss",[101,98370,157],{"class":107},[101,98372,98340],{"class":111},[101,98374,47503],{"class":5204},[101,98376,157],{"class":107},[101,98378,329],{"class":160},[101,98380,118],{"class":111},[101,98382,98383],{"class":103,"line":1316},[101,98384,98385],{"class":111},"ss.shape\n",[101,98387,98388],{"class":103,"line":1599},[101,98389,98390],{"class":170},"#输出：(2,6,6)\n",[101,98392,98393],{"class":103,"line":1604},[101,98394,98395],{"class":170},"#axis=2\n",[101,98397,98398,98400,98402,98404,98406],{"class":103,"line":1610},[101,98399,98340],{"class":111},[101,98401,47503],{"class":5204},[101,98403,157],{"class":107},[101,98405,189],{"class":160},[101,98407,98408],{"class":111},").shape\n",[101,98410,98411],{"class":103,"line":1615},[101,98412,98413],{"class":170},"#输出：（2，3，12）\n",[10,98415,98416],{},"⑤四维数组拼接",[92,98418,98420],{"className":30367,"code":98419,"language":30369,"meta":20,"style":20},"#两个三行六列\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",[98,98421,98422,98426,98454,98482,98507,98533,98537,98550,98555,98559,98571,98576,98580,98592,98597,98602,98614],{"__ignoreMap":20},[101,98423,98424],{"class":103,"line":104},[101,98425,98268],{"class":170},[101,98427,98428,98430,98432,98434,98436,98438,98440,98442,98444,98446,98448,98450,98452],{"class":103,"line":21},[101,98429,95501],{"class":111},[101,98431,157],{"class":107},[101,98433,92982],{"class":111},[101,98435,329],{"class":160},[101,98437,489],{"class":111},[101,98439,436],{"class":160},[101,98441,92987],{"class":111},[101,98443,189],{"class":160},[101,98445,489],{"class":111},[101,98447,183],{"class":160},[101,98449,489],{"class":111},[101,98451,455],{"class":160},[101,98453,118],{"class":111},[101,98455,98456,98458,98460,98462,98464,98466,98468,98470,98472,98474,98476,98478,98480],{"class":103,"line":1166},[101,98457,98301],{"class":111},[101,98459,157],{"class":107},[101,98461,92982],{"class":111},[101,98463,448],{"class":160},[101,98465,489],{"class":111},[101,98467,98312],{"class":160},[101,98469,92987],{"class":111},[101,98471,189],{"class":160},[101,98473,489],{"class":111},[101,98475,183],{"class":160},[101,98477,489],{"class":111},[101,98479,455],{"class":160},[101,98481,118],{"class":111},[101,98483,98484,98487,98489,98491,98493,98495,98497,98499,98501,98503,98505],{"class":103,"line":1181},[101,98485,98486],{"class":111},"aaaa",[101,98488,157],{"class":107},[101,98490,97650],{"class":111},[101,98492,189],{"class":160},[101,98494,489],{"class":111},[101,98496,183],{"class":160},[101,98498,489],{"class":111},[101,98500,183],{"class":160},[101,98502,489],{"class":111},[101,98504,189],{"class":160},[101,98506,118],{"class":111},[101,98508,98509,98512,98514,98517,98519,98521,98523,98525,98527,98529,98531],{"class":103,"line":1187},[101,98510,98511],{"class":111},"bbbb",[101,98513,157],{"class":107},[101,98515,98516],{"class":111},"bbb.reshape(",[101,98518,189],{"class":160},[101,98520,489],{"class":111},[101,98522,183],{"class":160},[101,98524,489],{"class":111},[101,98526,183],{"class":160},[101,98528,489],{"class":111},[101,98530,189],{"class":160},[101,98532,118],{"class":111},[101,98534,98535],{"class":103,"line":1201},[101,98536,98331],{"class":170},[101,98538,98539,98542,98544,98546,98548],{"class":103,"line":1207},[101,98540,98541],{"class":111},"np.concatenate((aaaa,bbbb),",[101,98543,47503],{"class":5204},[101,98545,157],{"class":107},[101,98547,303],{"class":160},[101,98549,98408],{"class":111},[101,98551,98552],{"class":103,"line":1298},[101,98553,98554],{"class":170},"#结果：（4，3，3，2）\n",[101,98556,98557],{"class":103,"line":1304},[101,98558,98363],{"class":170},[101,98560,98561,98563,98565,98567,98569],{"class":103,"line":1316},[101,98562,98541],{"class":111},[101,98564,47503],{"class":5204},[101,98566,157],{"class":107},[101,98568,329],{"class":160},[101,98570,98408],{"class":111},[101,98572,98573],{"class":103,"line":1599},[101,98574,98575],{"class":170},"#结果：（2，6，3，2）\n",[101,98577,98578],{"class":103,"line":1604},[101,98579,98395],{"class":170},[101,98581,98582,98584,98586,98588,98590],{"class":103,"line":1610},[101,98583,98541],{"class":111},[101,98585,47503],{"class":5204},[101,98587,157],{"class":107},[101,98589,189],{"class":160},[101,98591,98408],{"class":111},[101,98593,98594],{"class":103,"line":1615},[101,98595,98596],{"class":170},"#结果：（2，3，6，2）\n",[101,98598,98599],{"class":103,"line":1629},[101,98600,98601],{"class":170},"#axis=3\n",[101,98603,98604,98606,98608,98610,98612],{"class":103,"line":1634},[101,98605,98541],{"class":111},[101,98607,47503],{"class":5204},[101,98609,157],{"class":107},[101,98611,183],{"class":160},[101,98613,98408],{"class":111},[101,98615,98616],{"class":103,"line":1640},[101,98617,98618],{"class":170},"#结果：（2，3，3，4）\n",[43,98620,98622],{"id":98621},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[10,98624,98625],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[10,98627,98628],{},"①二维数组",[92,98630,98632],{"className":30367,"code":98631,"language":30369,"meta":20,"style":20},"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",[98,98633,98634,98658,98682,98687,98692],{"__ignoreMap":20},[101,98635,98636,98638,98640,98642,98644,98646,98648,98650,98652,98654,98656],{"class":103,"line":104},[101,98637,93286],{"class":111},[101,98639,157],{"class":107},[101,98641,92982],{"class":111},[101,98643,329],{"class":160},[101,98645,489],{"class":111},[101,98647,634],{"class":160},[101,98649,92987],{"class":111},[101,98651,183],{"class":160},[101,98653,489],{"class":111},[101,98655,404],{"class":160},[101,98657,118],{"class":111},[101,98659,98660,98662,98664,98666,98668,98670,98672,98674,98676,98678,98680],{"class":103,"line":21},[101,98661,98167],{"class":111},[101,98663,157],{"class":107},[101,98665,92982],{"class":111},[101,98667,448],{"class":160},[101,98669,489],{"class":111},[101,98671,753],{"class":160},[101,98673,92987],{"class":111},[101,98675,183],{"class":160},[101,98677,489],{"class":111},[101,98679,404],{"class":160},[101,98681,118],{"class":111},[101,98683,98684],{"class":103,"line":1166},[101,98685,98686],{"class":111},"np.hstack((aa,bb))\n",[101,98688,98689],{"class":103,"line":1181},[101,98690,98691],{"class":170},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[101,98693,98694],{"class":103,"line":1187},[101,98695,98696],{"class":170},"#np.hstack([aa,bb])\n",[10,98698,98213],{},[10,98700,98701],{},[1449,98702],{"alt":20,"src":98703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[10,98705,98706],{},"等效于concatenate()函数中axis=1时的情况",[10,98708,98709],{},"②三维数组",[92,98711,98713],{"className":30367,"code":98712,"language":30369,"meta":20,"style":20},"#两个三行六列\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",[98,98714,98715,98719,98747,98775,98780,98785],{"__ignoreMap":20},[101,98716,98717],{"class":103,"line":104},[101,98718,98268],{"class":170},[101,98720,98721,98723,98725,98727,98729,98731,98733,98735,98737,98739,98741,98743,98745],{"class":103,"line":21},[101,98722,95501],{"class":111},[101,98724,157],{"class":107},[101,98726,92982],{"class":111},[101,98728,329],{"class":160},[101,98730,489],{"class":111},[101,98732,436],{"class":160},[101,98734,92987],{"class":111},[101,98736,189],{"class":160},[101,98738,489],{"class":111},[101,98740,183],{"class":160},[101,98742,489],{"class":111},[101,98744,455],{"class":160},[101,98746,118],{"class":111},[101,98748,98749,98751,98753,98755,98757,98759,98761,98763,98765,98767,98769,98771,98773],{"class":103,"line":1166},[101,98750,98301],{"class":111},[101,98752,157],{"class":107},[101,98754,92982],{"class":111},[101,98756,448],{"class":160},[101,98758,489],{"class":111},[101,98760,98312],{"class":160},[101,98762,92987],{"class":111},[101,98764,189],{"class":160},[101,98766,489],{"class":111},[101,98768,183],{"class":160},[101,98770,489],{"class":111},[101,98772,455],{"class":160},[101,98774,118],{"class":111},[101,98776,98777],{"class":103,"line":1181},[101,98778,98779],{"class":170},"#使用hstack\n",[101,98781,98782],{"class":103,"line":1187},[101,98783,98784],{"class":111},"np.hstack((aaa,bbb)).shape\n",[101,98786,98787],{"class":103,"line":1201},[101,98788,98789],{"class":170},"#输出：（2，6，6）\n",[43,98791,98793],{"id":98792},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[10,98795,98796],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[10,98798,98628],{},[92,98800,98802],{"className":30367,"code":98801,"language":30369,"meta":20,"style":20},"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",[98,98803,98804,98828,98852,98857,98862,98867],{"__ignoreMap":20},[101,98805,98806,98808,98810,98812,98814,98816,98818,98820,98822,98824,98826],{"class":103,"line":104},[101,98807,93286],{"class":111},[101,98809,157],{"class":107},[101,98811,92982],{"class":111},[101,98813,329],{"class":160},[101,98815,489],{"class":111},[101,98817,634],{"class":160},[101,98819,92987],{"class":111},[101,98821,183],{"class":160},[101,98823,489],{"class":111},[101,98825,404],{"class":160},[101,98827,118],{"class":111},[101,98829,98830,98832,98834,98836,98838,98840,98842,98844,98846,98848,98850],{"class":103,"line":21},[101,98831,98167],{"class":111},[101,98833,157],{"class":107},[101,98835,92982],{"class":111},[101,98837,448],{"class":160},[101,98839,489],{"class":111},[101,98841,753],{"class":160},[101,98843,92987],{"class":111},[101,98845,183],{"class":160},[101,98847,489],{"class":111},[101,98849,404],{"class":160},[101,98851,118],{"class":111},[101,98853,98854],{"class":103,"line":1166},[101,98855,98856],{"class":170},"#vstack 垂直方向进行堆叠\n",[101,98858,98859],{"class":103,"line":1181},[101,98860,98861],{"class":111},"np.vstack((aa,bb))\n",[101,98863,98864],{"class":103,"line":1187},[101,98865,98866],{"class":170},"#与hstack传的参数类似，等价于：\n",[101,98868,98869],{"class":103,"line":1201},[101,98870,98871],{"class":111},"np.vstack([aa,bb])\n",[10,98873,98213],{},[10,98875,98876],{},[1449,98877],{"alt":20,"src":98878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[10,98880,98709],{},[92,98882,98884],{"className":30367,"code":98883,"language":30369,"meta":20,"style":20},"#两个三行六列\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",[98,98885,98886,98890,98918,98946,98951,98956],{"__ignoreMap":20},[101,98887,98888],{"class":103,"line":104},[101,98889,98268],{"class":170},[101,98891,98892,98894,98896,98898,98900,98902,98904,98906,98908,98910,98912,98914,98916],{"class":103,"line":21},[101,98893,95501],{"class":111},[101,98895,157],{"class":107},[101,98897,92982],{"class":111},[101,98899,329],{"class":160},[101,98901,489],{"class":111},[101,98903,436],{"class":160},[101,98905,92987],{"class":111},[101,98907,189],{"class":160},[101,98909,489],{"class":111},[101,98911,183],{"class":160},[101,98913,489],{"class":111},[101,98915,455],{"class":160},[101,98917,118],{"class":111},[101,98919,98920,98922,98924,98926,98928,98930,98932,98934,98936,98938,98940,98942,98944],{"class":103,"line":1166},[101,98921,98301],{"class":111},[101,98923,157],{"class":107},[101,98925,92982],{"class":111},[101,98927,448],{"class":160},[101,98929,489],{"class":111},[101,98931,98312],{"class":160},[101,98933,92987],{"class":111},[101,98935,189],{"class":160},[101,98937,489],{"class":111},[101,98939,183],{"class":160},[101,98941,489],{"class":111},[101,98943,455],{"class":160},[101,98945,118],{"class":111},[101,98947,98948],{"class":103,"line":1181},[101,98949,98950],{"class":170},"#使用vstack\n",[101,98952,98953],{"class":103,"line":1187},[101,98954,98955],{"class":111},"np.vstack((aaa,bbb)).shape\n",[101,98957,98958],{"class":103,"line":1201},[101,98959,98960],{"class":170},"#输出：（4，3，6）\n",[43,98962,98964],{"id":98963},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[10,98966,98967],{},"该方法是三维数组特有的方法",[10,98969,98970],{},"也就是说",[10,98972,98973],{},"一维数组拼接方法用：concatenate()",[10,98975,98976],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[10,98978,98979],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[10,98981,98982],{},"四维数组及多维数组只能用concatenate进行拼接",[92,98984,98986],{"className":30367,"code":98985,"language":30369,"meta":20,"style":20},"#两个三行六列\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",[98,98987,98988,98992,99020,99048,99053,99058],{"__ignoreMap":20},[101,98989,98990],{"class":103,"line":104},[101,98991,98268],{"class":170},[101,98993,98994,98996,98998,99000,99002,99004,99006,99008,99010,99012,99014,99016,99018],{"class":103,"line":21},[101,98995,95501],{"class":111},[101,98997,157],{"class":107},[101,98999,92982],{"class":111},[101,99001,329],{"class":160},[101,99003,489],{"class":111},[101,99005,436],{"class":160},[101,99007,92987],{"class":111},[101,99009,189],{"class":160},[101,99011,489],{"class":111},[101,99013,183],{"class":160},[101,99015,489],{"class":111},[101,99017,455],{"class":160},[101,99019,118],{"class":111},[101,99021,99022,99024,99026,99028,99030,99032,99034,99036,99038,99040,99042,99044,99046],{"class":103,"line":1166},[101,99023,98301],{"class":111},[101,99025,157],{"class":107},[101,99027,92982],{"class":111},[101,99029,448],{"class":160},[101,99031,489],{"class":111},[101,99033,98312],{"class":160},[101,99035,92987],{"class":111},[101,99037,189],{"class":160},[101,99039,489],{"class":111},[101,99041,183],{"class":160},[101,99043,489],{"class":111},[101,99045,455],{"class":160},[101,99047,118],{"class":111},[101,99049,99050],{"class":103,"line":1181},[101,99051,99052],{"class":170},"#使用dstack\n",[101,99054,99055],{"class":103,"line":1187},[101,99056,99057],{"class":111},"np.dstack((aaa,bbb)).shape\n",[101,99059,99060],{"class":103,"line":1201},[101,99061,99062],{"class":170},"#结果：（2，3，12）\n",[5114,99064,99065],{},"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":20,"searchDepth":21,"depth":21,"links":99067},[99068,99069,99070,99071],{"id":98007,"depth":21,"text":98008},{"id":98621,"depth":21,"text":98622},{"id":98792,"depth":21,"text":98793},{"id":98963,"depth":21,"text":98964},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":97999,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99078,"title":99079,"body":99080,"description":23365,"extension":24,"meta":99355,"navigation":27,"path":99356,"seo":99357,"stem":99358,"__hash__":99359},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99081,"toc":99353},[99082,99085,99088,99182,99185,99188,99191,99194,99197,99200,99203,99206,99350],[39,99083,99079],{"id":99084},"_7数组转置",[10,99086,99087],{},"使用transpose()函数",[92,99089,99091],{"className":30367,"code":99090,"language":30369,"meta":20,"style":20},"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",[98,99092,99093,99103,99127,99132,99137,99142,99147,99155,99159,99163,99168,99173,99178],{"__ignoreMap":20},[101,99094,99095,99097,99099,99101],{"class":103,"line":104},[101,99096,30381],{"class":107},[101,99098,31369],{"class":111},[101,99100,31372],{"class":107},[101,99102,31375],{"class":111},[101,99104,99105,99107,99109,99111,99113,99115,99117,99119,99121,99123,99125],{"class":103,"line":21},[101,99106,14],{"class":111},[101,99108,157],{"class":107},[101,99110,31706],{"class":111},[101,99112,329],{"class":160},[101,99114,489],{"class":111},[101,99116,634],{"class":160},[101,99118,92987],{"class":111},[101,99120,404],{"class":160},[101,99122,489],{"class":111},[101,99124,183],{"class":160},[101,99126,118],{"class":111},[101,99128,99129],{"class":103,"line":1166},[101,99130,99131],{"class":170},"#二维数组转置\n",[101,99133,99134],{"class":103,"line":1181},[101,99135,99136],{"class":170},"#调用transpose()函数\n",[101,99138,99139],{"class":103,"line":1187},[101,99140,99141],{"class":111},"a.transpose()\n",[101,99143,99144],{"class":103,"line":1201},[101,99145,99146],{"class":170},"#对于二维数组也可以采用.T来实现\n",[101,99148,99149,99152],{"class":103,"line":1207},[101,99150,99151],{"class":111},"a.T",[101,99153,99154],{"class":170},"#与上述代码一样\n",[101,99156,99157],{"class":103,"line":1298},[101,99158,93544],{"class":170},[101,99160,99161],{"class":103,"line":1304},[101,99162,93908],{"class":216},[101,99164,99165],{"class":103,"line":1316},[101,99166,99167],{"class":216},"array([[ 1,  4,  7, 10],\n",[101,99169,99170],{"class":103,"line":1599},[101,99171,99172],{"class":216},"       [ 2,  5,  8, 11],\n",[101,99174,99175],{"class":103,"line":1604},[101,99176,99177],{"class":216},"       [ 3,  6,  9, 12]])\n",[101,99179,99180],{"class":103,"line":1610},[101,99181,93908],{"class":216},[10,99183,99184],{},"也可以使用np.transpose()的形式",[10,99186,99187],{},"#多维数组进行转置 np.transpose()",[10,99189,99190],{},"#对二维数组也可以使用np.transpose()进行转置",[10,99192,99193],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[10,99195,99196],{},"第二个参数，维度可以理解为用axis中的数来理解",[10,99198,99199],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[10,99201,99202],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[10,99204,99205],{},"四维及以上的数组也是一样的道理",[92,99207,99209],{"className":30367,"code":99208,"language":30369,"meta":20,"style":20},"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",[98,99210,99211,99239,99244,99249,99254,99272,99277,99309,99314,99319,99324,99345],{"__ignoreMap":20},[101,99212,99213,99215,99217,99219,99221,99223,99225,99227,99229,99231,99233,99235,99237],{"class":103,"line":104},[101,99214,931],{"class":111},[101,99216,157],{"class":107},[101,99218,92982],{"class":111},[101,99220,329],{"class":160},[101,99222,489],{"class":111},[101,99224,436],{"class":160},[101,99226,92987],{"class":111},[101,99228,183],{"class":160},[101,99230,489],{"class":111},[101,99232,455],{"class":160},[101,99234,489],{"class":111},[101,99236,189],{"class":160},[101,99238,118],{"class":111},[101,99240,99241],{"class":103,"line":21},[101,99242,99243],{"class":111},"x.shape\n",[101,99245,99246],{"class":103,"line":1166},[101,99247,99248],{"class":170},"#结果：（3,6,2）\n",[101,99250,99251],{"class":103,"line":1181},[101,99252,99253],{"class":170},"#使用np.transpose()进行转置 变为(2,6,3)\n",[101,99255,99256,99259,99261,99263,99265,99267,99269],{"class":103,"line":1187},[101,99257,99258],{"class":111},"np.transpose(x,(",[101,99260,189],{"class":160},[101,99262,489],{"class":111},[101,99264,329],{"class":160},[101,99266,489],{"class":111},[101,99268,303],{"class":160},[101,99270,99271],{"class":111},")).shape\n",[101,99273,99274],{"class":103,"line":1201},[101,99275,99276],{"class":170},"#结果：(2,6,3)\n",[101,99278,99279,99281,99283,99285,99287,99289,99291,99293,99295,99297,99299,99301,99303,99305,99307],{"class":103,"line":1207},[101,99280,98486],{"class":111},[101,99282,157],{"class":107},[101,99284,92982],{"class":111},[101,99286,329],{"class":160},[101,99288,489],{"class":111},[101,99290,436],{"class":160},[101,99292,92987],{"class":111},[101,99294,183],{"class":160},[101,99296,489],{"class":111},[101,99298,189],{"class":160},[101,99300,489],{"class":111},[101,99302,329],{"class":160},[101,99304,489],{"class":111},[101,99306,455],{"class":160},[101,99308,118],{"class":111},[101,99310,99311],{"class":103,"line":1298},[101,99312,99313],{"class":111},"aaaa.shape\n",[101,99315,99316],{"class":103,"line":1304},[101,99317,99318],{"class":170},"#结果：（3，2，1，6）\n",[101,99320,99321],{"class":103,"line":1316},[101,99322,99323],{"class":170},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[101,99325,99326,99329,99331,99333,99335,99337,99339,99341,99343],{"class":103,"line":1599},[101,99327,99328],{"class":111},"np.transpose(aaaa,(",[101,99330,329],{"class":160},[101,99332,489],{"class":111},[101,99334,189],{"class":160},[101,99336,489],{"class":111},[101,99338,303],{"class":160},[101,99340,489],{"class":111},[101,99342,183],{"class":160},[101,99344,99271],{"class":111},[101,99346,99347],{"class":103,"line":1604},[101,99348,99349],{"class":170},"#结果：(2,1,3,6)\n",[5114,99351,99352],{},"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":20,"searchDepth":21,"depth":21,"links":99354},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99079,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99361,"title":99362,"body":99363,"description":23365,"extension":24,"meta":100097,"navigation":27,"path":100098,"seo":100099,"stem":100100,"__hash__":100101},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99364,"toc":100095},[99365,99368,99371,99374,99377,99380,99383,99386,99389,99498,99501,99504,100092],[39,99366,99362],{"id":99367},"_8数组分割",[10,99369,99370],{},"split分割",[10,99372,99373],{},"numpy.split(ary,indics_or_sections,axis)",[10,99375,99376],{},"解释：",[10,99378,99379],{},"ary:被分割的数组",[10,99381,99382],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[10,99384,99385],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[10,99387,99388],{},"①一维数组的分割",[92,99390,99392],{"className":30367,"code":99391,"language":30369,"meta":20,"style":20},"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",[98,99393,99394,99410,99415,99424,99428,99433,99441,99445,99450,99455,99468,99472,99477,99489,99493],{"__ignoreMap":20},[101,99395,99396,99398,99400,99402,99404,99406,99408],{"class":103,"line":104},[101,99397,14],{"class":111},[101,99399,157],{"class":107},[101,99401,92982],{"class":111},[101,99403,329],{"class":160},[101,99405,489],{"class":111},[101,99407,531],{"class":160},[101,99409,118],{"class":111},[101,99411,99412],{"class":103,"line":21},[101,99413,99414],{"class":170},"#如果传入整数，必须能够平分，否则会报错\n",[101,99416,99417,99420,99422],{"class":103,"line":1166},[101,99418,99419],{"class":111},"np.split(a,",[101,99421,189],{"class":160},[101,99423,118],{"class":111},[101,99425,99426],{"class":103,"line":1181},[101,99427,93544],{"class":170},[101,99429,99430],{"class":103,"line":1187},[101,99431,99432],{"class":170},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[101,99434,99435,99437,99439],{"class":103,"line":1201},[101,99436,99419],{"class":111},[101,99438,404],{"class":160},[101,99440,118],{"class":111},[101,99442,99443],{"class":103,"line":1207},[101,99444,93544],{"class":170},[101,99446,99447],{"class":103,"line":1298},[101,99448,99449],{"class":170},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[101,99451,99452],{"class":103,"line":1304},[101,99453,99454],{"class":170},"#传入数组\n",[101,99456,99457,99460,99462,99464,99466],{"class":103,"line":1316},[101,99458,99459],{"class":111},"np.split(a,[",[101,99461,183],{"class":160},[101,99463,489],{"class":111},[101,99465,430],{"class":160},[101,99467,4644],{"class":111},[101,99469,99470],{"class":103,"line":1599},[101,99471,93544],{"class":170},[101,99473,99474],{"class":103,"line":1604},[101,99475,99476],{"class":170},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[101,99478,99479,99481,99483,99485,99487],{"class":103,"line":1610},[101,99480,99459],{"class":111},[101,99482,430],{"class":160},[101,99484,489],{"class":111},[101,99486,480],{"class":160},[101,99488,4644],{"class":111},[101,99490,99491],{"class":103,"line":1615},[101,99492,93544],{"class":170},[101,99494,99495],{"class":103,"line":1629},[101,99496,99497],{"class":170},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[10,99499,99500],{},"②二维数组的分割",[10,99502,99503],{},"使用split()",[92,99505,99507],{"className":30367,"code":99506,"language":30369,"meta":20,"style":20},"#二维数组分割\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",[98,99508,99509,99514,99538,99543,99552,99556,99560,99565,99570,99575,99580,99585,99590,99595,99599,99612,99616,99620,99624,99628,99632,99637,99642,99647,99651,99656,99672,99676,99680,99685,99690,99695,99700,99705,99710,99715,99720,99725,99730,99735,99740,99745,99750,99755,99760,99765,99770,99774,99778,99798,99802,99806,99811,99816,99821,99826,99831,99836,99841,99846,99851,99856,99861,99866,99871,99876,99881,99886,99891,99896,99900,99905,99914,99918,99922,99926,99930,99934,99938,99942,99946,99950,99959,99963,99967,99971,99975,99979,99983,99987,99991,99995,99999,100003,100007,100011,100015,100019,100023,100027,100031,100035,100039,100043,100056,100060,100064,100068,100072,100076,100080,100084,100088],{"__ignoreMap":20},[101,99510,99511],{"class":103,"line":104},[101,99512,99513],{"class":170},"#二维数组分割\n",[101,99515,99516,99518,99520,99522,99524,99526,99528,99530,99532,99534,99536],{"class":103,"line":21},[101,99517,93286],{"class":111},[101,99519,157],{"class":107},[101,99521,92982],{"class":111},[101,99523,329],{"class":160},[101,99525,489],{"class":111},[101,99527,436],{"class":160},[101,99529,92987],{"class":111},[101,99531,455],{"class":160},[101,99533,489],{"class":111},[101,99535,455],{"class":160},[101,99537,118],{"class":111},[101,99539,99540],{"class":103,"line":1166},[101,99541,99542],{"class":170},"#默认axis=0  传入整数平均分,按行来的\n",[101,99544,99545,99548,99550],{"class":103,"line":1181},[101,99546,99547],{"class":111},"np.split(aa,",[101,99549,183],{"class":160},[101,99551,118],{"class":111},[101,99553,99554],{"class":103,"line":1187},[101,99555,95744],{"class":170},[101,99557,99558],{"class":103,"line":1201},[101,99559,93908],{"class":216},[101,99561,99562],{"class":103,"line":1207},[101,99563,99564],{"class":216},"[array([[ 1,  2,  3,  4,  5,  6],\n",[101,99566,99567],{"class":103,"line":1298},[101,99568,99569],{"class":216},"        [ 7,  8,  9, 10, 11, 12]]),\n",[101,99571,99572],{"class":103,"line":1304},[101,99573,99574],{"class":216}," array([[13, 14, 15, 16, 17, 18],\n",[101,99576,99577],{"class":103,"line":1316},[101,99578,99579],{"class":216},"        [19, 20, 21, 22, 23, 24]]),\n",[101,99581,99582],{"class":103,"line":1599},[101,99583,99584],{"class":216}," array([[25, 26, 27, 28, 29, 30],\n",[101,99586,99587],{"class":103,"line":1604},[101,99588,99589],{"class":216},"        [31, 32, 33, 34, 35, 36]])]\n",[101,99591,99592],{"class":103,"line":1610},[101,99593,99594],{"class":216}," '''\n",[101,99596,99597],{"class":103,"line":1615},[101,99598,99454],{"class":170},[101,99600,99601,99604,99606,99608,99610],{"class":103,"line":1629},[101,99602,99603],{"class":111},"np.split(aa,[",[101,99605,189],{"class":160},[101,99607,489],{"class":111},[101,99609,430],{"class":160},[101,99611,4644],{"class":111},[101,99613,99614],{"class":103,"line":1634},[101,99615,95744],{"class":170},[101,99617,99618],{"class":103,"line":1640},[101,99619,93908],{"class":216},[101,99621,99622],{"class":103,"line":1661},[101,99623,99564],{"class":216},[101,99625,99626],{"class":103,"line":1666},[101,99627,99569],{"class":216},[101,99629,99630],{"class":103,"line":1680},[101,99631,99574],{"class":216},[101,99633,99634],{"class":103,"line":1685},[101,99635,99636],{"class":216},"        [19, 20, 21, 22, 23, 24],\n",[101,99638,99639],{"class":103,"line":1714},[101,99640,99641],{"class":216},"        [25, 26, 27, 28, 29, 30]]),\n",[101,99643,99644],{"class":103,"line":1719},[101,99645,99646],{"class":216}," array([[31, 32, 33, 34, 35, 36]])]\n",[101,99648,99649],{"class":103,"line":1736},[101,99650,93908],{"class":216},[101,99652,99653],{"class":103,"line":1741},[101,99654,99655],{"class":170},"#axis=1 按照列来分\n",[101,99657,99658,99660,99662,99664,99666,99668,99670],{"class":103,"line":1746},[101,99659,99547],{"class":111},[101,99661,183],{"class":160},[101,99663,489],{"class":111},[101,99665,47503],{"class":5204},[101,99667,157],{"class":107},[101,99669,329],{"class":160},[101,99671,118],{"class":111},[101,99673,99674],{"class":103,"line":1751},[101,99675,95744],{"class":170},[101,99677,99678],{"class":103,"line":1765},[101,99679,93908],{"class":216},[101,99681,99682],{"class":103,"line":1770},[101,99683,99684],{"class":216},"[array([[ 1,  2],\n",[101,99686,99687],{"class":103,"line":2564},[101,99688,99689],{"class":216},"        [ 7,  8],\n",[101,99691,99692],{"class":103,"line":2578},[101,99693,99694],{"class":216},"        [13, 14],\n",[101,99696,99697],{"class":103,"line":2586},[101,99698,99699],{"class":216},"        [19, 20],\n",[101,99701,99702],{"class":103,"line":2591},[101,99703,99704],{"class":216},"        [25, 26],\n",[101,99706,99707],{"class":103,"line":2597},[101,99708,99709],{"class":216},"        [31, 32]]),\n",[101,99711,99712],{"class":103,"line":2603},[101,99713,99714],{"class":216}," array([[ 3,  4],\n",[101,99716,99717],{"class":103,"line":2608},[101,99718,99719],{"class":216},"        [ 9, 10],\n",[101,99721,99722],{"class":103,"line":7936},[101,99723,99724],{"class":216},"        [15, 16],\n",[101,99726,99727],{"class":103,"line":7960},[101,99728,99729],{"class":216},"        [21, 22],\n",[101,99731,99732],{"class":103,"line":7965},[101,99733,99734],{"class":216},"        [27, 28],\n",[101,99736,99737],{"class":103,"line":7971},[101,99738,99739],{"class":216},"        [33, 34]]),\n",[101,99741,99742],{"class":103,"line":7998},[101,99743,99744],{"class":216}," array([[ 5,  6],\n",[101,99746,99747],{"class":103,"line":8003},[101,99748,99749],{"class":216},"        [11, 12],\n",[101,99751,99752],{"class":103,"line":8009},[101,99753,99754],{"class":216},"        [17, 18],\n",[101,99756,99757],{"class":103,"line":8021},[101,99758,99759],{"class":216},"        [23, 24],\n",[101,99761,99762],{"class":103,"line":8033},[101,99763,99764],{"class":216},"        [29, 30],\n",[101,99766,99767],{"class":103,"line":8045},[101,99768,99769],{"class":216},"        [35, 36]])]\n",[101,99771,99772],{"class":103,"line":9704},[101,99773,99594],{"class":216},[101,99775,99776],{"class":103,"line":9729},[101,99777,99454],{"class":170},[101,99779,99780,99782,99784,99786,99788,99790,99792,99794,99796],{"class":103,"line":9752},[101,99781,99603],{"class":111},[101,99783,329],{"class":160},[101,99785,489],{"class":111},[101,99787,189],{"class":160},[101,99789,41598],{"class":111},[101,99791,47503],{"class":5204},[101,99793,157],{"class":107},[101,99795,329],{"class":160},[101,99797,118],{"class":111},[101,99799,99800],{"class":103,"line":9776},[101,99801,93544],{"class":170},[101,99803,99804],{"class":103,"line":9781},[101,99805,93908],{"class":216},[101,99807,99808],{"class":103,"line":9786},[101,99809,99810],{"class":216},"[array([[ 1],\n",[101,99812,99813],{"class":103,"line":9791},[101,99814,99815],{"class":216},"        [ 7],\n",[101,99817,99818],{"class":103,"line":9800},[101,99819,99820],{"class":216},"        [13],\n",[101,99822,99823],{"class":103,"line":9805},[101,99824,99825],{"class":216},"        [19],\n",[101,99827,99828],{"class":103,"line":9811},[101,99829,99830],{"class":216},"        [25],\n",[101,99832,99833],{"class":103,"line":9832},[101,99834,99835],{"class":216},"        [31]]),\n",[101,99837,99838],{"class":103,"line":9838},[101,99839,99840],{"class":216}," array([[ 2],\n",[101,99842,99843],{"class":103,"line":9852},[101,99844,99845],{"class":216},"        [ 8],\n",[101,99847,99848],{"class":103,"line":9858},[101,99849,99850],{"class":216},"        [14],\n",[101,99852,99853],{"class":103,"line":9885},[101,99854,99855],{"class":216},"        [20],\n",[101,99857,99858],{"class":103,"line":9894},[101,99859,99860],{"class":216},"        [26],\n",[101,99862,99863],{"class":103,"line":9900},[101,99864,99865],{"class":216},"        [32]]),\n",[101,99867,99868],{"class":103,"line":9908},[101,99869,99870],{"class":216}," array([[ 3,  4,  5,  6],\n",[101,99872,99873],{"class":103,"line":9913},[101,99874,99875],{"class":216},"        [ 9, 10, 11, 12],\n",[101,99877,99878],{"class":103,"line":16592},[101,99879,99880],{"class":216},"        [15, 16, 17, 18],\n",[101,99882,99883],{"class":103,"line":16598},[101,99884,99885],{"class":216},"        [21, 22, 23, 24],\n",[101,99887,99888],{"class":103,"line":16621},[101,99889,99890],{"class":216},"        [27, 28, 29, 30],\n",[101,99892,99893],{"class":103,"line":16627},[101,99894,99895],{"class":216},"        [33, 34, 35, 36]])]\n",[101,99897,99898],{"class":103,"line":16650},[101,99899,93908],{"class":216},[101,99901,99902],{"class":103,"line":16664},[101,99903,99904],{"class":170},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[101,99906,99907,99910,99912],{"class":103,"line":16684},[101,99908,99909],{"class":111},"np.vsplit(aa,",[101,99911,183],{"class":160},[101,99913,118],{"class":111},[101,99915,99916],{"class":103,"line":16690},[101,99917,93544],{"class":170},[101,99919,99920],{"class":103,"line":16701},[101,99921,93908],{"class":216},[101,99923,99924],{"class":103,"line":16724},[101,99925,99564],{"class":216},[101,99927,99928],{"class":103,"line":16746},[101,99929,99569],{"class":216},[101,99931,99932],{"class":103,"line":16751},[101,99933,99574],{"class":216},[101,99935,99936],{"class":103,"line":16757},[101,99937,99579],{"class":216},[101,99939,99940],{"class":103,"line":16771},[101,99941,99584],{"class":216},[101,99943,99944],{"class":103,"line":16784},[101,99945,99589],{"class":216},[101,99947,99948],{"class":103,"line":16789},[101,99949,93908],{"class":216},[101,99951,99952,99955,99957],{"class":103,"line":16803},[101,99953,99954],{"class":111},"np.hsplit(aa,",[101,99956,183],{"class":160},[101,99958,118],{"class":111},[101,99960,99961],{"class":103,"line":16808},[101,99962,93544],{"class":170},[101,99964,99965],{"class":103,"line":16814},[101,99966,93908],{"class":216},[101,99968,99969],{"class":103,"line":16819},[101,99970,99684],{"class":216},[101,99972,99973],{"class":103,"line":16833},[101,99974,99689],{"class":216},[101,99976,99977],{"class":103,"line":16838},[101,99978,99694],{"class":216},[101,99980,99981],{"class":103,"line":16843},[101,99982,99699],{"class":216},[101,99984,99985],{"class":103,"line":16857},[101,99986,99704],{"class":216},[101,99988,99989],{"class":103,"line":16869},[101,99990,99709],{"class":216},[101,99992,99993],{"class":103,"line":16874},[101,99994,99714],{"class":216},[101,99996,99997],{"class":103,"line":16887},[101,99998,99719],{"class":216},[101,100000,100001],{"class":103,"line":16892},[101,100002,99724],{"class":216},[101,100004,100005],{"class":103,"line":16897},[101,100006,99729],{"class":216},[101,100008,100009],{"class":103,"line":16902},[101,100010,99734],{"class":216},[101,100012,100013],{"class":103,"line":16915},[101,100014,99739],{"class":216},[101,100016,100017],{"class":103,"line":16920},[101,100018,99744],{"class":216},[101,100020,100021],{"class":103,"line":32622},[101,100022,99749],{"class":216},[101,100024,100025],{"class":103,"line":32628},[101,100026,99754],{"class":216},[101,100028,100029],{"class":103,"line":32634},[101,100030,99759],{"class":216},[101,100032,100033],{"class":103,"line":32640},[101,100034,99764],{"class":216},[101,100036,100037],{"class":103,"line":32646},[101,100038,99769],{"class":216},[101,100040,100041],{"class":103,"line":32657},[101,100042,93908],{"class":216},[101,100044,100045,100048,100050,100052,100054],{"class":103,"line":32663},[101,100046,100047],{"class":111},"np.vsplit(aa,[",[101,100049,189],{"class":160},[101,100051,489],{"class":111},[101,100053,430],{"class":160},[101,100055,4644],{"class":111},[101,100057,100058],{"class":103,"line":32683},[101,100059,93544],{"class":170},[101,100061,100062],{"class":103,"line":32689},[101,100063,93908],{"class":216},[101,100065,100066],{"class":103,"line":32700},[101,100067,99564],{"class":216},[101,100069,100070],{"class":103,"line":32706},[101,100071,99569],{"class":216},[101,100073,100074],{"class":103,"line":32712},[101,100075,99574],{"class":216},[101,100077,100078],{"class":103,"line":32718},[101,100079,99636],{"class":216},[101,100081,100082],{"class":103,"line":32724},[101,100083,99641],{"class":216},[101,100085,100086],{"class":103,"line":32730},[101,100087,99646],{"class":216},[101,100089,100090],{"class":103,"line":32736},[101,100091,99594],{"class":216},[5114,100093,100094],{},"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":20,"searchDepth":21,"depth":21,"links":100096},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99362,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100103,"title":100104,"body":100105,"description":23365,"extension":24,"meta":100599,"navigation":27,"path":100600,"seo":100601,"stem":100602,"__hash__":100603},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100106,"toc":100590},[100107,100110,100113,100138,100142,100201,100253,100257,100259,100295,100349,100351,100389,100460,100464,100469,100473,100476,100509,100512,100516,100519,100522,100525,100528,100533,100537,100540,100543,100546,100549,100554,100558,100563,100566,100587],[39,100108,100104],{"id":100109},"_9数学函数",[10,100111,100112],{},"补充回顾：python的列表推导式",[92,100114,100116],{"className":30367,"code":100115,"language":30369,"meta":20,"style":20},"[1\u002Fi for i in a]\n",[98,100117,100118],{"__ignoreMap":20},[101,100119,100120,100122,100124,100126,100129,100131,100133,100135],{"class":103,"line":104},[101,100121,1001],{"class":111},[101,100123,329],{"class":160},[101,100125,695],{"class":107},[101,100127,100128],{"class":111},"i ",[101,100130,3012],{"class":107},[101,100132,9426],{"class":111},[101,100134,26032],{"class":107},[101,100136,100137],{"class":111}," a]\n",[43,100139,100141],{"id":100140},"_91-求倒数","9.1 求倒数",[92,100143,100145],{"className":30367,"code":100144,"language":30369,"meta":20,"style":20},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[98,100146,100147,100152,100180,100192],{"__ignoreMap":20},[101,100148,100149],{"class":103,"line":104},[101,100150,100151],{"class":170},"#数组求倒数\n",[101,100153,100154,100156,100158,100160,100162,100164,100166,100168,100170,100172,100174,100176,100178],{"class":103,"line":21},[101,100155,14],{"class":111},[101,100157,157],{"class":107},[101,100159,1001],{"class":111},[101,100161,329],{"class":160},[101,100163,489],{"class":111},[101,100165,189],{"class":160},[101,100167,489],{"class":111},[101,100169,183],{"class":160},[101,100171,489],{"class":111},[101,100173,404],{"class":160},[101,100175,489],{"class":111},[101,100177,430],{"class":160},[101,100179,33235],{"class":111},[101,100181,100182,100184,100186,100189],{"class":103,"line":1166},[101,100183,374],{"class":111},[101,100185,157],{"class":107},[101,100187,100188],{"class":111},"np.array(a)",[101,100190,100191],{"class":170},"#将列表转换为数组\n",[101,100193,100194,100196,100198],{"class":103,"line":1181},[101,100195,329],{"class":160},[101,100197,695],{"class":107},[101,100199,100200],{"class":111},"b\n",[92,100202,100204],{"className":30367,"code":100203,"language":30369,"meta":20,"style":20},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[98,100205,100206,100234,100243,100248],{"__ignoreMap":20},[101,100207,100208,100210,100212,100214,100216,100218,100220,100222,100224,100226,100228,100230,100232],{"class":103,"line":104},[101,100209,14],{"class":111},[101,100211,157],{"class":107},[101,100213,1001],{"class":111},[101,100215,329],{"class":160},[101,100217,489],{"class":111},[101,100219,189],{"class":160},[101,100221,489],{"class":111},[101,100223,183],{"class":160},[101,100225,489],{"class":111},[101,100227,404],{"class":160},[101,100229,489],{"class":111},[101,100231,430],{"class":160},[101,100233,33235],{"class":111},[101,100235,100236,100238,100240],{"class":103,"line":21},[101,100237,374],{"class":111},[101,100239,157],{"class":107},[101,100241,100242],{"class":111},"np.array(a)\n",[101,100244,100245],{"class":103,"line":1166},[101,100246,100247],{"class":170},"#调用numpy中的函数reciprocal()\n",[101,100249,100250],{"class":103,"line":1181},[101,100251,100252],{"class":111},"np.reciprocal(b)\n",[43,100254,100256],{"id":100255},"_92-求平方","9.2 求平方",[10,100258,94510],{},[92,100260,100262],{"className":30367,"code":100261,"language":30369,"meta":20,"style":20},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[98,100263,100264,100269,100274,100290],{"__ignoreMap":20},[101,100265,100266],{"class":103,"line":104},[101,100267,100268],{"class":170},"#square()，求平方\n",[101,100270,100271],{"class":103,"line":21},[101,100272,100273],{"class":170},"#一维数组\n",[101,100275,100276,100278,100280,100282,100284,100286,100288],{"class":103,"line":1166},[101,100277,14],{"class":111},[101,100279,157],{"class":107},[101,100281,92982],{"class":111},[101,100283,329],{"class":160},[101,100285,489],{"class":111},[101,100287,557],{"class":160},[101,100289,118],{"class":111},[101,100291,100292],{"class":103,"line":1181},[101,100293,100294],{"class":111},"np.square(a)\n",[92,100296,100298],{"className":30367,"code":100297,"language":30369,"meta":20,"style":20},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[98,100299,100300,100305,100310,100331],{"__ignoreMap":20},[101,100301,100302],{"class":103,"line":104},[101,100303,100304],{"class":170},"#或者通过循环遍历的形式来计算\n",[101,100306,100307],{"class":103,"line":21},[101,100308,100309],{"class":170},"#这是一个列表\n",[101,100311,100312,100315,100317,100319,100321,100323,100325,100328],{"class":103,"line":1166},[101,100313,100314],{"class":111},"[i",[101,100316,566],{"class":107},[101,100318,100128],{"class":111},[101,100320,3012],{"class":107},[101,100322,9426],{"class":111},[101,100324,26032],{"class":107},[101,100326,100327],{"class":111}," a]",[101,100329,100330],{"class":170},"#这个求完之后在数列当中\n",[101,100332,100333,100336,100338,100340,100342,100344,100346],{"class":103,"line":1181},[101,100334,100335],{"class":111},"np.array([i",[101,100337,566],{"class":107},[101,100339,100128],{"class":111},[101,100341,3012],{"class":107},[101,100343,9426],{"class":111},[101,100345,26032],{"class":107},[101,100347,100348],{"class":111}," a])\n",[10,100350,93271],{},[92,100352,100354],{"className":30367,"code":100353,"language":30369,"meta":20,"style":20},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[98,100355,100356,100360,100384],{"__ignoreMap":20},[101,100357,100358],{"class":103,"line":104},[101,100359,93281],{"class":170},[101,100361,100362,100364,100366,100368,100370,100372,100374,100376,100378,100380,100382],{"class":103,"line":21},[101,100363,93286],{"class":111},[101,100365,157],{"class":107},[101,100367,92982],{"class":111},[101,100369,329],{"class":160},[101,100371,489],{"class":111},[101,100373,634],{"class":160},[101,100375,92987],{"class":111},[101,100377,404],{"class":160},[101,100379,489],{"class":111},[101,100381,183],{"class":160},[101,100383,118],{"class":111},[101,100385,100386],{"class":103,"line":1166},[101,100387,100388],{"class":111},"np.square(aa)\n",[92,100390,100392],{"className":30367,"code":100391,"language":30369,"meta":20,"style":20},"#传统的方式\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",[98,100393,100394,100399,100408,100424,100440,100455],{"__ignoreMap":20},[101,100395,100396],{"class":103,"line":104},[101,100397,100398],{"class":170},"#传统的方式\n",[101,100400,100401,100403,100405],{"class":103,"line":21},[101,100402,98167],{"class":111},[101,100404,157],{"class":107},[101,100406,100407],{"class":111},"np.empty_like(aa)\n",[101,100409,100410,100412,100414,100416,100418,100420,100422],{"class":103,"line":1166},[101,100411,3012],{"class":107},[101,100413,9426],{"class":111},[101,100415,26032],{"class":107},[101,100417,32432],{"class":160},[101,100419,112],{"class":111},[101,100421,404],{"class":160},[101,100423,30775],{"class":111},[101,100425,100426,100428,100430,100432,100434,100436,100438],{"class":103,"line":1181},[101,100427,3188],{"class":107},[101,100429,9488],{"class":111},[101,100431,26032],{"class":107},[101,100433,32432],{"class":160},[101,100435,112],{"class":111},[101,100437,183],{"class":160},[101,100439,30775],{"class":111},[101,100441,100442,100445,100447,100450,100452],{"class":103,"line":1187},[101,100443,100444],{"class":111},"        bb[i,j]",[101,100446,157],{"class":107},[101,100448,100449],{"class":111},"aa[i,j]",[101,100451,566],{"class":107},[101,100453,100454],{"class":111},"aa[i,j]\n",[101,100456,100457],{"class":103,"line":1201},[101,100458,100459],{"class":111},"bb\n",[43,100461,100463],{"id":100462},"_93-求各元素的符号","9.3 求各元素的符号",[10,100465,100466],{},[1449,100467],{"alt":20,"src":100468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[43,100470,100472],{"id":100471},"_94-modf函数","9.4 modf函数",[10,100474,100475],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[92,100477,100479],{"className":30367,"code":100478,"language":30369,"meta":20,"style":20},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[98,100480,100481,100504],{"__ignoreMap":20},[101,100482,100483,100485,100487,100489,100491,100493,100495,100497,100499,100502],{"class":103,"line":104},[101,100484,14],{"class":111},[101,100486,157],{"class":107},[101,100488,92982],{"class":111},[101,100490,643],{"class":107},[101,100492,557],{"class":160},[101,100494,489],{"class":111},[101,100496,557],{"class":160},[101,100498,489],{"class":111},[101,100500,100501],{"class":160},"0.3",[101,100503,118],{"class":111},[101,100505,100506],{"class":103,"line":21},[101,100507,100508],{"class":111},"np.modf(a)\n",[10,100510,100511],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[43,100513,100515],{"id":100514},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[10,100517,100518],{},"np.cell()",[10,100520,100521],{},"np.floor()",[10,100523,100524],{},"np.rint()",[10,100526,100527],{},"对各元素分别向上取整、向下取整、四舍五入",[10,100529,100530],{},[1449,100531],{"alt":20,"src":100532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[43,100534,100536],{"id":100535},"_96-around函数","9.6 around()函数",[10,100538,100539],{},"around()函数也可以实现对数的小数位数进行操作",[10,100541,100542],{},"其中的参数：",[10,100544,100545],{},"1.要传的数组",[10,100547,100548],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[10,100550,100551],{},[1449,100552],{"alt":20,"src":100553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[43,100555,100557],{"id":100556},"_97-三角函数","9.7 三角函数",[10,100559,100560],{},[1449,100561],{"alt":20,"src":100562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[10,100564,100565],{},"引入图像模块非常重要",[92,100567,100569],{"className":30367,"code":100568,"language":30369,"meta":20,"style":20},"from matplotlib import pyplot as plt\n",[98,100570,100571],{"__ignoreMap":20},[101,100572,100573,100575,100578,100580,100583,100585],{"class":103,"line":104},[101,100574,30726],{"class":107},[101,100576,100577],{"class":111}," matplotlib ",[101,100579,30381],{"class":107},[101,100581,100582],{"class":111}," pyplot ",[101,100584,31372],{"class":107},[101,100586,31426],{"class":111},[5114,100588,100589],{},"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":20,"searchDepth":21,"depth":21,"links":100591},[100592,100593,100594,100595,100596,100597,100598],{"id":100140,"depth":21,"text":100141},{"id":100255,"depth":21,"text":100256},{"id":100462,"depth":21,"text":100463},{"id":100471,"depth":21,"text":100472},{"id":100514,"depth":21,"text":100515},{"id":100535,"depth":21,"text":100536},{"id":100556,"depth":21,"text":100557},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100104,"description":23365},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100605,"title":100606,"body":100607,"description":23365,"extension":24,"meta":100611,"navigation":27,"path":100612,"seo":100613,"stem":100614,"__hash__":100615},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100608,"toc":100609},[],{"title":20,"searchDepth":21,"depth":21,"links":100610},[],{"category":50409},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100606,"description":23365},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100617,"title":100618,"body":100619,"description":20,"extension":24,"meta":102627,"navigation":27,"path":102628,"seo":102629,"stem":102630,"__hash__":102631},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100620,"toc":102603},[100621,100624,100628,100631,100634,100640,100643,100666,100669,100703,100706,100747,100751,100754,100847,100850,100894,100897,100914,100917,100931,100934,100937,100982,100985,101022,101026,101029,101035,101040,101060,101064,101067,101133,101136,101154,101158,101161,101190,101200,101206,101210,101213,101219,101230,101234,101237,101267,101270,101550,101553,101556,101567,101570,101573,101595,101602,101605,101623,101626,101629,101643,101651,101654,101680,101686,101689,101692,101702,101714,101734,101743,101763,101773,101797,101810,101824,101829,101870,101887,101912,101924,101944,101950,101995,102014,102031,102044,102060,102067,102079,102088,102123,102144,102169,102182,102206,102221,102246,102249,102270,102279,102282,102293,102297,102300,102306,102318,102325,102329,102332,102344,102347,102361,102364,102374,102384,102387,102427,102430,102434,102440,102443,102457,102461,102464,102497,102501,102504,102527,102535,102538,102544,102550,102553,102556,102584,102588,102591,102597,102600],[39,100622,100618],{"id":100623},"_1环境安装与第一个-mujoco-程序",[43,100625,100627],{"id":100626},"_1目标说明","1.目标说明",[10,100629,100630],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[10,100632,100633],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[92,100635,100638],{"className":100636,"code":100637,"language":5175,"meta":20},[5173],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[98,100639,100637],{"__ignoreMap":20},[10,100641,100642],{},"需要掌握:",[55,100644,100645,100648,100651,100656,100661],{},[58,100646,100647],{},"Fedora 44 下 MuJoCo 的系统依赖",[58,100649,100650],{},"Python 虚拟环境创建",[58,100652,100653],{},[98,100654,100655],{},"mujoco.MjModel",[58,100657,100658],{},[98,100659,100660],{},"mujoco.MjData",[58,100662,100663],{},[98,100664,100665],{},"mujoco.mj_step(model, data)",[10,100667,100668],{},"MuJoCo 中最重要的两个对象:",[249,100670,100671,100681],{},[252,100672,100673],{},[255,100674,100675,100678],{},[258,100676,100677],{"align":23725},"对象",[258,100679,100680],{"align":23725},"含义",[296,100682,100683,100693],{},[255,100684,100685,100690],{},[301,100686,100687],{"align":23725},[98,100688,100689],{},"MjModel",[301,100691,100692],{"align":23725},"模型结构，来自 XML，基本不随时间变化",[255,100694,100695,100700],{},[301,100696,100697],{"align":23725},[98,100698,100699],{},"MjData",[301,100701,100702],{"align":23725},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[10,100704,100705],{},"可以先用一个类比理解：",[249,100707,100708,100718],{},[252,100709,100710],{},[255,100711,100712,100715],{},[258,100713,100714],{"align":23725},"类比",[258,100716,100717],{"align":23725},"MuJoCo 对象",[296,100719,100720,100729,100738],{},[255,100721,100722,100725],{},[301,100723,100724],{"align":23725},"游戏地图和角色配置",[301,100726,100727],{"align":23725},[98,100728,100689],{},[255,100730,100731,100734],{},[301,100732,100733],{"align":23725},"游戏运行到当前帧的状态",[301,100735,100736],{"align":23725},[98,100737,100699],{},[255,100739,100740,100743],{},[301,100741,100742],{"align":23725},"前进一帧",[301,100744,100745],{"align":23725},[98,100746,100665],{},[43,100748,100750],{"id":100749},"_2环境与依赖安装","2.环境与依赖安装",[10,100752,100753],{},"Fedora 44 系统依赖:",[92,100755,100757],{"className":23811,"code":100756,"language":23813,"meta":20,"style":20},"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",[98,100758,100759,100771,100784,100797,100807,100817,100836],{"__ignoreMap":20},[101,100760,100761,100763,100765,100767,100769],{"class":103,"line":104},[101,100762,24565],{"class":1950},[101,100764,26304],{"class":216},[101,100766,23823],{"class":216},[101,100768,26389],{"class":160},[101,100770,24667],{"class":160},[101,100772,100773,100776,100779,100782],{"class":103,"line":21},[101,100774,100775],{"class":216},"  python3",[101,100777,100778],{"class":216}," python3-pip",[101,100780,100781],{"class":216}," python3-virtualenv",[101,100783,24667],{"class":160},[101,100785,100786,100789,100792,100795],{"class":103,"line":1166},[101,100787,100788],{"class":216},"  mesa-libGL",[101,100790,100791],{"class":216}," mesa-libGLU",[101,100793,100794],{"class":216}," mesa-dri-drivers",[101,100796,24667],{"class":160},[101,100798,100799,100802,100805],{"class":103,"line":1181},[101,100800,100801],{"class":216},"  libglvnd-glx",[101,100803,100804],{"class":216}," libglvnd-opengl",[101,100806,24667],{"class":160},[101,100808,100809,100812,100815],{"class":103,"line":1187},[101,100810,100811],{"class":216},"  glfw",[101,100813,100814],{"class":216}," glfw-devel",[101,100816,24667],{"class":160},[101,100818,100819,100822,100825,100828,100831,100834],{"class":103,"line":1201},[101,100820,100821],{"class":216},"  libX11",[101,100823,100824],{"class":216}," libXcursor",[101,100826,100827],{"class":216}," libXi",[101,100829,100830],{"class":216}," libXinerama",[101,100832,100833],{"class":216}," libXrandr",[101,100835,24667],{"class":160},[101,100837,100838,100841,100844],{"class":103,"line":1207},[101,100839,100840],{"class":216},"  gcc",[101,100842,100843],{"class":216}," gcc-c++",[101,100845,100846],{"class":216}," make\n",[10,100848,100849],{},"创建 Python 环境:",[92,100851,100853],{"className":23811,"code":100852,"language":23813,"meta":20,"style":20},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[98,100854,100855,100869,100877],{"__ignoreMap":20},[101,100856,100857,100860,100863,100866],{"class":103,"line":104},[101,100858,100859],{"class":1950},"python3",[101,100861,100862],{"class":160}," -m",[101,100864,100865],{"class":216}," venv",[101,100867,100868],{"class":216}," .venv\n",[101,100870,100871,100874],{"class":103,"line":21},[101,100872,100873],{"class":160},"source",[101,100875,100876],{"class":216}," .venv\u002Fbin\u002Factivate\n",[101,100878,100879,100881,100883,100886,100888,100891],{"class":103,"line":1166},[101,100880,30369],{"class":1950},[101,100882,100862],{"class":160},[101,100884,100885],{"class":216}," pip",[101,100887,23823],{"class":216},[101,100889,100890],{"class":160}," --upgrade",[101,100892,100893],{"class":216}," pip\n",[10,100895,100896],{},"pip 安装:",[92,100898,100900],{"className":23811,"code":100899,"language":23813,"meta":20,"style":20},"pip install \"mujoco>=2.3\" numpy\n",[98,100901,100902],{"__ignoreMap":20},[101,100903,100904,100906,100908,100911],{"class":103,"line":104},[101,100905,23820],{"class":1950},[101,100907,23823],{"class":216},[101,100909,100910],{"class":216}," \"mujoco>=2.3\"",[101,100912,100913],{"class":216}," numpy\n",[10,100915,100916],{},"安装完成后，先做最小检查：",[92,100918,100920],{"className":23811,"code":100919,"language":23813,"meta":20,"style":20},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[98,100921,100922],{"__ignoreMap":20},[101,100923,100924,100926,100928],{"class":103,"line":104},[101,100925,30369],{"class":1950},[101,100927,30347],{"class":160},[101,100929,100930],{"class":216}," \"import mujoco; print(mujoco.__version__)\"\n",[10,100932,100933],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[10,100935,100936],{},"conda 安装:",[92,100938,100940],{"className":23811,"code":100939,"language":23813,"meta":20,"style":20},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[98,100941,100942,100962,100972],{"__ignoreMap":20},[101,100943,100944,100946,100948,100950,100953,100956,100959],{"class":103,"line":104},[101,100945,30319],{"class":1950},[101,100947,29165],{"class":216},[101,100949,25104],{"class":160},[101,100951,100952],{"class":216}," mujoco-study",[101,100954,100955],{"class":216}," python=",[101,100957,100958],{"class":160},"3.10",[101,100960,100961],{"class":160}," -y\n",[101,100963,100964,100966,100969],{"class":103,"line":21},[101,100965,30319],{"class":1950},[101,100967,100968],{"class":216}," activate",[101,100970,100971],{"class":216}," mujoco-study\n",[101,100973,100974,100976,100978,100980],{"class":103,"line":1166},[101,100975,23820],{"class":1950},[101,100977,23823],{"class":216},[101,100979,100910],{"class":216},[101,100981,100913],{"class":216},[10,100983,100984],{},"版本冲突说明:",[55,100986,100987,100993,101003,101012],{},[58,100988,100989,100990,28374],{},"不要安装 ",[98,100991,100992],{},"mujoco-py",[58,100994,100995,100996,100998,100999,101002],{},"如果旧项目里同时安装了 ",[98,100997,100992],{}," 和 ",[98,101000,101001],{},"mujoco","，建议新建干净虚拟环境。",[58,101004,101005,101008,101009,28374],{},[98,101006,101007],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[98,101010,101011],{},"~\u002F.mujoco\u002Fmujoco210",[58,101013,101014,101015,82528,101018,101021],{},"离屏渲染可能涉及 OpenGL 后端，",[98,101016,101017],{},"MUJOCO_GL=egl",[98,101019,101020],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[43,101023,101025],{"id":101024},"_3核心概念解释","3.核心概念解释",[10,101027,101028],{},"MuJoCo 的基本执行流程:",[92,101030,101033],{"className":101031,"code":101032,"language":5175,"meta":20},[5173],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[98,101034,101032],{"__ignoreMap":20},[10,101036,101037,101039],{},[98,101038,100689],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[10,101041,101042,101044,101045,324,101048,324,101051,324,101054,324,101057,28374],{},[98,101043,100699],{}," 存放仿真运行时状态，例如 ",[98,101046,101047],{},"data.time",[98,101049,101050],{},"data.qpos",[98,101052,101053],{},"data.qvel",[98,101055,101056],{},"data.ctrl",[98,101058,101059],{},"data.xpos",[72,101061,101063],{"id":101062},"xml-是什么","XML 是什么",[10,101065,101066],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[92,101068,101070],{"className":53056,"code":101069,"language":53058,"meta":20,"style":20},"\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",[98,101071,101072,101094,101125],{"__ignoreMap":20},[101,101073,101074,101076,101078,101080,101082,101084,101087,101089,101092],{"class":103,"line":104},[101,101075,1021],{"class":111},[101,101077,51789],{"class":51289},[101,101079,14908],{"class":1950},[101,101081,157],{"class":111},[101,101083,53480],{"class":216},[101,101085,101086],{"class":1950}," pos",[101,101088,157],{"class":111},[101,101090,101091],{"class":216},"\"0 0 1\"",[101,101093,51296],{"class":111},[101,101095,101096,101098,101101,101103,101105,101108,101110,101112,101114,101117,101119,101122],{"class":103,"line":21},[101,101097,52133],{"class":111},[101,101099,101100],{"class":51289},"geom",[101,101102,14908],{"class":1950},[101,101104,157],{"class":111},[101,101106,101107],{"class":216},"\"box_geom\"",[101,101109,53813],{"class":1950},[101,101111,157],{"class":111},[101,101113,53480],{"class":216},[101,101115,101116],{"class":1950}," size",[101,101118,157],{"class":111},[101,101120,101121],{"class":216},"\"0.1 0.1 0.1\"",[101,101123,101124],{"class":111},"\u002F>\n",[101,101126,101127,101129,101131],{"class":103,"line":1166},[101,101128,51774],{"class":111},[101,101130,51789],{"class":51289},[101,101132,51296],{"class":111},[10,101134,101135],{},"这段意思是：",[55,101137,101138,101144,101151],{},[58,101139,101140,101141,101143],{},"创建一个叫 ",[98,101142,53703],{}," 的刚体。",[58,101145,101146,101147,101150],{},"它初始放在 ",[98,101148,101149],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[58,101152,101153],{},"它里面有一个盒子形状的几何体。",[72,101155,101157],{"id":101156},"timestep-是什么","timestep 是什么",[10,101159,101160],{},"XML 里的：",[92,101162,101164],{"className":53056,"code":101163,"language":53058,"meta":20,"style":20},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[98,101165,101166],{"__ignoreMap":20},[101,101167,101168,101170,101172,101175,101177,101180,101183,101185,101188],{"class":103,"line":104},[101,101169,1021],{"class":111},[101,101171,69155],{"class":51289},[101,101173,101174],{"class":1950}," timestep",[101,101176,157],{"class":111},[101,101178,101179],{"class":216},"\"0.01\"",[101,101181,101182],{"class":1950}," gravity",[101,101184,157],{"class":111},[101,101186,101187],{"class":216},"\"0 0 -9.81\"",[101,101189,101124],{"class":111},[10,101191,101192,101193,101196,101197,101199],{},"表示每调用一次 ",[98,101194,101195],{},"mj_step","，仿真时间前进 ",[98,101198,38975],{}," 秒。循环 100 次，大约就是 1 秒：",[92,101201,101204],{"className":101202,"code":101203,"language":5175,"meta":20},[5173],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[98,101205,101203],{"__ignoreMap":20},[72,101207,101209],{"id":101208},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[10,101211,101212],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[92,101214,101217],{"className":101215,"code":101216,"language":5175,"meta":20},[5173],"x y z qw qx qy qz\n",[98,101218,101216],{"__ignoreMap":20},[10,101220,101221,101222,101225,101226,101229],{},"表示一个自由刚体的位置和姿态。其中 ",[98,101223,101224],{},"x y z"," 是位置，",[98,101227,101228],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[43,101231,101233],{"id":101232},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[10,101235,101236],{},"新建文件:",[92,101238,101240],{"className":23811,"code":101239,"language":23813,"meta":20,"style":20},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[98,101241,101242,101252,101259],{"__ignoreMap":20},[101,101243,101244,101247,101249],{"class":103,"line":104},[101,101245,101246],{"class":1950},"mkdir",[101,101248,29205],{"class":160},[101,101250,101251],{"class":216}," mujoco_tutorial\n",[101,101253,101254,101257],{"class":103,"line":21},[101,101255,101256],{"class":160},"cd",[101,101258,101251],{"class":216},[101,101260,101261,101264],{"class":103,"line":1166},[101,101262,101263],{"class":1950},"touch",[101,101265,101266],{"class":216}," ch1_first_sim.py\n",[10,101268,101269],{},"写入:",[92,101271,101273],{"className":30367,"code":101272,"language":30369,"meta":20,"style":20},"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",[98,101274,101275,101282,101286,101290,101300,101305,101310,101314,101319,101324,101328,101333,101338,101343,101348,101353,101358,101362,101366,101370,101383,101397,101407,101411,101423,101435,101447,101459,101471,101475,101492,101497,101501,101512,101523,101527,101531,101545],{"__ignoreMap":20},[101,101276,101277,101279],{"class":103,"line":104},[101,101278,30381],{"class":107},[101,101280,101281],{"class":111}," mujoco\n",[101,101283,101284],{"class":103,"line":21},[101,101285,2387],{"emptyLinePlaceholder":27},[101,101287,101288],{"class":103,"line":1166},[101,101289,2387],{"emptyLinePlaceholder":27},[101,101291,101292,101295,101297],{"class":103,"line":1181},[101,101293,101294],{"class":160},"XML",[101,101296,13552],{"class":107},[101,101298,101299],{"class":216}," \"\"\"\n",[101,101301,101302],{"class":103,"line":1187},[101,101303,101304],{"class":216},"\u003Cmujoco model=\"first_sim\">\n",[101,101306,101307],{"class":103,"line":1201},[101,101308,101309],{"class":216},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[101,101311,101312],{"class":103,"line":1207},[101,101313,2387],{"emptyLinePlaceholder":27},[101,101315,101316],{"class":103,"line":1298},[101,101317,101318],{"class":216},"  \u003Cworldbody>\n",[101,101320,101321],{"class":103,"line":1304},[101,101322,101323],{"class":216},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[101,101325,101326],{"class":103,"line":1316},[101,101327,2387],{"emptyLinePlaceholder":27},[101,101329,101330],{"class":103,"line":1599},[101,101331,101332],{"class":216},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[101,101334,101335],{"class":103,"line":1604},[101,101336,101337],{"class":216},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[101,101339,101340],{"class":103,"line":1610},[101,101341,101342],{"class":216},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[101,101344,101345],{"class":103,"line":1615},[101,101346,101347],{"class":216},"    \u003C\u002Fbody>\n",[101,101349,101350],{"class":103,"line":1629},[101,101351,101352],{"class":216},"  \u003C\u002Fworldbody>\n",[101,101354,101355],{"class":103,"line":1634},[101,101356,101357],{"class":216},"\u003C\u002Fmujoco>\n",[101,101359,101360],{"class":103,"line":1640},[101,101361,95678],{"class":216},[101,101363,101364],{"class":103,"line":1661},[101,101365,2387],{"emptyLinePlaceholder":27},[101,101367,101368],{"class":103,"line":1666},[101,101369,2387],{"emptyLinePlaceholder":27},[101,101371,101372,101374,101376,101379,101381],{"class":103,"line":1680},[101,101373,31936],{"class":107},[101,101375,1960],{"class":1950},[101,101377,101378],{"class":111},"() -> ",[101,101380,95666],{"class":160},[101,101382,3726],{"class":111},[101,101384,101385,101388,101390,101393,101395],{"class":103,"line":1685},[101,101386,101387],{"class":111},"    model ",[101,101389,157],{"class":107},[101,101391,101392],{"class":111}," mujoco.MjModel.from_xml_string(",[101,101394,101294],{"class":160},[101,101396,118],{"class":111},[101,101398,101399,101402,101404],{"class":103,"line":1714},[101,101400,101401],{"class":111},"    data ",[101,101403,157],{"class":107},[101,101405,101406],{"class":111}," mujoco.MjData(model)\n",[101,101408,101409],{"class":103,"line":1719},[101,101410,2387],{"emptyLinePlaceholder":27},[101,101412,101413,101415,101417,101420],{"class":103,"line":1736},[101,101414,31288],{"class":160},[101,101416,112],{"class":111},[101,101418,101419],{"class":216},"\"nq:\"",[101,101421,101422],{"class":111},", model.nq)\n",[101,101424,101425,101427,101429,101432],{"class":103,"line":1741},[101,101426,31288],{"class":160},[101,101428,112],{"class":111},[101,101430,101431],{"class":216},"\"nv:\"",[101,101433,101434],{"class":111},", model.nv)\n",[101,101436,101437,101439,101441,101444],{"class":103,"line":1746},[101,101438,31288],{"class":160},[101,101440,112],{"class":111},[101,101442,101443],{"class":216},"\"nu:\"",[101,101445,101446],{"class":111},", model.nu)\n",[101,101448,101449,101451,101453,101456],{"class":103,"line":1751},[101,101450,31288],{"class":160},[101,101452,112],{"class":111},[101,101454,101455],{"class":216},"\"initial time:\"",[101,101457,101458],{"class":111},", data.time)\n",[101,101460,101461,101463,101465,101468],{"class":103,"line":1765},[101,101462,31288],{"class":160},[101,101464,112],{"class":111},[101,101466,101467],{"class":216},"\"initial qpos:\"",[101,101469,101470],{"class":111},", data.qpos.copy())\n",[101,101472,101473],{"class":103,"line":1770},[101,101474,2387],{"emptyLinePlaceholder":27},[101,101476,101477,101479,101482,101484,101486,101488,101490],{"class":103,"line":2564},[101,101478,3188],{"class":107},[101,101480,101481],{"class":111}," _ ",[101,101483,26032],{"class":107},[101,101485,32432],{"class":160},[101,101487,112],{"class":111},[101,101489,422],{"class":160},[101,101491,30775],{"class":111},[101,101493,101494],{"class":103,"line":2578},[101,101495,101496],{"class":111},"        mujoco.mj_step(model, data)\n",[101,101498,101499],{"class":103,"line":2586},[101,101500,2387],{"emptyLinePlaceholder":27},[101,101502,101503,101505,101507,101510],{"class":103,"line":2591},[101,101504,31288],{"class":160},[101,101506,112],{"class":111},[101,101508,101509],{"class":216},"\"final time:\"",[101,101511,101458],{"class":111},[101,101513,101514,101516,101518,101521],{"class":103,"line":2597},[101,101515,31288],{"class":160},[101,101517,112],{"class":111},[101,101519,101520],{"class":216},"\"final qpos:\"",[101,101522,101470],{"class":111},[101,101524,101525],{"class":103,"line":2603},[101,101526,2387],{"emptyLinePlaceholder":27},[101,101528,101529],{"class":103,"line":2608},[101,101530,2387],{"emptyLinePlaceholder":27},[101,101532,101533,101535,101537,101540,101543],{"class":103,"line":7936},[101,101534,1518],{"class":107},[101,101536,31209],{"class":160},[101,101538,101539],{"class":107}," ==",[101,101541,101542],{"class":216}," \"__main__\"",[101,101544,3726],{"class":111},[101,101546,101547],{"class":103,"line":7960},[101,101548,101549],{"class":111},"    main()\n",[72,101551,101552],{"id":101552},"代码逐段解释",[10,101554,101555],{},"导入库：",[92,101557,101559],{"className":30367,"code":101558,"language":30369,"meta":20,"style":20},"import mujoco\n",[98,101560,101561],{"__ignoreMap":20},[101,101562,101563,101565],{"class":103,"line":104},[101,101564,30381],{"class":107},[101,101566,101281],{"class":111},[10,101568,101569],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[10,101571,101572],{},"定义 XML：",[92,101574,101576],{"className":30367,"code":101575,"language":30369,"meta":20,"style":20},"XML = \"\"\"\n...\n\"\"\"\n",[98,101577,101578,101586,101591],{"__ignoreMap":20},[101,101579,101580,101582,101584],{"class":103,"line":104},[101,101581,101294],{"class":160},[101,101583,13552],{"class":107},[101,101585,101299],{"class":216},[101,101587,101588],{"class":103,"line":21},[101,101589,101590],{"class":216},"...\n",[101,101592,101593],{"class":103,"line":1166},[101,101594,95678],{"class":216},[10,101596,101597,101598,101601],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[98,101599,101600],{},"freejoint"," 的方块。",[10,101603,101604],{},"编译模型：",[92,101606,101608],{"className":30367,"code":101607,"language":30369,"meta":20,"style":20},"model = mujoco.MjModel.from_xml_string(XML)\n",[98,101609,101610],{"__ignoreMap":20},[101,101611,101612,101615,101617,101619,101621],{"class":103,"line":104},[101,101613,101614],{"class":111},"model ",[101,101616,157],{"class":107},[101,101618,101392],{"class":111},[101,101620,101294],{"class":160},[101,101622,118],{"class":111},[10,101624,101625],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[10,101627,101628],{},"创建数据：",[92,101630,101632],{"className":30367,"code":101631,"language":30369,"meta":20,"style":20},"data = mujoco.MjData(model)\n",[98,101633,101634],{"__ignoreMap":20},[101,101635,101636,101639,101641],{"class":103,"line":104},[101,101637,101638],{"class":111},"data ",[101,101640,157],{"class":107},[101,101642,101406],{"class":111},[10,101644,101645,101647,101648,101650],{},[98,101646,33390],{}," 会保存仿真当前状态。刚创建时，时间是 ",[98,101649,303],{},"，方块还在初始位置。",[10,101652,101653],{},"推进仿真：",[92,101655,101657],{"className":30367,"code":101656,"language":30369,"meta":20,"style":20},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[98,101658,101659,101675],{"__ignoreMap":20},[101,101660,101661,101663,101665,101667,101669,101671,101673],{"class":103,"line":104},[101,101662,3012],{"class":107},[101,101664,101481],{"class":111},[101,101666,26032],{"class":107},[101,101668,32432],{"class":160},[101,101670,112],{"class":111},[101,101672,422],{"class":160},[101,101674,30775],{"class":111},[101,101676,101677],{"class":103,"line":21},[101,101678,101679],{"class":111},"    mujoco.mj_step(model, data)\n",[10,101681,101682,101683,101685],{},"每次 ",[98,101684,101195],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[72,101687,101688],{"id":101688},"代码逐行细讲",[10,101690,101691],{},"下面把完整代码按新手视角拆开讲。",[92,101693,101694],{"className":30367,"code":101558,"language":30369,"meta":20,"style":20},[98,101695,101696],{"__ignoreMap":20},[101,101697,101698,101700],{"class":103,"line":104},[101,101699,30381],{"class":107},[101,101701,101281],{"class":111},[10,101703,101704,101706,101707,324,101709,324,101711,28374],{},[98,101705,30381],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[98,101708,100655],{},[98,101710,100660],{},[98,101712,101713],{},"mujoco.mj_step",[92,101715,101716],{"className":30367,"code":101575,"language":30369,"meta":20,"style":20},[98,101717,101718,101726,101730],{"__ignoreMap":20},[101,101719,101720,101722,101724],{"class":103,"line":104},[101,101721,101294],{"class":160},[101,101723,13552],{"class":107},[101,101725,101299],{"class":216},[101,101727,101728],{"class":103,"line":21},[101,101729,101590],{"class":216},[101,101731,101732],{"class":103,"line":1166},[101,101733,95678],{"class":216},[10,101735,101736,101738,101739,101742],{},[98,101737,101294],{}," 是一个变量名。右边的三引号 ",[98,101740,101741],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[92,101744,101745],{"className":53056,"code":101304,"language":53058,"meta":20,"style":20},[98,101746,101747],{"__ignoreMap":20},[101,101748,101749,101751,101753,101756,101758,101761],{"class":103,"line":104},[101,101750,1021],{"class":111},[101,101752,101001],{"class":51289},[101,101754,101755],{"class":1950}," model",[101,101757,157],{"class":111},[101,101759,101760],{"class":216},"\"first_sim\"",[101,101762,51296],{"class":111},[10,101764,101765,101766,101769,101770,28374],{},"这是 XML 的根标签。",[98,101767,101768],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[98,101771,101772],{},"first_sim",[92,101774,101775],{"className":53056,"code":101163,"language":53058,"meta":20,"style":20},[98,101776,101777],{"__ignoreMap":20},[101,101778,101779,101781,101783,101785,101787,101789,101791,101793,101795],{"class":103,"line":104},[101,101780,1021],{"class":111},[101,101782,69155],{"class":51289},[101,101784,101174],{"class":1950},[101,101786,157],{"class":111},[101,101788,101179],{"class":216},[101,101790,101182],{"class":1950},[101,101792,157],{"class":111},[101,101794,101187],{"class":216},[101,101796,101124],{"class":111},[10,101798,101799,101801,101802,101805,101806,101809],{},[98,101800,69155],{}," 用来设置仿真参数。",[98,101803,101804],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[98,101807,101808],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[92,101811,101813],{"className":53056,"code":101812,"language":53058,"meta":20,"style":20},"\u003Cworldbody>\n",[98,101814,101815],{"__ignoreMap":20},[101,101816,101817,101819,101822],{"class":103,"line":104},[101,101818,1021],{"class":111},[101,101820,101821],{"class":51289},"worldbody",[101,101823,51296],{"class":111},[10,101825,101826,101828],{},[98,101827,101821],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[92,101830,101832],{"className":53056,"code":101831,"language":53058,"meta":20,"style":20},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[98,101833,101834],{"__ignoreMap":20},[101,101835,101836,101838,101840,101842,101844,101847,101849,101851,101854,101856,101858,101861,101863,101865,101868],{"class":103,"line":104},[101,101837,1021],{"class":111},[101,101839,101100],{"class":51289},[101,101841,14908],{"class":1950},[101,101843,157],{"class":111},[101,101845,101846],{"class":216},"\"floor\"",[101,101848,53813],{"class":1950},[101,101850,157],{"class":111},[101,101852,101853],{"class":216},"\"plane\"",[101,101855,101116],{"class":1950},[101,101857,157],{"class":111},[101,101859,101860],{"class":216},"\"2 2 0.1\"",[101,101862,78756],{"class":1950},[101,101864,157],{"class":111},[101,101866,101867],{"class":216},"\"0.8 0.8 0.8 1\"",[101,101869,101124],{"class":111},[10,101871,101872,101873,101875,101876,101879,101880,101883,101884,101886],{},"这行创建地面。",[98,101874,101100],{}," 是几何体。",[98,101877,101878],{},"name=\"floor\""," 是名字。",[98,101881,101882],{},"type=\"plane\""," 表示平面。",[98,101885,55099],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[92,101888,101890],{"className":53056,"code":101889,"language":53058,"meta":20,"style":20},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[98,101891,101892],{"__ignoreMap":20},[101,101893,101894,101896,101898,101900,101902,101904,101906,101908,101910],{"class":103,"line":104},[101,101895,1021],{"class":111},[101,101897,51789],{"class":51289},[101,101899,14908],{"class":1950},[101,101901,157],{"class":111},[101,101903,53480],{"class":216},[101,101905,101086],{"class":1950},[101,101907,157],{"class":111},[101,101909,101091],{"class":216},[101,101911,51296],{"class":111},[10,101913,101914,101915,28374,101917,101920,101921,101923],{},"这行创建一个刚体，名字叫 ",[98,101916,53703],{},[98,101918,101919],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[98,101922,101149],{},"，也就是离地面 1 米高。",[92,101925,101927],{"className":53056,"code":101926,"language":53058,"meta":20,"style":20},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[98,101928,101929],{"__ignoreMap":20},[101,101930,101931,101933,101935,101937,101939,101942],{"class":103,"line":104},[101,101932,1021],{"class":111},[101,101934,101600],{"class":51289},[101,101936,14908],{"class":1950},[101,101938,157],{"class":111},[101,101940,101941],{"class":216},"\"box_free\"",[101,101943,101124],{"class":111},[10,101945,101946,101947,101949],{},"这行很重要。",[98,101948,101600],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[92,101951,101953],{"className":53056,"code":101952,"language":53058,"meta":20,"style":20},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[98,101954,101955],{"__ignoreMap":20},[101,101956,101957,101959,101961,101963,101965,101967,101969,101971,101973,101975,101977,101979,101982,101984,101986,101988,101990,101993],{"class":103,"line":104},[101,101958,1021],{"class":111},[101,101960,101100],{"class":51289},[101,101962,14908],{"class":1950},[101,101964,157],{"class":111},[101,101966,101107],{"class":216},[101,101968,53813],{"class":1950},[101,101970,157],{"class":111},[101,101972,53480],{"class":216},[101,101974,101116],{"class":1950},[101,101976,157],{"class":111},[101,101978,101121],{"class":216},[101,101980,101981],{"class":1950}," mass",[101,101983,157],{"class":111},[101,101985,3665],{"class":216},[101,101987,78756],{"class":1950},[101,101989,157],{"class":111},[101,101991,101992],{"class":216},"\"1 0 0 1\"",[101,101994,101124],{"class":111},[10,101996,101997,101998,102001,102002,102005,102006,102009,102010,102013],{},"这行给 box body 添加一个盒子形状。",[98,101999,102000],{},"type=\"box\""," 表示形状是盒子。",[98,102003,102004],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[98,102007,102008],{},"mass=\"1\""," 表示质量是 1。",[98,102011,102012],{},"rgba=\"1 0 0 1\""," 表示红色。",[92,102015,102017],{"className":30367,"code":102016,"language":30369,"meta":20,"style":20},"def main() -> None:\n",[98,102018,102019],{"__ignoreMap":20},[101,102020,102021,102023,102025,102027,102029],{"class":103,"line":104},[101,102022,31936],{"class":107},[101,102024,1960],{"class":1950},[101,102026,101378],{"class":111},[101,102028,95666],{"class":160},[101,102030,3726],{"class":111},[10,102032,102033,102035,102036,102039,102040,102043],{},[98,102034,31936],{}," 用来定义函数。这里定义了一个叫 ",[98,102037,102038],{},"main"," 的函数。",[98,102041,102042],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[92,102045,102046],{"className":30367,"code":101607,"language":30369,"meta":20,"style":20},[98,102047,102048],{"__ignoreMap":20},[101,102049,102050,102052,102054,102056,102058],{"class":103,"line":104},[101,102051,101614],{"class":111},[101,102053,157],{"class":107},[101,102055,101392],{"class":111},[101,102057,101294],{"class":160},[101,102059,118],{"class":111},[10,102061,102062,102063,102066],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[98,102064,102065],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[92,102068,102069],{"className":30367,"code":101631,"language":30369,"meta":20,"style":20},[98,102070,102071],{"__ignoreMap":20},[101,102072,102073,102075,102077],{"class":103,"line":104},[101,102074,101638],{"class":111},[101,102076,157],{"class":107},[101,102078,101406],{"class":111},[10,102080,102081,102082,102084,102085,102087],{},"这行创建仿真数据。",[98,102083,33390],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[98,102086,33390],{}," 都会变化。",[92,102089,102091],{"className":30367,"code":102090,"language":30369,"meta":20,"style":20},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[98,102092,102093,102103,102113],{"__ignoreMap":20},[101,102094,102095,102097,102099,102101],{"class":103,"line":104},[101,102096,30404],{"class":160},[101,102098,112],{"class":111},[101,102100,101419],{"class":216},[101,102102,101422],{"class":111},[101,102104,102105,102107,102109,102111],{"class":103,"line":21},[101,102106,30404],{"class":160},[101,102108,112],{"class":111},[101,102110,101431],{"class":216},[101,102112,101434],{"class":111},[101,102114,102115,102117,102119,102121],{"class":103,"line":1166},[101,102116,30404],{"class":160},[101,102118,112],{"class":111},[101,102120,101443],{"class":216},[101,102122,101446],{"class":111},[10,102124,102125,102127,102128,102131,102132,102135,102136,102139,102140,102143],{},[98,102126,30404],{}," 用来输出信息。",[98,102129,102130],{},"model.nq"," 是位置变量数量，",[98,102133,102134],{},"model.nv"," 是速度变量数量，",[98,102137,102138],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[98,102141,102142],{},"nu"," 是 0。",[92,102145,102147],{"className":30367,"code":102146,"language":30369,"meta":20,"style":20},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[98,102148,102149,102159],{"__ignoreMap":20},[101,102150,102151,102153,102155,102157],{"class":103,"line":104},[101,102152,30404],{"class":160},[101,102154,112],{"class":111},[101,102156,101455],{"class":216},[101,102158,101458],{"class":111},[101,102160,102161,102163,102165,102167],{"class":103,"line":21},[101,102162,30404],{"class":160},[101,102164,112],{"class":111},[101,102166,101467],{"class":216},[101,102168,101470],{"class":111},[10,102170,102171,102172,102174,102175,102177,102178,102181],{},"这里打印初始时间和初始位置。",[98,102173,101047],{}," 一开始是 0。",[98,102176,101050],{}," 是位置数组。",[98,102179,102180],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[92,102183,102184],{"className":30367,"code":101656,"language":30369,"meta":20,"style":20},[98,102185,102186,102202],{"__ignoreMap":20},[101,102187,102188,102190,102192,102194,102196,102198,102200],{"class":103,"line":104},[101,102189,3012],{"class":107},[101,102191,101481],{"class":111},[101,102193,26032],{"class":107},[101,102195,32432],{"class":160},[101,102197,112],{"class":111},[101,102199,422],{"class":160},[101,102201,30775],{"class":111},[101,102203,102204],{"class":103,"line":21},[101,102205,101679],{"class":111},[10,102207,102208,102210,102211,102214,102215,102217,102218,102220],{},[98,102209,3012],{}," 是循环。",[98,102212,102213],{},"range(100)"," 表示循环 100 次。",[98,102216,1103],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[98,102219,101195],{},"，仿真就前进一步。",[92,102222,102224],{"className":30367,"code":102223,"language":30369,"meta":20,"style":20},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[98,102225,102226,102236],{"__ignoreMap":20},[101,102227,102228,102230,102232,102234],{"class":103,"line":104},[101,102229,30404],{"class":160},[101,102231,112],{"class":111},[101,102233,101509],{"class":216},[101,102235,101458],{"class":111},[101,102237,102238,102240,102242,102244],{"class":103,"line":21},[101,102239,30404],{"class":160},[101,102241,112],{"class":111},[101,102243,101520],{"class":216},[101,102245,101470],{"class":111},[10,102247,102248],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[92,102250,102252],{"className":30367,"code":102251,"language":30369,"meta":20,"style":20},"if __name__ == \"__main__\":\n    main()\n",[98,102253,102254,102266],{"__ignoreMap":20},[101,102255,102256,102258,102260,102262,102264],{"class":103,"line":104},[101,102257,1518],{"class":107},[101,102259,31209],{"class":160},[101,102261,101539],{"class":107},[101,102263,101542],{"class":216},[101,102265,3726],{"class":111},[101,102267,102268],{"class":103,"line":21},[101,102269,101549],{"class":111},[10,102271,102272,102273,102276,102277,28374],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[98,102274,102275],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[98,102278,102275],{},[10,102280,102281],{},"运行:",[92,102283,102285],{"className":23811,"code":102284,"language":23813,"meta":20,"style":20},"python ch1_first_sim.py\n",[98,102286,102287],{"__ignoreMap":20},[101,102288,102289,102291],{"class":103,"line":104},[101,102290,30369],{"class":1950},[101,102292,101266],{"class":216},[43,102294,102296],{"id":102295},"_5运行结果说明","5.运行结果说明",[10,102298,102299],{},"你应该看到类似输出:",[92,102301,102304],{"className":102302,"code":102303,"language":5175,"meta":20},[5173],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[98,102305,102303],{"__ignoreMap":20},[10,102307,102308,102310,102311,102314,102315,28374],{},[98,102309,101600],{}," 有 7 个位置变量: ",[98,102312,102313],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[98,102316,102317],{},"vx vy vz wx wy wz",[10,102319,102320,102321,102324],{},"你还会看到 ",[98,102322,102323],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[43,102326,102328],{"id":102327},"_6验证步骤","6.验证步骤",[10,102330,102331],{},"确认版本:",[92,102333,102334],{"className":23811,"code":100919,"language":23813,"meta":20,"style":20},[98,102335,102336],{"__ignoreMap":20},[101,102337,102338,102340,102342],{"class":103,"line":104},[101,102339,30369],{"class":1950},[101,102341,30347],{"class":160},[101,102343,100930],{"class":216},[10,102345,102346],{},"确认导入的是官方 bindings:",[92,102348,102350],{"className":23811,"code":102349,"language":23813,"meta":20,"style":20},"python -c \"import mujoco; print(mujoco)\"\n",[98,102351,102352],{"__ignoreMap":20},[101,102353,102354,102356,102358],{"class":103,"line":104},[101,102355,30369],{"class":1950},[101,102357,30347],{"class":160},[101,102359,102360],{"class":216}," \"import mujoco; print(mujoco)\"\n",[10,102362,102363],{},"运行程序:",[92,102365,102366],{"className":23811,"code":102284,"language":23813,"meta":20,"style":20},[98,102367,102368],{"__ignoreMap":20},[101,102369,102370,102372],{"class":103,"line":104},[101,102371,30369],{"class":1950},[101,102373,101266],{"class":216},[10,102375,102376,102377,102380,102381,28374],{},"检查 ",[98,102378,102379],{},"final time"," 是否约等于 ",[98,102382,102383],{},"1.0",[10,102385,102386],{},"再做几个小实验：",[55,102388,102389,102399,102407,102420],{},[58,102390,102391,102392,102394,102395,102398],{},"把 ",[98,102393,101919],{}," 改成 ",[98,102396,102397],{},"pos=\"0 0 2\"","，观察初始高度变化。",[58,102400,102391,102401,102394,102403,102406],{},[98,102402,101808],{},[98,102404,102405],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[58,102408,102391,102409,102394,102411,102414,102415,102417,102418,28374],{},[98,102410,101804],{},[98,102412,102413],{},"timestep=\"0.005\"","，观察 100 步后的 ",[98,102416,102379],{}," 是否变成约 ",[98,102419,35318],{},[58,102421,102422,102423,102426],{},"删除 ",[98,102424,102425],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[10,102428,102429],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[43,102431,102433],{"id":102432},"_7常见错误与解决方案","7.常见错误与解决方案",[72,102435,102437],{"id":102436},"modulenotfounderror-no-module-named-mujoco",[98,102438,102439],{},"ModuleNotFoundError: No module named 'mujoco'",[10,102441,102442],{},"解决:",[92,102444,102446],{"className":23811,"code":102445,"language":23813,"meta":20,"style":20},"pip install \"mujoco>=2.3\"\n",[98,102447,102448],{"__ignoreMap":20},[101,102449,102450,102452,102454],{"class":103,"line":104},[101,102451,23820],{"class":1950},[101,102453,23823],{"class":216},[101,102455,102456],{"class":216}," \"mujoco>=2.3\"\n",[72,102458,102460],{"id":102459},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[10,102462,102463],{},"先安装系统依赖:",[92,102465,102467],{"className":23811,"code":102466,"language":23813,"meta":20,"style":20},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[98,102468,102469],{"__ignoreMap":20},[101,102470,102471,102473,102475,102477,102479,102482,102484,102487,102489,102492,102494],{"class":103,"line":104},[101,102472,24565],{"class":1950},[101,102474,26304],{"class":216},[101,102476,23823],{"class":216},[101,102478,26389],{"class":160},[101,102480,102481],{"class":216}," mesa-libGL",[101,102483,100794],{"class":216},[101,102485,102486],{"class":216}," glfw",[101,102488,100814],{"class":216},[101,102490,102491],{"class":216}," libX11",[101,102493,100827],{"class":216},[101,102495,102496],{"class":216}," libXrandr\n",[72,102498,102500],{"id":102499},"xml-解析失败","XML 解析失败",[10,102502,102503],{},"检查:",[55,102505,102506,102509,102512,102518],{},[58,102507,102508],{},"标签是否闭合",[58,102510,102511],{},"属性是否带引号",[58,102513,102514,102515],{},"根节点是否是 ",[98,102516,102517],{},"\u003Cmujoco>",[58,102519,102520,102522,102523,102526],{},[98,102521,51789],{}," 是否放在 ",[98,102524,102525],{},"\u003Cworldbody>"," 内部",[72,102528,102530,102532,102533],{"id":102529},"final-time-不是严格等于-10",[98,102531,102379],{}," 不是严格等于 ",[98,102534,102383],{},[10,102536,102537],{},"这通常不是错误。浮点数计算可能得到：",[92,102539,102542],{"className":102540,"code":102541,"language":5175,"meta":20},[5173],"1.0000000000000007\n",[98,102543,102541],{"__ignoreMap":20},[10,102545,102546,102547,102549],{},"只要接近 ",[98,102548,102383],{}," 就正常。",[72,102551,102552],{"id":102552},"方块没有掉下来",[10,102554,102555],{},"检查：",[55,102557,102558,102564,102570,102575],{},[58,102559,102560,102561],{},"方块 body 里是否有 ",[98,102562,102563],{},"\u003Cfreejoint\u002F>",[58,102565,102566,102567],{},"重力是否是 ",[98,102568,102569],{},"0 0 -9.81",[58,102571,102572,102573],{},"是否真的调用了 ",[98,102574,100665],{},[58,102576,102577,102578,102580,102581],{},"你看的是否是 ",[98,102579,102323],{},"，不是 ",[98,102582,102583],{},"initial qpos",[43,102585,102587],{"id":102586},"_8本章小结","8.本章小结",[10,102589,102590],{},"本章你已经完成了 MuJoCo 的最小闭环：",[92,102592,102595],{"className":102593,"code":102594,"language":5175,"meta":20},[5173],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[98,102596,102594],{"__ignoreMap":20},[10,102598,102599],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5114,102601,102602],{},"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":20,"searchDepth":21,"depth":21,"links":102604},[102605,102606,102607,102612,102616,102617,102618,102626],{"id":100626,"depth":21,"text":100627},{"id":100749,"depth":21,"text":100750},{"id":101024,"depth":21,"text":101025,"children":102608},[102609,102610,102611],{"id":101062,"depth":1166,"text":101063},{"id":101156,"depth":1166,"text":101157},{"id":101208,"depth":1166,"text":101209},{"id":101232,"depth":21,"text":101233,"children":102613},[102614,102615],{"id":101552,"depth":1166,"text":101552},{"id":101688,"depth":1166,"text":101688},{"id":102295,"depth":21,"text":102296},{"id":102327,"depth":21,"text":102328},{"id":102432,"depth":21,"text":102433,"children":102619},[102620,102621,102622,102623,102625],{"id":102436,"depth":1166,"text":102439},{"id":102459,"depth":1166,"text":102460},{"id":102499,"depth":1166,"text":102500},{"id":102529,"depth":1166,"text":102624},"final time 不是严格等于 1.0",{"id":102552,"depth":1166,"text":102552},{"id":102586,"depth":21,"text":102587},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100618,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102633,"title":102634,"body":102635,"description":20,"extension":24,"meta":104291,"navigation":27,"path":104292,"seo":104293,"stem":104294,"__hash__":104295},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102636,"toc":104267},[102637,102640,102642,102645,102648,102665,102760,102763,102769,102771,102773,102797,102800,102814,102817,102858,102860,102873,102875,102878,102926,102938,102941,102944,102950,102963,103030,103033,103052,103055,103058,103064,103066,103075,103078,103082,103091,103173,103182,103186,103192,103206,103216,103218,103548,103551,103563,103565,103576,103578,103581,103599,103602,103605,103623,103634,103637,103652,103662,103664,103685,103702,103722,103728,103768,103784,103800,103806,103809,103833,103849,103854,103884,103901,103926,103929,103944,103953,103968,103977,103992,103999,104001,104011,104024,104031,104034,104073,104080,104082,104134,104136,104142,104145,104152,104159,104162,104164,104182,104185,104188,104222,104234,104236,104239,104261,104264],[39,102638,102634],{"id":102639},"_2xml-与-mjcf-物理建模基础",[43,102641,100627],{"id":100626},[10,102643,102644],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[10,102646,102647],{},"本章结束后，你应该能看懂一个简单模型里：",[55,102649,102650,102653,102656,102659,102662],{},[58,102651,102652],{},"地面在哪里。",[58,102654,102655],{},"物体初始位置在哪里。",[58,102657,102658],{},"几何体是什么形状。",[58,102660,102661],{},"哪些 body 可以自由运动。",[58,102663,102664],{},"如何用名字在 Python 里找到 XML 中的对象。",[249,102666,102667,102677],{},[252,102668,102669],{},[255,102670,102671,102674],{},[258,102672,102673],{"align":23725},"标签",[258,102675,102676],{"align":23725},"作用",[296,102678,102679,102688,102698,102707,102717,102727,102740,102750],{},[255,102680,102681,102685],{},[301,102682,102683],{"align":23725},[98,102684,102517],{},[301,102686,102687],{"align":23725},"根节点",[255,102689,102690,102695],{},[301,102691,102692],{"align":23725},[98,102693,102694],{},"\u003Coption>",[301,102696,102697],{"align":23725},"仿真参数",[255,102699,102700,102704],{},[301,102701,102702],{"align":23725},[98,102703,102525],{},[301,102705,102706],{"align":23725},"世界中的物体",[255,102708,102709,102714],{},[301,102710,102711],{"align":23725},[98,102712,102713],{},"\u003Cbody>",[301,102715,102716],{"align":23725},"刚体",[255,102718,102719,102724],{},[301,102720,102721],{"align":23725},[98,102722,102723],{},"\u003Cgeom>",[301,102725,102726],{"align":23725},"几何体、碰撞体、可视体",[255,102728,102729,102737],{},[301,102730,102731,24967,102734],{"align":23725},[98,102732,102733],{},"\u003Cjoint>",[98,102735,102736],{},"\u003Cfreejoint>",[301,102738,102739],{"align":23725},"关节",[255,102741,102742,102747],{},[301,102743,102744],{"align":23725},[98,102745,102746],{},"\u003Csite>",[301,102748,102749],{"align":23725},"标记点",[255,102751,102752,102757],{},[301,102753,102754],{"align":23725},[98,102755,102756],{},"\u003Cactuator>",[301,102758,102759],{"align":23725},"控制器",[10,102761,102762],{},"初学时可以先记住：",[92,102764,102767],{"className":102765,"code":102766,"language":5175,"meta":20},[5173],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[98,102768,102766],{"__ignoreMap":20},[43,102770,100750],{"id":100749},[10,102772,100753],{},[92,102774,102776],{"className":23811,"code":102775,"language":23813,"meta":20,"style":20},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[98,102777,102778],{"__ignoreMap":20},[101,102779,102780,102782,102784,102786,102788,102790,102792,102794],{"class":103,"line":104},[101,102781,24565],{"class":1950},[101,102783,26304],{"class":216},[101,102785,23823],{"class":216},[101,102787,26389],{"class":160},[101,102789,102481],{"class":216},[101,102791,100794],{"class":216},[101,102793,102486],{"class":216},[101,102795,102796],{"class":216}," glfw-devel\n",[10,102798,102799],{},"pip:",[92,102801,102802],{"className":23811,"code":100899,"language":23813,"meta":20,"style":20},[98,102803,102804],{"__ignoreMap":20},[101,102805,102806,102808,102810,102812],{"class":103,"line":104},[101,102807,23820],{"class":1950},[101,102809,23823],{"class":216},[101,102811,100910],{"class":216},[101,102813,100913],{"class":216},[10,102815,102816],{},"conda:",[92,102818,102820],{"className":23811,"code":102819,"language":23813,"meta":20,"style":20},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[98,102821,102822,102839,102848],{"__ignoreMap":20},[101,102823,102824,102826,102828,102830,102833,102835,102837],{"class":103,"line":104},[101,102825,30319],{"class":1950},[101,102827,29165],{"class":216},[101,102829,25104],{"class":160},[101,102831,102832],{"class":216}," mujoco-xml",[101,102834,100955],{"class":216},[101,102836,100958],{"class":160},[101,102838,100961],{"class":160},[101,102840,102841,102843,102845],{"class":103,"line":21},[101,102842,30319],{"class":1950},[101,102844,100968],{"class":216},[101,102846,102847],{"class":216}," mujoco-xml\n",[101,102849,102850,102852,102854,102856],{"class":103,"line":1166},[101,102851,23820],{"class":1950},[101,102853,23823],{"class":216},[101,102855,100910],{"class":216},[101,102857,100913],{"class":216},[10,102859,100984],{},[55,102861,102862,102865,102870],{},[58,102863,102864],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[58,102866,102867,102868,28374],{},"本章使用基础标签，适用于 ",[98,102869,101007],{},[58,102871,102872],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[43,102874,101025],{"id":101024},[10,102876,102877],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[92,102879,102881],{"className":53056,"code":102880,"language":53058,"meta":20,"style":20},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[98,102882,102883,102897,102905,102910,102918],{"__ignoreMap":20},[101,102884,102885,102887,102889,102891,102893,102895],{"class":103,"line":104},[101,102886,1021],{"class":111},[101,102888,101001],{"class":51289},[101,102890,101755],{"class":1950},[101,102892,157],{"class":111},[101,102894,62668],{"class":216},[101,102896,51296],{"class":111},[101,102898,102899,102901,102903],{"class":103,"line":21},[101,102900,52133],{"class":111},[101,102902,101821],{"class":51289},[101,102904,51296],{"class":111},[101,102906,102907],{"class":103,"line":1166},[101,102908,102909],{"class":111},"    ...\n",[101,102911,102912,102914,102916],{"class":103,"line":1181},[101,102913,52406],{"class":111},[101,102915,101821],{"class":51289},[101,102917,51296],{"class":111},[101,102919,102920,102922,102924],{"class":103,"line":1187},[101,102921,51774],{"class":111},[101,102923,101001],{"class":51289},[101,102925,51296],{"class":111},[10,102927,102928,102930,102931,102933,102934,102937],{},[98,102929,51789],{}," 表示刚体。",[98,102932,101100],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[98,102935,102936],{},"joint"," 表示刚体相对父刚体如何运动。",[72,102939,102940],{"id":102940},"层级结构非常重要",[10,102942,102943],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[92,102945,102948],{"className":102946,"code":102947,"language":5175,"meta":20},[5173],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[98,102949,102947],{"__ignoreMap":20},[10,102951,102952,100998,102955,102958,102959,102962],{},[98,102953,102954],{},"red_box_geom",[98,102956,102957],{},"box_center"," 都属于 ",[98,102960,102961],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[92,102964,102966],{"className":53056,"code":102965,"language":53058,"meta":20,"style":20},"\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",[98,102967,102968,102988,103002,103022],{"__ignoreMap":20},[101,102969,102970,102972,102974,102976,102978,102980,102982,102984,102986],{"class":103,"line":104},[101,102971,1021],{"class":111},[101,102973,51789],{"class":51289},[101,102975,14908],{"class":1950},[101,102977,157],{"class":111},[101,102979,53480],{"class":216},[101,102981,101086],{"class":1950},[101,102983,157],{"class":111},[101,102985,101091],{"class":216},[101,102987,51296],{"class":111},[101,102989,102990,102992,102994,102996,102998,103000],{"class":103,"line":21},[101,102991,52133],{"class":111},[101,102993,101600],{"class":51289},[101,102995,14908],{"class":1950},[101,102997,157],{"class":111},[101,102999,101941],{"class":216},[101,103001,101124],{"class":111},[101,103003,103004,103006,103008,103010,103012,103014,103016,103018,103020],{"class":103,"line":1166},[101,103005,52133],{"class":111},[101,103007,101100],{"class":51289},[101,103009,53813],{"class":1950},[101,103011,157],{"class":111},[101,103013,53480],{"class":216},[101,103015,101116],{"class":1950},[101,103017,157],{"class":111},[101,103019,101121],{"class":216},[101,103021,101124],{"class":111},[101,103023,103024,103026,103028],{"class":103,"line":1181},[101,103025,51774],{"class":111},[101,103027,51789],{"class":51289},[101,103029,51296],{"class":111},[10,103031,103032],{},"含义:",[55,103034,103035,103041,103046,103049],{},[58,103036,103037,103038,103040],{},"创建名为 ",[98,103039,53703],{}," 的刚体",[58,103042,103043,103044],{},"初始位置在世界坐标 ",[98,103045,101149],{},[58,103047,103048],{},"它有一个自由关节",[58,103050,103051],{},"它有一个盒子几何体",[72,103053,103054],{"id":103054},"坐标怎么理解",[10,103056,103057],{},"MuJoCo 默认使用三维坐标：",[92,103059,103062],{"className":103060,"code":103061,"language":5175,"meta":20},[5173],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[98,103063,103061],{"__ignoreMap":20},[10,103065,14621],{},[92,103067,103069],{"className":53056,"code":103068,"language":53058,"meta":20,"style":20},"pos=\"0 0 1\"\n",[98,103070,103071],{"__ignoreMap":20},[101,103072,103073],{"class":103,"line":104},[101,103074,103068],{"class":111},[10,103076,103077],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[72,103079,103081],{"id":103080},"geom-的-size-怎么理解","geom 的 size 怎么理解",[10,103083,103084,103085,82519,103088,103090],{},"不同 ",[98,103086,103087],{},"type",[98,103089,31485],{}," 含义不同：",[249,103092,103093,103108],{},[252,103094,103095],{},[255,103096,103097,103101,103106],{},[258,103098,103099],{"align":23725},[98,103100,103087],{},[258,103102,103103,103105],{"align":23725},[98,103104,31485],{}," 示例",[258,103107,100680],{"align":23725},[296,103109,103110,103124,103139,103158],{},[255,103111,103112,103116,103121],{},[301,103113,103114],{"align":23725},[98,103115,53703],{},[301,103117,103118],{"align":23725},[98,103119,103120],{},"size=\"0.1 0.2 0.3\"",[301,103122,103123],{"align":23725},"x\u002Fy\u002Fz 半边长，不是完整长度",[255,103125,103126,103131,103136],{},[301,103127,103128],{"align":23725},[98,103129,103130],{},"sphere",[301,103132,103133],{"align":23725},[98,103134,103135],{},"size=\"0.1\"",[301,103137,103138],{"align":23725},"球半径",[255,103140,103141,103146,103151],{},[301,103142,103143],{"align":23725},[98,103144,103145],{},"capsule",[301,103147,103148],{"align":23725},[98,103149,103150],{},"size=\"0.03\"",[301,103152,103153,103154,103157],{"align":23725},"胶囊半径，长度常用 ",[98,103155,103156],{},"fromto"," 指定",[255,103159,103160,103165,103170],{},[301,103161,103162],{"align":23725},[98,103163,103164],{},"plane",[301,103166,103167],{"align":23725},[98,103168,103169],{},"size=\"3 3 0.1\"",[301,103171,103172],{"align":23725},"可视平面大小，通常当地面",[10,103174,103175,103176,103178,103179,103181],{},"最容易踩坑的是 box：",[98,103177,102004],{}," 表示边长大约是 ",[98,103180,32026],{},"，因为 MuJoCo 用的是半边长。",[72,103183,103185],{"id":103184},"site-是什么","site 是什么",[10,103187,103188,103191],{},[98,103189,103190],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[55,103193,103194,103197,103200,103203],{},[58,103195,103196],{},"标记机械臂末端。",[58,103198,103199],{},"标记目标位置。",[58,103201,103202],{},"放传感器或相机参考点。",[58,103204,103205],{},"在 Python 中读取某个关键点的世界坐标。",[10,103207,103208,103209,100998,103212,103215],{},"在后面的 Reacher 任务中，",[98,103210,103211],{},"tip",[98,103213,103214],{},"target"," 就会用 site 表示。",[43,103217,101233],{"id":101232},[92,103219,103221],{"className":30367,"code":103220,"language":30369,"meta":20,"style":20},"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",[98,103222,103223,103229,103239,103243,103247,103255,103260,103264,103268,103272,103277,103281,103286,103291,103296,103301,103305,103309,103313,103317,103321,103325,103337,103349,103357,103361,103376,103391,103395,103408,103423,103436,103449,103453,103469,103473,103477,103488,103500,103512,103524,103528,103532,103544],{"__ignoreMap":20},[101,103224,103225,103227],{"class":103,"line":104},[101,103226,30381],{"class":107},[101,103228,101281],{"class":111},[101,103230,103231,103233,103235,103237],{"class":103,"line":21},[101,103232,30381],{"class":107},[101,103234,31369],{"class":111},[101,103236,31372],{"class":107},[101,103238,31375],{"class":111},[101,103240,103241],{"class":103,"line":1166},[101,103242,2387],{"emptyLinePlaceholder":27},[101,103244,103245],{"class":103,"line":1181},[101,103246,2387],{"emptyLinePlaceholder":27},[101,103248,103249,103251,103253],{"class":103,"line":1187},[101,103250,101294],{"class":160},[101,103252,13552],{"class":107},[101,103254,101299],{"class":216},[101,103256,103257],{"class":103,"line":1201},[101,103258,103259],{"class":216},"\u003Cmujoco model=\"xml_basic\">\n",[101,103261,103262],{"class":103,"line":1207},[101,103263,101309],{"class":216},[101,103265,103266],{"class":103,"line":1298},[101,103267,2387],{"emptyLinePlaceholder":27},[101,103269,103270],{"class":103,"line":1304},[101,103271,101318],{"class":216},[101,103273,103274],{"class":103,"line":1316},[101,103275,103276],{"class":216},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[101,103278,103279],{"class":103,"line":1599},[101,103280,2387],{"emptyLinePlaceholder":27},[101,103282,103283],{"class":103,"line":1604},[101,103284,103285],{"class":216},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[101,103287,103288],{"class":103,"line":1610},[101,103289,103290],{"class":216},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[101,103292,103293],{"class":103,"line":1615},[101,103294,103295],{"class":216},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[101,103297,103298],{"class":103,"line":1629},[101,103299,103300],{"class":216},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[101,103302,103303],{"class":103,"line":1634},[101,103304,101347],{"class":216},[101,103306,103307],{"class":103,"line":1640},[101,103308,101352],{"class":216},[101,103310,103311],{"class":103,"line":1661},[101,103312,101357],{"class":216},[101,103314,103315],{"class":103,"line":1666},[101,103316,95678],{"class":216},[101,103318,103319],{"class":103,"line":1680},[101,103320,2387],{"emptyLinePlaceholder":27},[101,103322,103323],{"class":103,"line":1685},[101,103324,2387],{"emptyLinePlaceholder":27},[101,103326,103327,103329,103331,103333,103335],{"class":103,"line":1714},[101,103328,31936],{"class":107},[101,103330,1960],{"class":1950},[101,103332,101378],{"class":111},[101,103334,95666],{"class":160},[101,103336,3726],{"class":111},[101,103338,103339,103341,103343,103345,103347],{"class":103,"line":1719},[101,103340,101387],{"class":111},[101,103342,157],{"class":107},[101,103344,101392],{"class":111},[101,103346,101294],{"class":160},[101,103348,118],{"class":111},[101,103350,103351,103353,103355],{"class":103,"line":1736},[101,103352,101401],{"class":111},[101,103354,157],{"class":107},[101,103356,101406],{"class":111},[101,103358,103359],{"class":103,"line":1741},[101,103360,2387],{"emptyLinePlaceholder":27},[101,103362,103363,103366,103368,103371,103374],{"class":103,"line":1746},[101,103364,103365],{"class":111},"    box_body_id ",[101,103367,157],{"class":107},[101,103369,103370],{"class":111}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[101,103372,103373],{"class":216},"\"red_box\"",[101,103375,118],{"class":111},[101,103377,103378,103381,103383,103386,103389],{"class":103,"line":1751},[101,103379,103380],{"class":111},"    site_id ",[101,103382,157],{"class":107},[101,103384,103385],{"class":111}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[101,103387,103388],{"class":216},"\"box_center\"",[101,103390,118],{"class":111},[101,103392,103393],{"class":103,"line":1765},[101,103394,2387],{"emptyLinePlaceholder":27},[101,103396,103397,103399,103402,103404,103406],{"class":103,"line":1770},[101,103398,3088],{"class":107},[101,103400,103401],{"class":111}," box_body_id ",[101,103403,1021],{"class":107},[101,103405,4080],{"class":160},[101,103407,3726],{"class":111},[101,103409,103410,103413,103416,103418,103421],{"class":103,"line":2564},[101,103411,103412],{"class":107},"        raise",[101,103414,103415],{"class":160}," RuntimeError",[101,103417,112],{"class":111},[101,103419,103420],{"class":216},"\"body red_box not found\"",[101,103422,118],{"class":111},[101,103424,103425,103427,103430,103432,103434],{"class":103,"line":2578},[101,103426,3088],{"class":107},[101,103428,103429],{"class":111}," site_id ",[101,103431,1021],{"class":107},[101,103433,4080],{"class":160},[101,103435,3726],{"class":111},[101,103437,103438,103440,103442,103444,103447],{"class":103,"line":2586},[101,103439,103412],{"class":107},[101,103441,103415],{"class":160},[101,103443,112],{"class":111},[101,103445,103446],{"class":216},"\"site box_center not found\"",[101,103448,118],{"class":111},[101,103450,103451],{"class":103,"line":2591},[101,103452,2387],{"emptyLinePlaceholder":27},[101,103454,103455,103457,103459,103461,103463,103465,103467],{"class":103,"line":2597},[101,103456,3188],{"class":107},[101,103458,101481],{"class":111},[101,103460,26032],{"class":107},[101,103462,32432],{"class":160},[101,103464,112],{"class":111},[101,103466,1709],{"class":160},[101,103468,30775],{"class":111},[101,103470,103471],{"class":103,"line":2603},[101,103472,101496],{"class":111},[101,103474,103475],{"class":103,"line":2608},[101,103476,2387],{"emptyLinePlaceholder":27},[101,103478,103479,103481,103483,103486],{"class":103,"line":7936},[101,103480,31288],{"class":160},[101,103482,112],{"class":111},[101,103484,103485],{"class":216},"\"simulation time:\"",[101,103487,101458],{"class":111},[101,103489,103490,103492,103494,103497],{"class":103,"line":7960},[101,103491,31288],{"class":160},[101,103493,112],{"class":111},[101,103495,103496],{"class":216},"\"box body position:\"",[101,103498,103499],{"class":111},", data.xpos[box_body_id].copy())\n",[101,103501,103502,103504,103506,103509],{"class":103,"line":7965},[101,103503,31288],{"class":160},[101,103505,112],{"class":111},[101,103507,103508],{"class":216},"\"site position:\"",[101,103510,103511],{"class":111},", data.site_xpos[site_id].copy())\n",[101,103513,103514,103516,103518,103521],{"class":103,"line":7971},[101,103515,31288],{"class":160},[101,103517,112],{"class":111},[101,103519,103520],{"class":216},"\"box qpos:\"",[101,103522,103523],{"class":111},", np.array(data.qpos))\n",[101,103525,103526],{"class":103,"line":7998},[101,103527,2387],{"emptyLinePlaceholder":27},[101,103529,103530],{"class":103,"line":8003},[101,103531,2387],{"emptyLinePlaceholder":27},[101,103533,103534,103536,103538,103540,103542],{"class":103,"line":8009},[101,103535,1518],{"class":107},[101,103537,31209],{"class":160},[101,103539,101539],{"class":107},[101,103541,101542],{"class":216},[101,103543,3726],{"class":111},[101,103545,103546],{"class":103,"line":8021},[101,103547,101549],{"class":111},[10,103549,103550],{},"保存为：",[92,103552,103554],{"className":23811,"code":103553,"language":23813,"meta":20,"style":20},"touch ch2_xml_basic.py\n",[98,103555,103556],{"__ignoreMap":20},[101,103557,103558,103560],{"class":103,"line":104},[101,103559,101263],{"class":1950},[101,103561,103562],{"class":216}," ch2_xml_basic.py\n",[10,103564,102281],{},[92,103566,103568],{"className":23811,"code":103567,"language":23813,"meta":20,"style":20},"python ch2_xml_basic.py\n",[98,103569,103570],{"__ignoreMap":20},[101,103571,103572,103574],{"class":103,"line":104},[101,103573,30369],{"class":1950},[101,103575,103562],{"class":216},[72,103577,101552],{"id":101552},[10,103579,103580],{},"用名字查找 body：",[92,103582,103584],{"className":30367,"code":103583,"language":30369,"meta":20,"style":20},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[98,103585,103586],{"__ignoreMap":20},[101,103587,103588,103591,103593,103595,103597],{"class":103,"line":104},[101,103589,103590],{"class":111},"box_body_id ",[101,103592,157],{"class":107},[101,103594,103370],{"class":111},[101,103596,103373],{"class":216},[101,103598,118],{"class":111},[10,103600,103601],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[10,103603,103604],{},"用名字查找 site：",[92,103606,103608],{"className":30367,"code":103607,"language":30369,"meta":20,"style":20},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[98,103609,103610],{"__ignoreMap":20},[101,103611,103612,103615,103617,103619,103621],{"class":103,"line":104},[101,103613,103614],{"class":111},"site_id ",[101,103616,157],{"class":107},[101,103618,103385],{"class":111},[101,103620,103388],{"class":216},[101,103622,118],{"class":111},[10,103624,103625,103626,103629,103630,103633],{},"注意第二个参数是对象类型。查 body 就用 ",[98,103627,103628],{},"mjOBJ_BODY","，查 site 就用 ",[98,103631,103632],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[10,103635,103636],{},"读取世界坐标：",[92,103638,103640],{"className":30367,"code":103639,"language":30369,"meta":20,"style":20},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[98,103641,103642,103647],{"__ignoreMap":20},[101,103643,103644],{"class":103,"line":104},[101,103645,103646],{"class":111},"data.xpos[box_body_id]\n",[101,103648,103649],{"class":103,"line":21},[101,103650,103651],{"class":111},"data.site_xpos[site_id]\n",[10,103653,103654,103657,103658,103661],{},[98,103655,103656],{},"xpos"," 是 body 的世界坐标，",[98,103659,103660],{},"site_xpos"," 是 site 的世界坐标。",[72,103663,101688],{"id":101688},[92,103665,103667],{"className":30367,"code":103666,"language":30369,"meta":20,"style":20},"import mujoco\nimport numpy as np\n",[98,103668,103669,103675],{"__ignoreMap":20},[101,103670,103671,103673],{"class":103,"line":104},[101,103672,30381],{"class":107},[101,103674,101281],{"class":111},[101,103676,103677,103679,103681,103683],{"class":103,"line":21},[101,103678,30381],{"class":107},[101,103680,31369],{"class":111},[101,103682,31372],{"class":107},[101,103684,31375],{"class":111},[10,103686,103687,103688,103691,103692,103695,103696,324,103699,28374],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[98,103689,103690],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[98,103693,103694],{},"as np"," 是习惯写法，后面就可以写 ",[98,103697,103698],{},"np.array(...)",[98,103700,103701],{},"np.round(...)",[92,103703,103704],{"className":30367,"code":101575,"language":30369,"meta":20,"style":20},[98,103705,103706,103714,103718],{"__ignoreMap":20},[101,103707,103708,103710,103712],{"class":103,"line":104},[101,103709,101294],{"class":160},[101,103711,13552],{"class":107},[101,103713,101299],{"class":216},[101,103715,103716],{"class":103,"line":21},[101,103717,101590],{"class":216},[101,103719,103720],{"class":103,"line":1166},[101,103721,95678],{"class":216},[10,103723,103724,103725,28374],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[98,103726,103727],{},"mujoco.MjModel.from_xml_string(XML)",[92,103729,103731],{"className":53056,"code":103730,"language":53058,"meta":20,"style":20},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[98,103732,103733],{"__ignoreMap":20},[101,103734,103735,103737,103739,103741,103743,103745,103747,103749,103752,103754,103756,103759,103761,103763,103766],{"class":103,"line":104},[101,103736,1021],{"class":111},[101,103738,103190],{"class":51289},[101,103740,14908],{"class":1950},[101,103742,157],{"class":111},[101,103744,103388],{"class":216},[101,103746,101086],{"class":1950},[101,103748,157],{"class":111},[101,103750,103751],{"class":216},"\"0 0 0\"",[101,103753,101116],{"class":1950},[101,103755,157],{"class":111},[101,103757,103758],{"class":216},"\"0.03\"",[101,103760,78756],{"class":1950},[101,103762,157],{"class":111},[101,103764,103765],{"class":216},"\"0 1 0 1\"",[101,103767,101124],{"class":111},[10,103769,103770,103772,103773,103776,103777,103779,103780,103783],{},[98,103771,103190],{}," 是标记点。",[98,103774,103775],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[98,103778,103150],{}," 表示显示出来的小球大小。",[98,103781,103782],{},"rgba=\"0 1 0 1\""," 表示绿色。",[92,103785,103786],{"className":30367,"code":103583,"language":30369,"meta":20,"style":20},[98,103787,103788],{"__ignoreMap":20},[101,103789,103790,103792,103794,103796,103798],{"class":103,"line":104},[101,103791,103590],{"class":111},[101,103793,157],{"class":107},[101,103795,103370],{"class":111},[101,103797,103373],{"class":216},[101,103799,118],{"class":111},[10,103801,103802,103803,103805],{},"这行的作用是：根据名字 ",[98,103804,103373],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[10,103807,103808],{},"拆开看：",[55,103810,103811,103817,103822,103828],{},[58,103812,103813,103816],{},[98,103814,103815],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[58,103818,103819,103821],{},[98,103820,102065],{}," 是被查询的模型。",[58,103823,103824,103827],{},[98,103825,103826],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[58,103829,103830,103832],{},[98,103831,103373],{}," 是 XML 里写的名字。",[92,103834,103835],{"className":30367,"code":103607,"language":30369,"meta":20,"style":20},[98,103836,103837],{"__ignoreMap":20},[101,103838,103839,103841,103843,103845,103847],{"class":103,"line":104},[101,103840,103614],{"class":111},[101,103842,157],{"class":107},[101,103844,103385],{"class":111},[101,103846,103388],{"class":216},[101,103848,118],{"class":111},[10,103850,103851,103852,28374],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[98,103853,103388],{},[92,103855,103857],{"className":30367,"code":103856,"language":30369,"meta":20,"style":20},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[98,103858,103859,103871],{"__ignoreMap":20},[101,103860,103861,103863,103865,103867,103869],{"class":103,"line":104},[101,103862,1518],{"class":107},[101,103864,103401],{"class":111},[101,103866,1021],{"class":107},[101,103868,4080],{"class":160},[101,103870,3726],{"class":111},[101,103872,103873,103876,103878,103880,103882],{"class":103,"line":21},[101,103874,103875],{"class":107},"    raise",[101,103877,103415],{"class":160},[101,103879,112],{"class":111},[101,103881,103420],{"class":216},[101,103883,118],{"class":111},[10,103885,103886,103888,103889,103892,103893,103896,103897,103900],{},[98,103887,1518],{}," 是条件判断。",[98,103890,103891],{},"mj_name2id"," 找不到对象时会返回 ",[98,103894,103895],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[98,103898,103899],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[92,103902,103904],{"className":30367,"code":103903,"language":30369,"meta":20,"style":20},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[98,103905,103906,103922],{"__ignoreMap":20},[101,103907,103908,103910,103912,103914,103916,103918,103920],{"class":103,"line":104},[101,103909,3012],{"class":107},[101,103911,101481],{"class":111},[101,103913,26032],{"class":107},[101,103915,32432],{"class":160},[101,103917,112],{"class":111},[101,103919,1709],{"class":160},[101,103921,30775],{"class":111},[101,103923,103924],{"class":103,"line":21},[101,103925,101679],{"class":111},[10,103927,103928],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[92,103930,103932],{"className":30367,"code":103931,"language":30369,"meta":20,"style":20},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[98,103933,103934],{"__ignoreMap":20},[101,103935,103936,103938,103940,103942],{"class":103,"line":104},[101,103937,30404],{"class":160},[101,103939,112],{"class":111},[101,103941,103496],{"class":216},[101,103943,103499],{"class":111},[10,103945,103946,103948,103949,103952],{},[98,103947,101059],{}," 保存所有 body 的世界坐标。",[98,103950,103951],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[92,103954,103956],{"className":30367,"code":103955,"language":30369,"meta":20,"style":20},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[98,103957,103958],{"__ignoreMap":20},[101,103959,103960,103962,103964,103966],{"class":103,"line":104},[101,103961,30404],{"class":160},[101,103963,112],{"class":111},[101,103965,103508],{"class":216},[101,103967,103511],{"class":111},[10,103969,103970,103973,103974,103976],{},[98,103971,103972],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[98,103975,102957],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[92,103978,103980],{"className":30367,"code":103979,"language":30369,"meta":20,"style":20},"print(\"box qpos:\", np.array(data.qpos))\n",[98,103981,103982],{"__ignoreMap":20},[101,103983,103984,103986,103988,103990],{"class":103,"line":104},[101,103985,30404],{"class":160},[101,103987,112],{"class":111},[101,103989,103520],{"class":216},[101,103991,103523],{"class":111},[10,103993,103994,103995,103998],{},"这里打印广义位置数组。",[98,103996,103997],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[43,104000,102296],{"id":102295},[10,104002,104003,104004,104007,104008,28374],{},"程序会输出 ",[98,104005,104006],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[98,104009,104010],{},"qpos",[10,104012,104013,104015,104016,104019,104020,104023],{},[98,104014,103951],{}," 是 body 的世界坐标位置。",[98,104017,104018],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[98,104021,104022],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[10,104025,82211,104026,82519,104028,104030],{},[98,104027,102957],{},[98,104029,103775],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[10,104032,104033],{},"如果你把 site 改成：",[92,104035,104037],{"className":53056,"code":104036,"language":53058,"meta":20,"style":20},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[98,104038,104039],{"__ignoreMap":20},[101,104040,104041,104043,104045,104047,104049,104052,104054,104056,104059,104061,104063,104065,104067,104069,104071],{"class":103,"line":104},[101,104042,1021],{"class":111},[101,104044,103190],{"class":51289},[101,104046,14908],{"class":1950},[101,104048,157],{"class":111},[101,104050,104051],{"class":216},"\"box_top\"",[101,104053,101086],{"class":1950},[101,104055,157],{"class":111},[101,104057,104058],{"class":216},"\"0 0 0.15\"",[101,104060,101116],{"class":1950},[101,104062,157],{"class":111},[101,104064,103758],{"class":216},[101,104066,78756],{"class":1950},[101,104068,157],{"class":111},[101,104070,103765],{"class":216},[101,104072,101124],{"class":111},[10,104074,104075,104076,104079],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[98,104077,104078],{},"site position"," 就会比 body position 的 z 坐标更高。",[43,104081,102328],{"id":102327},[55,104083,104084,104093,104096,104103,104109,104120],{},[58,104085,102391,104086,104088,104089,102394,104091,28374],{},[98,104087,102961],{}," 的初始高度从 ",[98,104090,329],{},[98,104092,189],{},[58,104094,104095],{},"重新运行程序。",[58,104097,104098,104099,104102],{},"观察 ",[98,104100,104101],{},"box qpos"," 和最终位置是否变化。",[58,104104,104105,104106,104108],{},"故意把 ",[98,104107,103190],{}," 名称改错，确认程序能报错。",[58,104110,102391,104111,104113,104114,102394,104116,104119],{},[98,104112,101100],{}," 的颜色 ",[98,104115,102012],{},[98,104117,104118],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[58,104121,102391,104122,82519,104124,102394,104127,104130,104131,104133],{},[98,104123,102957],{},[98,104125,104126],{},"pos",[98,104128,104129],{},"0 0 0.2","，观察 ",[98,104132,104078],{}," 如何变化。",[43,104135,102433],{"id":102432},[72,104137,104139],{"id":104138},"xml-error-schema-violation",[98,104140,104141],{},"XML Error: Schema violation",[10,104143,104144],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[72,104146,104148,81279,104150],{"id":104147},"mj_name2id-返回-1",[98,104149,103891],{},[98,104151,103895],{},[10,104153,104154,104155,104158],{},"说明名字没有找到。检查 XML 中 ",[98,104156,104157],{},"name=\"...\"","，并确认对象类型正确。",[72,104160,104161],{"id":104161},"物体不下落",[10,104163,102503],{},[55,104165,104166,104171,104176],{},[58,104167,104168,104169],{},"body 是否有 ",[98,104170,101600],{},[58,104172,104173,104174],{},"gravity 是否为 ",[98,104175,102569],{},[58,104177,104178,104179,104181],{},"body 是否被固定在 ",[98,104180,101821],{}," 中",[72,104183,104184],{"id":104184},"坐标看起来不符合预期",[10,104186,104187],{},"先区分两种坐标：",[249,104189,104190,104199],{},[252,104191,104192],{},[255,104193,104194,104197],{},[258,104195,104196],{"align":23725},"坐标",[258,104198,100680],{"align":23725},[296,104200,104201,104211],{},[255,104202,104203,104208],{},[301,104204,104205,104206],{"align":23725},"XML 里的 ",[98,104207,104126],{},[301,104209,104210],{"align":23725},"相对父 body 的局部坐标",[255,104212,104213,104219],{},[301,104214,104215,24967,104217],{"align":23725},[98,104216,101059],{},[98,104218,103972],{},[301,104220,104221],{"align":23725},"仿真更新后的世界坐标",[10,104223,104224,104225,104227,104228,82528,104231,104233],{},"如果你修改了 ",[98,104226,101050],{},"，但还没调用 ",[98,104229,104230],{},"mj_forward",[98,104232,101195],{},"，世界坐标可能还没有更新。",[43,104235,102587],{"id":102586},[10,104237,104238],{},"MJCF 建模先掌握四件事：",[55,104240,104241,104246,104251,104256],{},[58,104242,104243,104245],{},[98,104244,51789],{}," 表示刚体层级。",[58,104247,104248,104250],{},[98,104249,101100],{}," 表示形状、碰撞和质量。",[58,104252,104253,104255],{},[98,104254,102936],{}," 决定 body 能不能动、怎么动。",[58,104257,104258,104260],{},[98,104259,103190],{}," 用来标记关键点，方便 Python 读取位置。",[10,104262,104263],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5114,104265,104266],{},"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":20,"searchDepth":21,"depth":21,"links":104268},[104269,104270,104271,104277,104281,104282,104283,104290],{"id":100626,"depth":21,"text":100627},{"id":100749,"depth":21,"text":100750},{"id":101024,"depth":21,"text":101025,"children":104272},[104273,104274,104275,104276],{"id":102940,"depth":1166,"text":102940},{"id":103054,"depth":1166,"text":103054},{"id":103080,"depth":1166,"text":103081},{"id":103184,"depth":1166,"text":103185},{"id":101232,"depth":21,"text":101233,"children":104278},[104279,104280],{"id":101552,"depth":1166,"text":101552},{"id":101688,"depth":1166,"text":101688},{"id":102295,"depth":21,"text":102296},{"id":102327,"depth":21,"text":102328},{"id":102432,"depth":21,"text":102433,"children":104284},[104285,104286,104288,104289],{"id":104138,"depth":1166,"text":104141},{"id":104147,"depth":1166,"text":104287},"mj_name2id 返回 -1",{"id":104161,"depth":1166,"text":104161},{"id":104184,"depth":1166,"text":104184},{"id":102586,"depth":21,"text":102587},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102634,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104297,"title":104298,"body":104299,"description":20,"extension":24,"meta":105794,"navigation":27,"path":105795,"seo":105796,"stem":105797,"__hash__":105798},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104300,"toc":105766},[104301,104304,104306,104309,104312,104350,104353,104359,104362,104364,104366,104393,104395,104409,104411,104452,104454,104478,104480,104483,104492,104501,104504,104513,104521,104530,104533,104543,104546,104598,104605,104611,104619,104667,104670,104689,104692,104700,104704,104713,104746,104748,105096,105098,105110,105112,105123,105125,105128,105149,105155,105158,105183,105193,105196,105204,105207,105210,105231,105242,105244,105264,105267,105288,105297,105316,105322,105347,105350,105364,105371,105395,105398,105406,105415,105431,105443,105451,105460,105462,105465,105489,105494,105497,105519,105521,105560,105562,105569,105571,105579,105582,105585,105597,105638,105645,105656,105663,105666,105715,105718,105721,105727,105729,105734,105760,105763],[39,104302,104298],{"id":104303},"_3python-控制接口读取状态与推进仿真",[43,104305,100627],{"id":100626},[10,104307,104308],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[10,104310,104311],{},"你将学习:",[55,104313,104314,104319,104324,104328,104333,104344],{},[58,104315,104316],{},[98,104317,104318],{},"MjModel.from_xml_string",[58,104320,104321],{},[98,104322,104323],{},"MjData(model)",[58,104325,104326],{},[98,104327,101195],{},[58,104329,104330],{},[98,104331,104332],{},"mj_resetData",[58,104334,104335,104336,324,104338,324,104341],{},"读取 ",[98,104337,104010],{},[98,104339,104340],{},"qvel",[98,104342,104343],{},"ctrl",[58,104345,104346,104347],{},"使用 ",[98,104348,104349],{},"model.opt.timestep",[10,104351,104352],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[92,104354,104357],{"className":104355,"code":104356,"language":5175,"meta":20},[5173],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[98,104358,104356],{"__ignoreMap":20},[10,104360,104361],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[43,104363,100750],{"id":100749},[10,104365,100753],{},[92,104367,104369],{"className":23811,"code":104368,"language":23813,"meta":20,"style":20},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[98,104370,104371],{"__ignoreMap":20},[101,104372,104373,104375,104377,104379,104381,104384,104386,104388,104390],{"class":103,"line":104},[101,104374,24565],{"class":1950},[101,104376,26304],{"class":216},[101,104378,23823],{"class":216},[101,104380,26389],{"class":160},[101,104382,104383],{"class":216}," python3",[101,104385,100778],{"class":216},[101,104387,102481],{"class":216},[101,104389,100794],{"class":216},[101,104391,104392],{"class":216}," glfw\n",[10,104394,102799],{},[92,104396,104397],{"className":23811,"code":100899,"language":23813,"meta":20,"style":20},[98,104398,104399],{"__ignoreMap":20},[101,104400,104401,104403,104405,104407],{"class":103,"line":104},[101,104402,23820],{"class":1950},[101,104404,23823],{"class":216},[101,104406,100910],{"class":216},[101,104408,100913],{"class":216},[10,104410,102816],{},[92,104412,104414],{"className":23811,"code":104413,"language":23813,"meta":20,"style":20},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[98,104415,104416,104433,104442],{"__ignoreMap":20},[101,104417,104418,104420,104422,104424,104427,104429,104431],{"class":103,"line":104},[101,104419,30319],{"class":1950},[101,104421,29165],{"class":216},[101,104423,25104],{"class":160},[101,104425,104426],{"class":216}," mujoco-python-api",[101,104428,100955],{"class":216},[101,104430,100958],{"class":160},[101,104432,100961],{"class":160},[101,104434,104435,104437,104439],{"class":103,"line":21},[101,104436,30319],{"class":1950},[101,104438,100968],{"class":216},[101,104440,104441],{"class":216}," mujoco-python-api\n",[101,104443,104444,104446,104448,104450],{"class":103,"line":1166},[101,104445,23820],{"class":1950},[101,104447,23823],{"class":216},[101,104449,100910],{"class":216},[101,104451,100913],{"class":216},[10,104453,100984],{},[55,104455,104456,104463,104472],{},[58,104457,104458,100998,104460,104462],{},[98,104459,100655],{},[98,104461,100660],{}," 是官方 Python bindings 的类名。",[58,104464,104465,104466,104469,104470,28374],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[98,104467,104468],{},"mjModel"," 在 Python 中是 ",[98,104471,100689],{},[58,104473,104474,104475,28374],{},"不要使用 ",[98,104476,104477],{},"sim = mujoco_py.MjSim(...)",[43,104479,101025],{"id":101024},[10,104481,104482],{},"仿真推进核心代码:",[92,104484,104486],{"className":30367,"code":104485,"language":30369,"meta":20,"style":20},"mujoco.mj_step(model, data)\n",[98,104487,104488],{"__ignoreMap":20},[101,104489,104490],{"class":103,"line":104},[101,104491,104485],{"class":111},[10,104493,104494,104495,324,104497,324,104499,28374],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[98,104496,101050],{},[98,104498,101053],{},[98,104500,101047],{},[10,104502,104503],{},"重置仿真:",[92,104505,104507],{"className":30367,"code":104506,"language":30369,"meta":20,"style":20},"mujoco.mj_resetData(model, data)\n",[98,104508,104509],{"__ignoreMap":20},[101,104510,104511],{"class":103,"line":104},[101,104512,104506],{"class":111},[10,104514,104515,104516,82528,104518,104520],{},"如果手动修改了 ",[98,104517,101050],{},[98,104519,101053],{},"，通常应调用:",[92,104522,104524],{"className":30367,"code":104523,"language":30369,"meta":20,"style":20},"mujoco.mj_forward(model, data)\n",[98,104525,104526],{"__ignoreMap":20},[101,104527,104528],{"class":103,"line":104},[101,104529,104523],{"class":111},[10,104531,104532],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[72,104534,104536,324,104538,324,104540,104542],{"id":104535},"qposqvelctrl-是什么",[98,104537,104010],{},[98,104539,104340],{},[98,104541,104343],{}," 是什么",[10,104544,104545],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[249,104547,104548,104560],{},[252,104549,104550],{},[255,104551,104552,104555,104557],{},[258,104553,104554],{"align":23725},"字段",[258,104556,100680],{"align":23725},[258,104558,104559],{"align":23725},"谁来修改",[296,104561,104562,104574,104586],{},[255,104563,104564,104568,104571],{},[301,104565,104566],{"align":23725},[98,104567,101050],{},[301,104569,104570],{"align":23725},"广义位置，例如小车位置、关节角、自由物体位置姿态",[301,104572,104573],{"align":23725},"MuJoCo 更新，也可以手动设置初始状态",[255,104575,104576,104580,104583],{},[301,104577,104578],{"align":23725},[98,104579,101053],{},[301,104581,104582],{"align":23725},"广义速度，例如小车速度、关节角速度",[301,104584,104585],{"align":23725},"MuJoCo 更新，也可以手动清零",[255,104587,104588,104592,104595],{},[301,104589,104590],{"align":23725},[98,104591,101056],{},[301,104593,104594],{"align":23725},"actuator 的控制输入",[301,104596,104597],{"align":23725},"主要由你的控制代码写入",[10,104599,9013,104600,100998,104602,104604],{},[98,104601,104010],{},[98,104603,104340],{}," 不一定同维。自由刚体就是典型例子：",[92,104606,104609],{"className":104607,"code":104608,"language":5175,"meta":20},[5173],"freejoint: qpos 7 维，qvel 6 维\n",[98,104610,104608],{"__ignoreMap":20},[72,104612,104614,100998,104616,104618],{"id":104613},"mj_step-和-mj_forward-的区别",[98,104615,101195],{},[98,104617,104230],{}," 的区别",[249,104620,104621,104634],{},[252,104622,104623],{},[255,104624,104625,104628,104631],{},[258,104626,104627],{"align":23725},"函数",[258,104629,104630],{"align":23725},"是否推进时间",[258,104632,104633],{"align":23725},"什么时候用",[296,104635,104636,104649],{},[255,104637,104638,104643,104646],{},[301,104639,104640],{"align":23725},[98,104641,104642],{},"mj_step(model, data)",[301,104644,104645],{"align":23725},"是",[301,104647,104648],{"align":23725},"正常仿真循环，每调用一次前进一步",[255,104650,104651,104656,104659],{},[301,104652,104653],{"align":23725},[98,104654,104655],{},"mj_forward(model, data)",[301,104657,104658],{"align":23725},"否",[301,104660,104661,104662,324,104664,104666],{"align":23725},"手动改了 ",[98,104663,104010],{},[98,104665,104340],{}," 后，刷新派生量",[10,104668,104669],{},"例如你写：",[92,104671,104673],{"className":30367,"code":104672,"language":30369,"meta":20,"style":20},"data.qpos[2] = 2.0\n",[98,104674,104675],{"__ignoreMap":20},[101,104676,104677,104680,104682,104684,104686],{"class":103,"line":104},[101,104678,104679],{"class":111},"data.qpos[",[101,104681,189],{"class":160},[101,104683,4430],{"class":111},[101,104685,157],{"class":107},[101,104687,104688],{"class":160}," 2.0\n",[10,104690,104691],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[92,104693,104694],{"className":30367,"code":104523,"language":30369,"meta":20,"style":20},[98,104695,104696],{"__ignoreMap":20},[101,104697,104698],{"class":103,"line":104},[101,104699,104523],{"class":111},[72,104701,104703],{"id":104702},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[10,104705,104706,104709,104710,104712],{},[98,104707,104708],{},"mujoco.mj_resetData(model, data)"," 会把 ",[98,104711,33390],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[92,104714,104716],{"className":30367,"code":104715,"language":30369,"meta":20,"style":20},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[98,104717,104718,104722,104732,104742],{"__ignoreMap":20},[101,104719,104720],{"class":103,"line":104},[101,104721,104506],{"class":111},[101,104723,104724,104727,104729],{"class":103,"line":21},[101,104725,104726],{"class":111},"data.qpos[:] ",[101,104728,157],{"class":107},[101,104730,104731],{"class":111}," random_qpos\n",[101,104733,104734,104737,104739],{"class":103,"line":1166},[101,104735,104736],{"class":111},"data.qvel[:] ",[101,104738,157],{"class":107},[101,104740,104741],{"class":160}," 0.0\n",[101,104743,104744],{"class":103,"line":1181},[101,104745,104523],{"class":111},[43,104747,101233],{"id":101232},[92,104749,104751],{"className":30367,"code":104750,"language":30369,"meta":20,"style":20},"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",[98,104752,104753,104759,104769,104773,104777,104785,104790,104794,104798,104802,104807,104811,104816,104821,104826,104830,104834,104838,104842,104846,104850,104869,104876,104888,104899,104915,104931,104935,104939,104951,104963,104971,104975,104986,104990,105006,105010,105014,105023,105027,105032,105041,105045,105058,105063,105072,105076,105080,105092],{"__ignoreMap":20},[101,104754,104755,104757],{"class":103,"line":104},[101,104756,30381],{"class":107},[101,104758,101281],{"class":111},[101,104760,104761,104763,104765,104767],{"class":103,"line":21},[101,104762,30381],{"class":107},[101,104764,31369],{"class":111},[101,104766,31372],{"class":107},[101,104768,31375],{"class":111},[101,104770,104771],{"class":103,"line":1166},[101,104772,2387],{"emptyLinePlaceholder":27},[101,104774,104775],{"class":103,"line":1181},[101,104776,2387],{"emptyLinePlaceholder":27},[101,104778,104779,104781,104783],{"class":103,"line":1187},[101,104780,101294],{"class":160},[101,104782,13552],{"class":107},[101,104784,101299],{"class":216},[101,104786,104787],{"class":103,"line":1201},[101,104788,104789],{"class":216},"\u003Cmujoco model=\"state_api\">\n",[101,104791,104792],{"class":103,"line":1207},[101,104793,101309],{"class":216},[101,104795,104796],{"class":103,"line":1298},[101,104797,2387],{"emptyLinePlaceholder":27},[101,104799,104800],{"class":103,"line":1304},[101,104801,101318],{"class":216},[101,104803,104804],{"class":103,"line":1316},[101,104805,104806],{"class":216},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[101,104808,104809],{"class":103,"line":1599},[101,104810,2387],{"emptyLinePlaceholder":27},[101,104812,104813],{"class":103,"line":1604},[101,104814,104815],{"class":216},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[101,104817,104818],{"class":103,"line":1610},[101,104819,104820],{"class":216},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[101,104822,104823],{"class":103,"line":1615},[101,104824,104825],{"class":216},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[101,104827,104828],{"class":103,"line":1629},[101,104829,101347],{"class":216},[101,104831,104832],{"class":103,"line":1634},[101,104833,101352],{"class":216},[101,104835,104836],{"class":103,"line":1640},[101,104837,101357],{"class":216},[101,104839,104840],{"class":103,"line":1661},[101,104841,95678],{"class":216},[101,104843,104844],{"class":103,"line":1666},[101,104845,2387],{"emptyLinePlaceholder":27},[101,104847,104848],{"class":103,"line":1680},[101,104849,2387],{"emptyLinePlaceholder":27},[101,104851,104852,104854,104857,104860,104862,104865,104867],{"class":103,"line":1685},[101,104853,31936],{"class":107},[101,104855,104856],{"class":1950}," print_state",[101,104858,104859],{"class":111},"(prefix: ",[101,104861,1286],{"class":160},[101,104863,104864],{"class":111},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[101,104866,95666],{"class":160},[101,104868,3726],{"class":111},[101,104870,104871,104873],{"class":103,"line":1714},[101,104872,31288],{"class":160},[101,104874,104875],{"class":111},"(prefix)\n",[101,104877,104878,104880,104882,104885],{"class":103,"line":1719},[101,104879,31288],{"class":160},[101,104881,112],{"class":111},[101,104883,104884],{"class":216},"\"  timestep:\"",[101,104886,104887],{"class":111},", model.opt.timestep)\n",[101,104889,104890,104892,104894,104897],{"class":103,"line":1736},[101,104891,31288],{"class":160},[101,104893,112],{"class":111},[101,104895,104896],{"class":216},"\"  time:\"",[101,104898,101458],{"class":111},[101,104900,104901,104903,104905,104908,104911,104913],{"class":103,"line":1741},[101,104902,31288],{"class":160},[101,104904,112],{"class":111},[101,104906,104907],{"class":216},"\"  qpos:\"",[101,104909,104910],{"class":111},", np.round(data.qpos.copy(), ",[101,104912,404],{"class":160},[101,104914,30486],{"class":111},[101,104916,104917,104919,104921,104924,104927,104929],{"class":103,"line":1746},[101,104918,31288],{"class":160},[101,104920,112],{"class":111},[101,104922,104923],{"class":216},"\"  qvel:\"",[101,104925,104926],{"class":111},", np.round(data.qvel.copy(), ",[101,104928,404],{"class":160},[101,104930,30486],{"class":111},[101,104932,104933],{"class":103,"line":1751},[101,104934,2387],{"emptyLinePlaceholder":27},[101,104936,104937],{"class":103,"line":1765},[101,104938,2387],{"emptyLinePlaceholder":27},[101,104940,104941,104943,104945,104947,104949],{"class":103,"line":1770},[101,104942,31936],{"class":107},[101,104944,1960],{"class":1950},[101,104946,101378],{"class":111},[101,104948,95666],{"class":160},[101,104950,3726],{"class":111},[101,104952,104953,104955,104957,104959,104961],{"class":103,"line":2564},[101,104954,101387],{"class":111},[101,104956,157],{"class":107},[101,104958,101392],{"class":111},[101,104960,101294],{"class":160},[101,104962,118],{"class":111},[101,104964,104965,104967,104969],{"class":103,"line":2578},[101,104966,101401],{"class":111},[101,104968,157],{"class":107},[101,104970,101406],{"class":111},[101,104972,104973],{"class":103,"line":2586},[101,104974,2387],{"emptyLinePlaceholder":27},[101,104976,104977,104980,104983],{"class":103,"line":2591},[101,104978,104979],{"class":111},"    print_state(",[101,104981,104982],{"class":216},"\"initial\"",[101,104984,104985],{"class":111},", model, data)\n",[101,104987,104988],{"class":103,"line":2597},[101,104989,2387],{"emptyLinePlaceholder":27},[101,104991,104992,104994,104996,104998,105000,105002,105004],{"class":103,"line":2603},[101,104993,3188],{"class":107},[101,104995,101481],{"class":111},[101,104997,26032],{"class":107},[101,104999,32432],{"class":160},[101,105001,112],{"class":111},[101,105003,767],{"class":160},[101,105005,30775],{"class":111},[101,105007,105008],{"class":103,"line":2608},[101,105009,101496],{"class":111},[101,105011,105012],{"class":103,"line":7936},[101,105013,2387],{"emptyLinePlaceholder":27},[101,105015,105016,105018,105021],{"class":103,"line":7960},[101,105017,104979],{"class":111},[101,105019,105020],{"class":216},"\"after 50 steps\"",[101,105022,104985],{"class":111},[101,105024,105025],{"class":103,"line":7965},[101,105026,2387],{"emptyLinePlaceholder":27},[101,105028,105029],{"class":103,"line":7971},[101,105030,105031],{"class":111},"    mujoco.mj_resetData(model, data)\n",[101,105033,105034,105036,105039],{"class":103,"line":7998},[101,105035,104979],{"class":111},[101,105037,105038],{"class":216},"\"after reset\"",[101,105040,104985],{"class":111},[101,105042,105043],{"class":103,"line":8003},[101,105044,2387],{"emptyLinePlaceholder":27},[101,105046,105047,105050,105052,105054,105056],{"class":103,"line":8009},[101,105048,105049],{"class":111},"    data.qpos[",[101,105051,189],{"class":160},[101,105053,4430],{"class":111},[101,105055,157],{"class":107},[101,105057,104688],{"class":160},[101,105059,105060],{"class":103,"line":8021},[101,105061,105062],{"class":111},"    mujoco.mj_forward(model, data)\n",[101,105064,105065,105067,105070],{"class":103,"line":8033},[101,105066,104979],{"class":111},[101,105068,105069],{"class":216},"\"after manual qpos edit\"",[101,105071,104985],{"class":111},[101,105073,105074],{"class":103,"line":8045},[101,105075,2387],{"emptyLinePlaceholder":27},[101,105077,105078],{"class":103,"line":9704},[101,105079,2387],{"emptyLinePlaceholder":27},[101,105081,105082,105084,105086,105088,105090],{"class":103,"line":9729},[101,105083,1518],{"class":107},[101,105085,31209],{"class":160},[101,105087,101539],{"class":107},[101,105089,101542],{"class":216},[101,105091,3726],{"class":111},[101,105093,105094],{"class":103,"line":9752},[101,105095,101549],{"class":111},[10,105097,103550],{},[92,105099,105101],{"className":23811,"code":105100,"language":23813,"meta":20,"style":20},"touch ch3_python_state.py\n",[98,105102,105103],{"__ignoreMap":20},[101,105104,105105,105107],{"class":103,"line":104},[101,105106,101263],{"class":1950},[101,105108,105109],{"class":216}," ch3_python_state.py\n",[10,105111,102281],{},[92,105113,105115],{"className":23811,"code":105114,"language":23813,"meta":20,"style":20},"python ch3_python_state.py\n",[98,105116,105117],{"__ignoreMap":20},[101,105118,105119,105121],{"class":103,"line":104},[101,105120,30369],{"class":1950},[101,105122,105109],{"class":216},[72,105124,101552],{"id":101552},[10,105126,105127],{},"打印状态的函数：",[92,105129,105131],{"className":30367,"code":105130,"language":30369,"meta":20,"style":20},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[98,105132,105133],{"__ignoreMap":20},[101,105134,105135,105137,105139,105141,105143,105145,105147],{"class":103,"line":104},[101,105136,31936],{"class":107},[101,105138,104856],{"class":1950},[101,105140,104859],{"class":111},[101,105142,1286],{"class":160},[101,105144,104864],{"class":111},[101,105146,95666],{"class":160},[101,105148,3726],{"class":111},[10,105150,105151,105152,105154],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[98,105153,33390],{}," 里发生了什么。",[10,105156,105157],{},"推进 50 步：",[92,105159,105161],{"className":30367,"code":105160,"language":30369,"meta":20,"style":20},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[98,105162,105163,105179],{"__ignoreMap":20},[101,105164,105165,105167,105169,105171,105173,105175,105177],{"class":103,"line":104},[101,105166,3012],{"class":107},[101,105168,101481],{"class":111},[101,105170,26032],{"class":107},[101,105172,32432],{"class":160},[101,105174,112],{"class":111},[101,105176,767],{"class":160},[101,105178,30775],{"class":111},[101,105180,105181],{"class":103,"line":21},[101,105182,101679],{"class":111},[10,105184,105185,105186,105189,105190,105192],{},"由于 ",[98,105187,105188],{},"timestep=0.01","，所以 50 步后时间约为 ",[98,105191,35318],{}," 秒。",[10,105194,105195],{},"重置：",[92,105197,105198],{"className":30367,"code":104506,"language":30369,"meta":20,"style":20},[98,105199,105200],{"__ignoreMap":20},[101,105201,105202],{"class":103,"line":104},[101,105203,104506],{"class":111},[10,105205,105206],{},"这会把时间、位置、速度恢复到初始状态。",[10,105208,105209],{},"手动改高度：",[92,105211,105213],{"className":30367,"code":105212,"language":30369,"meta":20,"style":20},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[98,105214,105215,105227],{"__ignoreMap":20},[101,105216,105217,105219,105221,105223,105225],{"class":103,"line":104},[101,105218,104679],{"class":111},[101,105220,189],{"class":160},[101,105222,4430],{"class":111},[101,105224,157],{"class":107},[101,105226,104688],{"class":160},[101,105228,105229],{"class":103,"line":21},[101,105230,104523],{"class":111},[10,105232,105233,105234,105237,105238,105241],{},"这个例子里 ",[98,105235,105236],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[98,105239,105240],{},"2.0"," 表示把小球放到更高的位置。",[72,105243,101688],{"id":101688},[92,105245,105246],{"className":30367,"code":105130,"language":30369,"meta":20,"style":20},[98,105247,105248],{"__ignoreMap":20},[101,105249,105250,105252,105254,105256,105258,105260,105262],{"class":103,"line":104},[101,105251,31936],{"class":107},[101,105253,104856],{"class":1950},[101,105255,104859],{"class":111},[101,105257,1286],{"class":160},[101,105259,104864],{"class":111},[101,105261,95666],{"class":160},[101,105263,3726],{"class":111},[10,105265,105266],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[55,105268,105269,105278,105283],{},[58,105270,105271,105274,105275,105277],{},[98,105272,105273],{},"prefix","：一段文字，比如 ",[98,105276,104982],{},"，用来说明现在打印的是哪个阶段。",[58,105279,105280,105282],{},[98,105281,102065],{},"：MuJoCo 模型。",[58,105284,105285,105287],{},[98,105286,33390],{},"：MuJoCo 当前状态。",[10,105289,105290,324,105293,105296],{},[98,105291,105292],{},"prefix: str",[98,105294,105295],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[92,105298,105300],{"className":30367,"code":105299,"language":30369,"meta":20,"style":20},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[98,105301,105302],{"__ignoreMap":20},[101,105303,105304,105306,105308,105310,105312,105314],{"class":103,"line":104},[101,105305,30404],{"class":160},[101,105307,112],{"class":111},[101,105309,104907],{"class":216},[101,105311,104910],{"class":111},[101,105313,404],{"class":160},[101,105315,30486],{"class":111},[10,105317,105318,105321],{},[98,105319,105320],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[92,105323,105325],{"className":30367,"code":105324,"language":30369,"meta":20,"style":20},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[98,105326,105327,105339],{"__ignoreMap":20},[101,105328,105329,105331,105333,105335,105337],{"class":103,"line":104},[101,105330,101614],{"class":111},[101,105332,157],{"class":107},[101,105334,101392],{"class":111},[101,105336,101294],{"class":160},[101,105338,118],{"class":111},[101,105340,105341,105343,105345],{"class":103,"line":21},[101,105342,101638],{"class":111},[101,105344,157],{"class":107},[101,105346,101406],{"class":111},[10,105348,105349],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[92,105351,105353],{"className":30367,"code":105352,"language":30369,"meta":20,"style":20},"print_state(\"initial\", model, data)\n",[98,105354,105355],{"__ignoreMap":20},[101,105356,105357,105360,105362],{"class":103,"line":104},[101,105358,105359],{"class":111},"print_state(",[101,105361,104982],{"class":216},[101,105363,104985],{"class":111},[10,105365,105366,105367,105370],{},"调用刚才定义的 ",[98,105368,105369],{},"print_state"," 函数，打印初始状态。",[92,105372,105373],{"className":30367,"code":105160,"language":30369,"meta":20,"style":20},[98,105374,105375,105391],{"__ignoreMap":20},[101,105376,105377,105379,105381,105383,105385,105387,105389],{"class":103,"line":104},[101,105378,3012],{"class":107},[101,105380,101481],{"class":111},[101,105382,26032],{"class":107},[101,105384,32432],{"class":160},[101,105386,112],{"class":111},[101,105388,767],{"class":160},[101,105390,30775],{"class":111},[101,105392,105393],{"class":103,"line":21},[101,105394,101679],{"class":111},[10,105396,105397],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[92,105399,105400],{"className":30367,"code":104506,"language":30369,"meta":20,"style":20},[98,105401,105402],{"__ignoreMap":20},[101,105403,105404],{"class":103,"line":104},[101,105405,104506],{"class":111},[10,105407,105408,105409,105411,105412,105414],{},"重置 ",[98,105410,33390],{},"。注意它不会重新创建 ",[98,105413,102065],{},"，因为模型结构没有变，只是状态回到初始值。",[92,105416,105417],{"className":30367,"code":104672,"language":30369,"meta":20,"style":20},[98,105418,105419],{"__ignoreMap":20},[101,105420,105421,105423,105425,105427,105429],{"class":103,"line":104},[101,105422,104679],{"class":111},[101,105424,189],{"class":160},[101,105426,4430],{"class":111},[101,105428,157],{"class":107},[101,105430,104688],{"class":160},[10,105432,105433,105434,324,105437,324,105440,105442],{},"这行是“手动改状态”。在 freejoint 中，",[98,105435,105436],{},"qpos[0]",[98,105438,105439],{},"qpos[1]",[98,105441,105236],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[92,105444,105445],{"className":30367,"code":104523,"language":30369,"meta":20,"style":20},[98,105446,105447],{"__ignoreMap":20},[101,105448,105449],{"class":103,"line":104},[101,105450,104523],{"class":111},[10,105452,105453,105454,105456,105457,105459],{},"手动改完 ",[98,105455,104010],{}," 后，调用 ",[98,105458,104230],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[43,105461,102296],{"id":102295},[10,105463,105464],{},"你会看到:",[55,105466,105467,105472,105477,105480],{},[58,105468,105469,105470],{},"初始时间为 ",[98,105471,303],{},[58,105473,105474,105475],{},"50 步后时间约为 ",[98,105476,35318],{},[58,105478,105479],{},"reset 后状态恢复",[58,105481,105482,105483,105486,105487],{},"手动修改 ",[98,105484,105485],{},"data.qpos[2]"," 后，小球高度变为 ",[98,105488,105240],{},[10,105490,105491,105493],{},[98,105492,105236],{}," 在这个例子中表示自由刚体的 z 坐标。",[10,105495,105496],{},"输出里可以重点看三件事：",[55,105498,105499,105507,105512],{},[58,105500,105501,105503,105504,105506],{},[98,105502,2374],{}," 是否随着 ",[98,105505,101195],{}," 增加。",[58,105508,105509,105511],{},[98,105510,104010],{}," 的 z 坐标是否因为下落而变化。",[58,105513,105514,105516,105517,28374],{},[98,105515,104332],{}," 后时间是否回到 ",[98,105518,303],{},[43,105520,102328],{"id":102327},[55,105522,105523,105529,105535,105541,105544,105553],{},[58,105524,105525,105526,28374],{},"修改 timestep 为 ",[98,105527,105528],{},"0.005",[58,105530,105531,105532,28374],{},"重新运行，检查 50 步后时间是否约为 ",[98,105533,105534],{},"0.25",[58,105536,105537,105538,28374],{},"修改重力为 ",[98,105539,105540],{},"0 0 -1.0",[58,105542,105543],{},"观察小球下降速度是否变慢。",[58,105545,102391,105546,102394,105549,105552],{},[98,105547,105548],{},"data.qpos[2] = 2.0",[98,105550,105551],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[58,105554,105555,105556,105559],{},"注释掉 ",[98,105557,105558],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[43,105561,102433],{"id":102432},[72,105563,105565,105566,105568],{"id":105564},"修改-dataqpos-后位置没有更新","修改 ",[98,105567,101050],{}," 后位置没有更新",[10,105570,102442],{},[92,105572,105573],{"className":30367,"code":104523,"language":30369,"meta":20,"style":20},[98,105574,105575],{"__ignoreMap":20},[101,105576,105577],{"class":103,"line":104},[101,105578,104523],{"class":111},[72,105580,105581],{"id":105581},"数组维度看不懂",[10,105583,105584],{},"打印模型维度:",[92,105586,105588],{"className":30367,"code":105587,"language":30369,"meta":20,"style":20},"print(model.nq, model.nv, model.nu)\n",[98,105589,105590],{"__ignoreMap":20},[101,105591,105592,105594],{"class":103,"line":104},[101,105593,30404],{"class":160},[101,105595,105596],{"class":111},"(model.nq, model.nv, model.nu)\n",[249,105598,105599,105607],{},[252,105600,105601],{},[255,105602,105603,105605],{},[258,105604,104554],{"align":23725},[258,105606,100680],{"align":23725},[296,105608,105609,105619,105629],{},[255,105610,105611,105616],{},[301,105612,105613],{"align":23725},[98,105614,105615],{},"nq",[301,105617,105618],{"align":23725},"位置变量数量",[255,105620,105621,105626],{},[301,105622,105623],{"align":23725},[98,105624,105625],{},"nv",[301,105627,105628],{"align":23725},"速度变量数量",[255,105630,105631,105635],{},[301,105632,105633],{"align":23725},[98,105634,102142],{},[301,105636,105637],{"align":23725},"控制输入数量",[72,105639,105641,105642,105644],{"id":105640},"误以为-qpos-一定等于关节数","误以为 ",[98,105643,104010],{}," 一定等于关节数",[10,105646,105647,105648,82519,105650,105652,105653,105655],{},"不是。例如 ",[98,105649,101600],{},[98,105651,104010],{}," 是 7 维，但 ",[98,105654,104340],{}," 是 6 维。",[72,105657,105659,105660,105662],{"id":105658},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[98,105661,104010],{}," 的第几位",[10,105664,105665],{},"初学时可以先打印：",[92,105667,105669],{"className":30367,"code":105668,"language":30369,"meta":20,"style":20},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[98,105670,105671,105681,105691,105703],{"__ignoreMap":20},[101,105672,105673,105675,105677,105679],{"class":103,"line":104},[101,105674,30404],{"class":160},[101,105676,112],{"class":111},[101,105678,101419],{"class":216},[101,105680,101422],{"class":111},[101,105682,105683,105685,105687,105689],{"class":103,"line":21},[101,105684,30404],{"class":160},[101,105686,112],{"class":111},[101,105688,101431],{"class":216},[101,105690,101434],{"class":111},[101,105692,105693,105695,105697,105700],{"class":103,"line":1166},[101,105694,30404],{"class":160},[101,105696,112],{"class":111},[101,105698,105699],{"class":216},"\"qpos:\"",[101,105701,105702],{"class":111},", data.qpos)\n",[101,105704,105705,105707,105709,105712],{"class":103,"line":1181},[101,105706,30404],{"class":160},[101,105708,112],{"class":111},[101,105710,105711],{"class":216},"\"qvel:\"",[101,105713,105714],{"class":111},", data.qvel)\n",[10,105716,105717],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[72,105719,105720],{"id":105720},"仿真结果每次都一样",[10,105722,105723,105724,105726],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[98,105725,104010],{},"、目标点或控制输入。",[43,105728,102587],{"id":102586},[10,105730,105731,105732,24607],{},"Python 控制 MuJoCo 的核心就是读写 ",[98,105733,33390],{},[55,105735,105736,105744,105749,105754],{},[58,105737,105738,105739,100998,105741,105743],{},"用 ",[98,105740,101050],{},[98,105742,101053],{}," 读取状态。",[58,105745,105738,105746,105748],{},[98,105747,101056],{}," 写入控制。",[58,105750,105738,105751,105753],{},[98,105752,101195],{}," 推进时间。",[58,105755,105756,105757,105759],{},"手动改状态后用 ",[98,105758,104230],{}," 刷新派生量。",[10,105761,105762],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5114,105764,105765],{},"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":20,"searchDepth":21,"depth":21,"links":105767},[105768,105769,105770,105777,105781,105782,105783,105793],{"id":100626,"depth":21,"text":100627},{"id":100749,"depth":21,"text":100750},{"id":101024,"depth":21,"text":101025,"children":105771},[105772,105774,105776],{"id":104535,"depth":1166,"text":105773},"qpos、qvel、ctrl 是什么",{"id":104613,"depth":1166,"text":105775},"mj_step 和 mj_forward 的区别",{"id":104702,"depth":1166,"text":104703},{"id":101232,"depth":21,"text":101233,"children":105778},[105779,105780],{"id":101552,"depth":1166,"text":101552},{"id":101688,"depth":1166,"text":101688},{"id":102295,"depth":21,"text":102296},{"id":102327,"depth":21,"text":102328},{"id":102432,"depth":21,"text":102433,"children":105784},[105785,105787,105788,105790,105792],{"id":105564,"depth":1166,"text":105786},"修改 data.qpos 后位置没有更新",{"id":105581,"depth":1166,"text":105581},{"id":105640,"depth":1166,"text":105789},"误以为 qpos 一定等于关节数",{"id":105658,"depth":1166,"text":105791},"不知道某个元素在 qpos 的第几位",{"id":105720,"depth":1166,"text":105720},{"id":102586,"depth":21,"text":102587},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104298,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105800,"title":105801,"body":105802,"description":20,"extension":24,"meta":107492,"navigation":27,"path":107493,"seo":107494,"stem":107495,"__hash__":107496},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105803,"toc":107468},[105804,105807,105809,105812,105814,105839,105842,105861,105864,105866,105868,105892,105894,105908,105910,105951,105953,105977,105979,105982,106016,106018,106031,106034,106102,106111,106115,106118,106152,106158,106161,106165,106204,106207,106227,106231,106274,106276,106305,106308,106314,106317,106319,106713,106715,106727,106729,106740,106742,106745,106774,106782,106785,106820,106823,106825,106833,106836,106838,106849,106859,106879,106882,106918,106930,106978,106997,107039,107052,107080,107085,107106,107116,107134,107137,107171,107174,107194,107197,107216,107222,107224,107227,107233,107239,107249,107252,107258,107267,107269,107315,107317,107323,107329,107332,107335,107355,107358,107364,107370,107372,107395,107398,107401,107410,107413,107451,107453,107456,107462,107465],[39,105805,105801],{"id":105806},"_4关节actuator-与力控制",[43,105808,100627],{"id":100626},[10,105810,105811],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[10,105813,104311],{},[55,105815,105816,105822,105827,105831,105836],{},[58,105817,105818,105821],{},[98,105819,105820],{},"hinge"," 关节",[58,105823,105824],{},[98,105825,105826],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[58,105828,105829],{},[98,105830,101056],{},[58,105832,105833],{},[98,105834,105835],{},"ctrlrange",[58,105837,105838],{},"读取关节角和角速度",[10,105840,105841],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[92,105843,105845],{"className":30367,"code":105844,"language":30369,"meta":20,"style":20},"data.ctrl[0] = ...\n",[98,105846,105847],{"__ignoreMap":20},[101,105848,105849,105852,105854,105856,105858],{"class":103,"line":104},[101,105850,105851],{"class":111},"data.ctrl[",[101,105853,303],{"class":160},[101,105855,4430],{"class":111},[101,105857,157],{"class":107},[101,105859,105860],{"class":160}," ...\n",[10,105862,105863],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[43,105865,100750],{"id":100749},[10,105867,100753],{},[92,105869,105870],{"className":23811,"code":104368,"language":23813,"meta":20,"style":20},[98,105871,105872],{"__ignoreMap":20},[101,105873,105874,105876,105878,105880,105882,105884,105886,105888,105890],{"class":103,"line":104},[101,105875,24565],{"class":1950},[101,105877,26304],{"class":216},[101,105879,23823],{"class":216},[101,105881,26389],{"class":160},[101,105883,104383],{"class":216},[101,105885,100778],{"class":216},[101,105887,102481],{"class":216},[101,105889,100794],{"class":216},[101,105891,104392],{"class":216},[10,105893,102799],{},[92,105895,105896],{"className":23811,"code":100899,"language":23813,"meta":20,"style":20},[98,105897,105898],{"__ignoreMap":20},[101,105899,105900,105902,105904,105906],{"class":103,"line":104},[101,105901,23820],{"class":1950},[101,105903,23823],{"class":216},[101,105905,100910],{"class":216},[101,105907,100913],{"class":216},[10,105909,102816],{},[92,105911,105913],{"className":23811,"code":105912,"language":23813,"meta":20,"style":20},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[98,105914,105915,105932,105941],{"__ignoreMap":20},[101,105916,105917,105919,105921,105923,105926,105928,105930],{"class":103,"line":104},[101,105918,30319],{"class":1950},[101,105920,29165],{"class":216},[101,105922,25104],{"class":160},[101,105924,105925],{"class":216}," mujoco-control",[101,105927,100955],{"class":216},[101,105929,100958],{"class":160},[101,105931,100961],{"class":160},[101,105933,105934,105936,105938],{"class":103,"line":21},[101,105935,30319],{"class":1950},[101,105937,100968],{"class":216},[101,105939,105940],{"class":216}," mujoco-control\n",[101,105942,105943,105945,105947,105949],{"class":103,"line":1166},[101,105944,23820],{"class":1950},[101,105946,23823],{"class":216},[101,105948,100910],{"class":216},[101,105950,100913],{"class":216},[10,105952,100984],{},[55,105954,105955,105961,105968,105974],{},[58,105956,105957,105960],{},[98,105958,105959],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[58,105962,105963,105965,105966,28374],{},[98,105964,101056],{}," 长度等于 ",[98,105967,102138],{},[58,105969,82211,105970,105973],{},[98,105971,105972],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[58,105975,105976],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[43,105978,101025],{"id":101024},[10,105980,105981],{},"关节决定 body 如何运动:",[92,105983,105985],{"className":53056,"code":105984,"language":53058,"meta":20,"style":20},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[98,105986,105987],{"__ignoreMap":20},[101,105988,105989,105991,105993,105995,105997,106000,106002,106004,106006,106009,106011,106014],{"class":103,"line":104},[101,105990,1021],{"class":111},[101,105992,102936],{"class":51289},[101,105994,14908],{"class":1950},[101,105996,157],{"class":111},[101,105998,105999],{"class":216},"\"hinge\"",[101,106001,53813],{"class":1950},[101,106003,157],{"class":111},[101,106005,105999],{"class":216},[101,106007,106008],{"class":1950}," axis",[101,106010,157],{"class":111},[101,106012,106013],{"class":216},"\"0 1 0\"",[101,106015,101124],{"class":111},[10,106017,103032],{},[55,106019,106020,106025,106028],{},[58,106021,106022,106023],{},"名字是 ",[98,106024,105820],{},[58,106026,106027],{},"类型是旋转关节",[58,106029,106030],{},"绕 y 轴旋转",[10,106032,106033],{},"actuator 决定如何施加控制:",[92,106035,106037],{"className":53056,"code":106036,"language":53058,"meta":20,"style":20},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[98,106038,106039,106048,106094],{"__ignoreMap":20},[101,106040,106041,106043,106046],{"class":103,"line":104},[101,106042,1021],{"class":111},[101,106044,106045],{"class":51289},"actuator",[101,106047,51296],{"class":111},[101,106049,106050,106052,106055,106057,106059,106062,106065,106067,106069,106072,106074,106076,106079,106081,106084,106087,106089,106092],{"class":103,"line":21},[101,106051,52133],{"class":111},[101,106053,106054],{"class":51289},"motor",[101,106056,14908],{"class":1950},[101,106058,157],{"class":111},[101,106060,106061],{"class":216},"\"hinge_motor\"",[101,106063,106064],{"class":1950}," joint",[101,106066,157],{"class":111},[101,106068,105999],{"class":216},[101,106070,106071],{"class":1950}," gear",[101,106073,157],{"class":111},[101,106075,3665],{"class":216},[101,106077,106078],{"class":1950}," ctrlrange",[101,106080,157],{"class":111},[101,106082,106083],{"class":216},"\"-2 2\"",[101,106085,106086],{"class":1950}," ctrllimited",[101,106088,157],{"class":111},[101,106090,106091],{"class":216},"\"true\"",[101,106093,101124],{"class":111},[101,106095,106096,106098,106100],{"class":103,"line":1166},[101,106097,51774],{"class":111},[101,106099,106045],{"class":51289},[101,106101,51296],{"class":111},[10,106103,106104,106107,106108,28374],{},[98,106105,106106],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[98,106109,106110],{},"[-2, 2]",[72,106112,106114],{"id":106113},"joint-和-actuator-的关系","joint 和 actuator 的关系",[10,106116,106117],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[249,106119,106120,106130],{},[252,106121,106122],{},[255,106123,106124,106126,106128],{},[258,106125,25742],{"align":23725},[258,106127,102676],{"align":23725},[258,106129,100714],{"align":23725},[296,106131,106132,106142],{},[255,106133,106134,106136,106139],{},[301,106135,102936],{"align":23725},[301,106137,106138],{"align":23725},"定义能怎么动",[301,106140,106141],{"align":23725},"门轴允许门旋转",[255,106143,106144,106146,106149],{},[301,106145,106045],{"align":23725},[301,106147,106148],{"align":23725},"定义怎么施力或控制",[301,106150,106151],{"align":23725},"人推门、马达带动门",[10,106153,106154,106155,106157],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[98,106156,101056],{}," 主动控制它。",[10,106159,106160],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[72,106162,106164],{"id":106163},"hinge-joint","hinge joint",[92,106166,106168],{"className":53056,"code":106167,"language":53058,"meta":20,"style":20},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[98,106169,106170],{"__ignoreMap":20},[101,106171,106172,106174,106176,106178,106180,106182,106184,106186,106188,106190,106192,106194,106197,106199,106202],{"class":103,"line":104},[101,106173,1021],{"class":111},[101,106175,102936],{"class":51289},[101,106177,14908],{"class":1950},[101,106179,157],{"class":111},[101,106181,105999],{"class":216},[101,106183,53813],{"class":1950},[101,106185,157],{"class":111},[101,106187,105999],{"class":216},[101,106189,106008],{"class":1950},[101,106191,157],{"class":111},[101,106193,106013],{"class":216},[101,106195,106196],{"class":1950}," damping",[101,106198,157],{"class":111},[101,106200,106201],{"class":216},"\"0.1\"",[101,106203,101124],{"class":111},[10,106205,106206],{},"含义：",[55,106208,106209,106215,106221],{},[58,106210,106211,106214],{},[98,106212,106213],{},"type=\"hinge\"","：只能绕一个轴旋转。",[58,106216,106217,106220],{},[98,106218,106219],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[58,106222,106223,106226],{},[98,106224,106225],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[72,106228,106230],{"id":106229},"motor-actuator","motor actuator",[92,106232,106234],{"className":53056,"code":106233,"language":53058,"meta":20,"style":20},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[98,106235,106236],{"__ignoreMap":20},[101,106237,106238,106240,106242,106244,106246,106248,106250,106252,106254,106256,106258,106260,106262,106264,106266,106268,106270,106272],{"class":103,"line":104},[101,106239,1021],{"class":111},[101,106241,106054],{"class":51289},[101,106243,14908],{"class":1950},[101,106245,157],{"class":111},[101,106247,106061],{"class":216},[101,106249,106064],{"class":1950},[101,106251,157],{"class":111},[101,106253,105999],{"class":216},[101,106255,106071],{"class":1950},[101,106257,157],{"class":111},[101,106259,3665],{"class":216},[101,106261,106078],{"class":1950},[101,106263,157],{"class":111},[101,106265,106083],{"class":216},[101,106267,106086],{"class":1950},[101,106269,157],{"class":111},[101,106271,106091],{"class":216},[101,106273,101124],{"class":111},[10,106275,106206],{},[55,106277,106278,106287,106293,106299],{},[58,106279,106280,106283,106284,106286],{},[98,106281,106282],{},"joint=\"hinge\"","：这个电机作用在名为 ",[98,106285,105820],{}," 的关节上。",[58,106288,106289,106292],{},[98,106290,106291],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[58,106294,106295,106298],{},[98,106296,106297],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[58,106300,106301,106304],{},[98,106302,106303],{},"ctrllimited=\"true\"","：启用控制范围限制。",[10,106306,106307],{},"简单理解：",[92,106309,106312],{"className":106310,"code":106311,"language":5175,"meta":20},[5173],"实际施加效果 ≈ data.ctrl[0] * gear\n",[98,106313,106311],{"__ignoreMap":20},[10,106315,106316],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[43,106318,101233],{"id":101232},[92,106320,106322],{"className":30367,"code":106321,"language":30369,"meta":20,"style":20},"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",[98,106323,106324,106331,106335,106341,106351,106355,106359,106367,106372,106377,106381,106385,106390,106395,106399,106404,106409,106414,106419,106423,106427,106431,106436,106441,106446,106450,106454,106458,106462,106474,106486,106494,106498,106508,106518,106528,106532,106545,106558,106562,106579,106593,106628,106632,106636,106647,106662,106677,106689,106693,106697,106709],{"__ignoreMap":20},[101,106325,106326,106328],{"class":103,"line":104},[101,106327,30381],{"class":107},[101,106329,106330],{"class":111}," math\n",[101,106332,106333],{"class":103,"line":21},[101,106334,2387],{"emptyLinePlaceholder":27},[101,106336,106337,106339],{"class":103,"line":1166},[101,106338,30381],{"class":107},[101,106340,101281],{"class":111},[101,106342,106343,106345,106347,106349],{"class":103,"line":1181},[101,106344,30381],{"class":107},[101,106346,31369],{"class":111},[101,106348,31372],{"class":107},[101,106350,31375],{"class":111},[101,106352,106353],{"class":103,"line":1187},[101,106354,2387],{"emptyLinePlaceholder":27},[101,106356,106357],{"class":103,"line":1201},[101,106358,2387],{"emptyLinePlaceholder":27},[101,106360,106361,106363,106365],{"class":103,"line":1207},[101,106362,101294],{"class":160},[101,106364,13552],{"class":107},[101,106366,101299],{"class":216},[101,106368,106369],{"class":103,"line":1298},[101,106370,106371],{"class":216},"\u003Cmujoco model=\"one_link_motor\">\n",[101,106373,106374],{"class":103,"line":1304},[101,106375,106376],{"class":216},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[101,106378,106379],{"class":103,"line":1316},[101,106380,2387],{"emptyLinePlaceholder":27},[101,106382,106383],{"class":103,"line":1599},[101,106384,101318],{"class":216},[101,106386,106387],{"class":103,"line":1604},[101,106388,106389],{"class":216},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[101,106391,106392],{"class":103,"line":1610},[101,106393,106394],{"class":216},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[101,106396,106397],{"class":103,"line":1615},[101,106398,2387],{"emptyLinePlaceholder":27},[101,106400,106401],{"class":103,"line":1629},[101,106402,106403],{"class":216},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[101,106405,106406],{"class":103,"line":1634},[101,106407,106408],{"class":216},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[101,106410,106411],{"class":103,"line":1640},[101,106412,106413],{"class":216},"        \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",[101,106415,106416],{"class":103,"line":1661},[101,106417,106418],{"class":216},"      \u003C\u002Fbody>\n",[101,106420,106421],{"class":103,"line":1666},[101,106422,101347],{"class":216},[101,106424,106425],{"class":103,"line":1680},[101,106426,101352],{"class":216},[101,106428,106429],{"class":103,"line":1685},[101,106430,2387],{"emptyLinePlaceholder":27},[101,106432,106433],{"class":103,"line":1714},[101,106434,106435],{"class":216},"  \u003Cactuator>\n",[101,106437,106438],{"class":103,"line":1719},[101,106439,106440],{"class":216},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[101,106442,106443],{"class":103,"line":1736},[101,106444,106445],{"class":216},"  \u003C\u002Factuator>\n",[101,106447,106448],{"class":103,"line":1741},[101,106449,101357],{"class":216},[101,106451,106452],{"class":103,"line":1746},[101,106453,95678],{"class":216},[101,106455,106456],{"class":103,"line":1751},[101,106457,2387],{"emptyLinePlaceholder":27},[101,106459,106460],{"class":103,"line":1765},[101,106461,2387],{"emptyLinePlaceholder":27},[101,106463,106464,106466,106468,106470,106472],{"class":103,"line":1770},[101,106465,31936],{"class":107},[101,106467,1960],{"class":1950},[101,106469,101378],{"class":111},[101,106471,95666],{"class":160},[101,106473,3726],{"class":111},[101,106475,106476,106478,106480,106482,106484],{"class":103,"line":2564},[101,106477,101387],{"class":111},[101,106479,157],{"class":107},[101,106481,101392],{"class":111},[101,106483,101294],{"class":160},[101,106485,118],{"class":111},[101,106487,106488,106490,106492],{"class":103,"line":2578},[101,106489,101401],{"class":111},[101,106491,157],{"class":107},[101,106493,101406],{"class":111},[101,106495,106496],{"class":103,"line":2586},[101,106497,2387],{"emptyLinePlaceholder":27},[101,106499,106500,106502,106504,106506],{"class":103,"line":2591},[101,106501,31288],{"class":160},[101,106503,112],{"class":111},[101,106505,101419],{"class":216},[101,106507,101422],{"class":111},[101,106509,106510,106512,106514,106516],{"class":103,"line":2597},[101,106511,31288],{"class":160},[101,106513,112],{"class":111},[101,106515,101431],{"class":216},[101,106517,101434],{"class":111},[101,106519,106520,106522,106524,106526],{"class":103,"line":2603},[101,106521,31288],{"class":160},[101,106523,112],{"class":111},[101,106525,101443],{"class":216},[101,106527,101446],{"class":111},[101,106529,106530],{"class":103,"line":2608},[101,106531,2387],{"emptyLinePlaceholder":27},[101,106533,106534,106536,106539,106541,106543],{"class":103,"line":7936},[101,106535,3088],{"class":107},[101,106537,106538],{"class":111}," model.nu ",[101,106540,20936],{"class":107},[101,106542,25107],{"class":160},[101,106544,3726],{"class":111},[101,106546,106547,106549,106551,106553,106556],{"class":103,"line":7960},[101,106548,103412],{"class":107},[101,106550,103415],{"class":160},[101,106552,112],{"class":111},[101,106554,106555],{"class":216},"\"expected exactly one actuator\"",[101,106557,118],{"class":111},[101,106559,106560],{"class":103,"line":7965},[101,106561,2387],{"emptyLinePlaceholder":27},[101,106563,106564,106566,106568,106570,106572,106574,106577],{"class":103,"line":7971},[101,106565,3188],{"class":107},[101,106567,31605],{"class":111},[101,106569,26032],{"class":107},[101,106571,32432],{"class":160},[101,106573,112],{"class":111},[101,106575,106576],{"class":160},"2000",[101,106578,30775],{"class":111},[101,106580,106581,106584,106586,106588,106590],{"class":103,"line":7998},[101,106582,106583],{"class":111},"        t ",[101,106585,157],{"class":107},[101,106587,31605],{"class":111},[101,106589,566],{"class":107},[101,106591,106592],{"class":111}," model.opt.timestep\n",[101,106594,106595,106598,106600,106602,106604,106607,106609,106612,106614,106616,106619,106621,106623,106625],{"class":103,"line":8003},[101,106596,106597],{"class":111},"        data.ctrl[",[101,106599,303],{"class":160},[101,106601,4430],{"class":111},[101,106603,157],{"class":107},[101,106605,106606],{"class":160}," 1.5",[101,106608,6506],{"class":107},[101,106610,106611],{"class":111}," math.sin(",[101,106613,105240],{"class":160},[101,106615,6506],{"class":107},[101,106617,106618],{"class":111}," math.pi ",[101,106620,566],{"class":107},[101,106622,61856],{"class":160},[101,106624,6506],{"class":107},[101,106626,106627],{"class":111}," t)\n",[101,106629,106630],{"class":103,"line":8009},[101,106631,101496],{"class":111},[101,106633,106634],{"class":103,"line":8021},[101,106635,2387],{"emptyLinePlaceholder":27},[101,106637,106638,106640,106642,106645],{"class":103,"line":8033},[101,106639,31288],{"class":160},[101,106641,112],{"class":111},[101,106643,106644],{"class":216},"\"time:\"",[101,106646,101458],{"class":111},[101,106648,106649,106651,106653,106656,106658,106660],{"class":103,"line":8045},[101,106650,31288],{"class":160},[101,106652,112],{"class":111},[101,106654,106655],{"class":216},"\"joint qpos:\"",[101,106657,104910],{"class":111},[101,106659,404],{"class":160},[101,106661,30486],{"class":111},[101,106663,106664,106666,106668,106671,106673,106675],{"class":103,"line":9704},[101,106665,31288],{"class":160},[101,106667,112],{"class":111},[101,106669,106670],{"class":216},"\"joint qvel:\"",[101,106672,104926],{"class":111},[101,106674,404],{"class":160},[101,106676,30486],{"class":111},[101,106678,106679,106681,106683,106686],{"class":103,"line":9729},[101,106680,31288],{"class":160},[101,106682,112],{"class":111},[101,106684,106685],{"class":216},"\"last ctrl:\"",[101,106687,106688],{"class":111},", data.ctrl.copy())\n",[101,106690,106691],{"class":103,"line":9752},[101,106692,2387],{"emptyLinePlaceholder":27},[101,106694,106695],{"class":103,"line":9776},[101,106696,2387],{"emptyLinePlaceholder":27},[101,106698,106699,106701,106703,106705,106707],{"class":103,"line":9781},[101,106700,1518],{"class":107},[101,106702,31209],{"class":160},[101,106704,101539],{"class":107},[101,106706,101542],{"class":216},[101,106708,3726],{"class":111},[101,106710,106711],{"class":103,"line":9786},[101,106712,101549],{"class":111},[10,106714,103550],{},[92,106716,106718],{"className":23811,"code":106717,"language":23813,"meta":20,"style":20},"touch ch4_joint_motor.py\n",[98,106719,106720],{"__ignoreMap":20},[101,106721,106722,106724],{"class":103,"line":104},[101,106723,101263],{"class":1950},[101,106725,106726],{"class":216}," ch4_joint_motor.py\n",[10,106728,102281],{},[92,106730,106732],{"className":23811,"code":106731,"language":23813,"meta":20,"style":20},"python ch4_joint_motor.py\n",[98,106733,106734],{"__ignoreMap":20},[101,106735,106736,106738],{"class":103,"line":104},[101,106737,30369],{"class":1950},[101,106739,106726],{"class":216},[72,106741,101552],{"id":101552},[10,106743,106744],{},"检查 actuator 数量：",[92,106746,106748],{"className":30367,"code":106747,"language":30369,"meta":20,"style":20},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[98,106749,106750,106762],{"__ignoreMap":20},[101,106751,106752,106754,106756,106758,106760],{"class":103,"line":104},[101,106753,1518],{"class":107},[101,106755,106538],{"class":111},[101,106757,20936],{"class":107},[101,106759,25107],{"class":160},[101,106761,3726],{"class":111},[101,106763,106764,106766,106768,106770,106772],{"class":103,"line":21},[101,106765,103875],{"class":107},[101,106767,103415],{"class":160},[101,106769,112],{"class":111},[101,106771,106555],{"class":216},[101,106773,118],{"class":111},[10,106775,106776,106778,106779,106781],{},[98,106777,102138],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[98,106780,101056],{}," 长度应该是 1。",[10,106783,106784],{},"产生正弦控制信号：",[92,106786,106788],{"className":30367,"code":106787,"language":30369,"meta":20,"style":20},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[98,106789,106790],{"__ignoreMap":20},[101,106791,106792,106794,106796,106798,106800,106802,106804,106806,106808,106810,106812,106814,106816,106818],{"class":103,"line":104},[101,106793,105851],{"class":111},[101,106795,303],{"class":160},[101,106797,4430],{"class":111},[101,106799,157],{"class":107},[101,106801,106606],{"class":160},[101,106803,6506],{"class":107},[101,106805,106611],{"class":111},[101,106807,105240],{"class":160},[101,106809,6506],{"class":107},[101,106811,106618],{"class":111},[101,106813,566],{"class":107},[101,106815,61856],{"class":160},[101,106817,6506],{"class":107},[101,106819,106627],{"class":111},[10,106821,106822],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[10,106824,101653],{},[92,106826,106827],{"className":30367,"code":104485,"language":30369,"meta":20,"style":20},[98,106828,106829],{"__ignoreMap":20},[101,106830,106831],{"class":103,"line":104},[101,106832,104485],{"class":111},[10,106834,106835],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[72,106837,101688],{"id":101688},[92,106839,106841],{"className":30367,"code":106840,"language":30369,"meta":20,"style":20},"import math\n",[98,106842,106843],{"__ignoreMap":20},[101,106844,106845,106847],{"class":103,"line":104},[101,106846,30381],{"class":107},[101,106848,106330],{"class":111},[10,106850,106851,106852,100998,106855,106858],{},"导入 Python 标准库里的数学模块。后面要用 ",[98,106853,106854],{},"math.sin",[98,106856,106857],{},"math.pi"," 生成周期变化的控制信号。",[92,106860,106861],{"className":30367,"code":103666,"language":30369,"meta":20,"style":20},[98,106862,106863,106869],{"__ignoreMap":20},[101,106864,106865,106867],{"class":103,"line":104},[101,106866,30381],{"class":107},[101,106868,101281],{"class":111},[101,106870,106871,106873,106875,106877],{"class":103,"line":21},[101,106872,30381],{"class":107},[101,106874,31369],{"class":111},[101,106876,31372],{"class":107},[101,106878,31375],{"class":111},[10,106880,106881],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[92,106883,106884],{"className":53056,"code":106167,"language":53058,"meta":20,"style":20},[98,106885,106886],{"__ignoreMap":20},[101,106887,106888,106890,106892,106894,106896,106898,106900,106902,106904,106906,106908,106910,106912,106914,106916],{"class":103,"line":104},[101,106889,1021],{"class":111},[101,106891,102936],{"class":51289},[101,106893,14908],{"class":1950},[101,106895,157],{"class":111},[101,106897,105999],{"class":216},[101,106899,53813],{"class":1950},[101,106901,157],{"class":111},[101,106903,105999],{"class":216},[101,106905,106008],{"class":1950},[101,106907,157],{"class":111},[101,106909,106013],{"class":216},[101,106911,106196],{"class":1950},[101,106913,157],{"class":111},[101,106915,106201],{"class":216},[101,106917,101124],{"class":111},[10,106919,106920,106921,106923,106924,106926,106927,106929],{},"这行定义关节。",[98,106922,105820],{}," 表示旋转关节。",[98,106925,106219],{}," 表示绕 y 轴旋转。",[98,106928,106225],{}," 表示有一点阻尼，运动不会完全无损耗。",[92,106931,106933],{"className":53056,"code":106932,"language":53058,"meta":20,"style":20},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[98,106934,106935],{"__ignoreMap":20},[101,106936,106937,106939,106941,106943,106945,106948,106950,106952,106955,106958,106960,106963,106965,106967,106969,106971,106973,106976],{"class":103,"line":104},[101,106938,1021],{"class":111},[101,106940,101100],{"class":51289},[101,106942,14908],{"class":1950},[101,106944,157],{"class":111},[101,106946,106947],{"class":216},"\"link_geom\"",[101,106949,53813],{"class":1950},[101,106951,157],{"class":111},[101,106953,106954],{"class":216},"\"capsule\"",[101,106956,106957],{"class":1950}," fromto",[101,106959,157],{"class":111},[101,106961,106962],{"class":216},"\"0 0 0 0 0 0.5\"",[101,106964,101116],{"class":1950},[101,106966,157],{"class":111},[101,106968,103758],{"class":216},[101,106970,101981],{"class":1950},[101,106972,157],{"class":111},[101,106974,106975],{"class":216},"\"0.5\"",[101,106977,101124],{"class":111},[10,106979,106980,106981,106983,106984,106986,106987,106990,106991,28374,106994,106996],{},"这行定义摆杆的形状。",[98,106982,103145],{}," 是胶囊体，适合表示杆子。",[98,106985,103156],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[98,106988,106989],{},"(0,0,0)"," 延伸到 ",[98,106992,106993],{},"(0,0,0.5)",[98,106995,103150],{}," 是半径。",[92,106998,106999],{"className":53056,"code":106233,"language":53058,"meta":20,"style":20},[98,107000,107001],{"__ignoreMap":20},[101,107002,107003,107005,107007,107009,107011,107013,107015,107017,107019,107021,107023,107025,107027,107029,107031,107033,107035,107037],{"class":103,"line":104},[101,107004,1021],{"class":111},[101,107006,106054],{"class":51289},[101,107008,14908],{"class":1950},[101,107010,157],{"class":111},[101,107012,106061],{"class":216},[101,107014,106064],{"class":1950},[101,107016,157],{"class":111},[101,107018,105999],{"class":216},[101,107020,106071],{"class":1950},[101,107022,157],{"class":111},[101,107024,3665],{"class":216},[101,107026,106078],{"class":1950},[101,107028,157],{"class":111},[101,107030,106083],{"class":216},[101,107032,106086],{"class":1950},[101,107034,157],{"class":111},[101,107036,106091],{"class":216},[101,107038,101124],{"class":111},[10,107040,107041,107042,107044,107045,107048,107049,107051],{},"这行定义电机。它作用在 ",[98,107043,105820],{}," 关节上。",[98,107046,107047],{},"gear"," 可以理解成放大倍数。",[98,107050,105835],{}," 限制控制输入范围。",[92,107053,107054],{"className":30367,"code":106747,"language":30369,"meta":20,"style":20},[98,107055,107056,107068],{"__ignoreMap":20},[101,107057,107058,107060,107062,107064,107066],{"class":103,"line":104},[101,107059,1518],{"class":107},[101,107061,106538],{"class":111},[101,107063,20936],{"class":107},[101,107065,25107],{"class":160},[101,107067,3726],{"class":111},[101,107069,107070,107072,107074,107076,107078],{"class":103,"line":21},[101,107071,103875],{"class":107},[101,107073,103415],{"class":160},[101,107075,112],{"class":111},[101,107077,106555],{"class":216},[101,107079,118],{"class":111},[10,107081,107082,107084],{},[98,107083,102138],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[92,107086,107088],{"className":30367,"code":107087,"language":30369,"meta":20,"style":20},"for step in range(2000):\n",[98,107089,107090],{"__ignoreMap":20},[101,107091,107092,107094,107096,107098,107100,107102,107104],{"class":103,"line":104},[101,107093,3012],{"class":107},[101,107095,31605],{"class":111},[101,107097,26032],{"class":107},[101,107099,32432],{"class":160},[101,107101,112],{"class":111},[101,107103,106576],{"class":160},[101,107105,30775],{"class":111},[10,107107,107108,107109,107111,107112,107115],{},"循环 2000 步。这里没有用 ",[98,107110,1103],{},"，而是用 ",[98,107113,107114],{},"step","，因为后面要用当前步数计算时间。",[92,107117,107119],{"className":30367,"code":107118,"language":30369,"meta":20,"style":20},"t = step * model.opt.timestep\n",[98,107120,107121],{"__ignoreMap":20},[101,107122,107123,107126,107128,107130,107132],{"class":103,"line":104},[101,107124,107125],{"class":111},"t ",[101,107127,157],{"class":107},[101,107129,31605],{"class":111},[101,107131,566],{"class":107},[101,107133,106592],{"class":111},[10,107135,107136],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[92,107138,107139],{"className":30367,"code":106787,"language":30369,"meta":20,"style":20},[98,107140,107141],{"__ignoreMap":20},[101,107142,107143,107145,107147,107149,107151,107153,107155,107157,107159,107161,107163,107165,107167,107169],{"class":103,"line":104},[101,107144,105851],{"class":111},[101,107146,303],{"class":160},[101,107148,4430],{"class":111},[101,107150,157],{"class":107},[101,107152,106606],{"class":160},[101,107154,6506],{"class":107},[101,107156,106611],{"class":111},[101,107158,105240],{"class":160},[101,107160,6506],{"class":107},[101,107162,106618],{"class":111},[101,107164,566],{"class":107},[101,107166,61856],{"class":160},[101,107168,6506],{"class":107},[101,107170,106627],{"class":111},[10,107172,107173],{},"这行给电机输入一个正弦波。拆开看：",[55,107175,107176,107182,107188],{},[58,107177,107178,107181],{},[98,107179,107180],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[58,107183,107184,107187],{},[98,107185,107186],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[58,107189,107190,107193],{},[98,107191,107192],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[10,107195,107196],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[92,107198,107200],{"className":30367,"code":107199,"language":30369,"meta":20,"style":20},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[98,107201,107202],{"__ignoreMap":20},[101,107203,107204,107206,107208,107210,107212,107214],{"class":103,"line":104},[101,107205,30404],{"class":160},[101,107207,112],{"class":111},[101,107209,106655],{"class":216},[101,107211,104910],{"class":111},[101,107213,404],{"class":160},[101,107215,30486],{"class":111},[10,107217,107218,107219,107221],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[98,107220,101050],{}," 只有一个数。",[43,107223,102296],{"id":102295},[10,107225,107226],{},"输出类似:",[92,107228,107231],{"className":107229,"code":107230,"language":5175,"meta":20},[5173],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[98,107232,107230],{"__ignoreMap":20},[10,107234,107235,107236,107238],{},"这里 ",[98,107237,106106],{}," 是电机输入。",[10,107240,107241,107244,107245,107248],{},[98,107242,107243],{},"joint qpos"," 是关节角度，单位通常是弧度。",[98,107246,107247],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[10,107250,107251],{},"角度单位提示：",[92,107253,107256],{"className":107254,"code":107255,"language":5175,"meta":20},[5173],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[98,107257,107255],{"__ignoreMap":20},[10,107259,107260,107261,107263,107264,107266],{},"如果你看到 ",[98,107262,104010],{}," 是 ",[98,107265,35318],{},"，大约就是 28.6 度。",[43,107268,102328],{"id":102327},[55,107270,107271,107278,107281,107288,107291,107299,107307],{},[58,107272,102391,107273,102394,107275,28374],{},[98,107274,106291],{},[98,107276,107277],{},"gear=\"5\"",[58,107279,107280],{},"重新运行，观察关节运动是否更剧烈。",[58,107282,102391,107283,102394,107285,28374],{},[98,107284,105835],{},[98,107286,107287],{},"-0.2 0.2",[58,107289,107290],{},"重新运行，观察控制能力是否变弱。",[58,107292,107293,107294,107296,107297,28374],{},"去掉 actuator，确认 ",[98,107295,102138],{}," 变成 ",[98,107298,303],{},[58,107300,102391,107301,102394,107303,107306],{},[98,107302,106225],{},[98,107304,107305],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[58,107308,102391,107309,102394,107311,107314],{},[98,107310,106219],{},[98,107312,107313],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[43,107316,102433],{"id":102432},[72,107318,107320],{"id":107319},"indexerror-index-0-is-out-of-bounds",[98,107321,107322],{},"IndexError: index 0 is out of bounds",[10,107324,107325,107326,107328],{},"原因是 ",[98,107327,105972],{},"，没有 actuator。",[72,107330,107331],{"id":107331},"关节几乎不动",[10,107333,107334],{},"可能原因:",[55,107336,107337,107342,107346,107352],{},[58,107338,107339,107341],{},[98,107340,107047],{}," 太小",[58,107343,107344,107341],{},[98,107345,105835],{},[58,107347,107348,107351],{},[98,107349,107350],{},"damping"," 太大",[58,107353,107354],{},"重力方向导致运动不明显",[72,107356,107357],{"id":107357},"模型编译失败",[10,107359,107360,107361,107363],{},"检查 actuator 引用的 ",[98,107362,106282],{}," 是否存在，joint 名称是否拼写一致。",[72,107365,107367,107369],{"id":107366},"datactrl0-写了但没有效果",[98,107368,106106],{}," 写了但没有效果",[10,107371,102555],{},[55,107373,107374,107379,107382,107387,107392],{},[58,107375,107376,107378],{},[98,107377,102138],{}," 是否大于 0。",[58,107380,107381],{},"motor 是否引用了正确 joint。",[58,107383,107384,107386],{},[98,107385,107047],{}," 是否太小。",[58,107388,107389,107391],{},[98,107390,105835],{}," 是否把输入限制得太小。",[58,107393,107394],{},"body 是否真的有可动 joint。",[72,107396,107397],{"id":107397},"控制输入超过范围会怎样",[10,107399,107400],{},"如果设置了：",[92,107402,107404],{"className":53056,"code":107403,"language":53058,"meta":20,"style":20},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[98,107405,107406],{"__ignoreMap":20},[101,107407,107408],{"class":103,"line":104},[101,107409,107403],{"class":111},[10,107411,107412],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[92,107414,107416],{"className":30367,"code":107415,"language":30369,"meta":20,"style":20},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[98,107417,107418,107438],{"__ignoreMap":20},[101,107419,107420,107423,107425,107428,107430,107432,107434,107436],{"class":103,"line":104},[101,107421,107422],{"class":111},"action ",[101,107424,157],{"class":107},[101,107426,107427],{"class":111}," np.clip(action, ",[101,107429,643],{"class":107},[101,107431,105240],{"class":160},[101,107433,12423],{"class":111},[101,107435,105240],{"class":160},[101,107437,118],{"class":111},[101,107439,107440,107442,107444,107446,107448],{"class":103,"line":21},[101,107441,105851],{"class":111},[101,107443,303],{"class":160},[101,107445,4430],{"class":111},[101,107447,157],{"class":107},[101,107449,107450],{"class":111}," action\n",[43,107452,102587],{"id":102586},[10,107454,107455],{},"这一章建立了控制任务的基本形式：",[92,107457,107460],{"className":107458,"code":107459,"language":5175,"meta":20},[5173],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[98,107461,107459],{"__ignoreMap":20},[10,107463,107464],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5114,107466,107467],{},"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":20,"searchDepth":21,"depth":21,"links":107469},[107470,107471,107472,107477,107481,107482,107483,107491],{"id":100626,"depth":21,"text":100627},{"id":100749,"depth":21,"text":100750},{"id":101024,"depth":21,"text":101025,"children":107473},[107474,107475,107476],{"id":106113,"depth":1166,"text":106114},{"id":106163,"depth":1166,"text":106164},{"id":106229,"depth":1166,"text":106230},{"id":101232,"depth":21,"text":101233,"children":107478},[107479,107480],{"id":101552,"depth":1166,"text":101552},{"id":101688,"depth":1166,"text":101688},{"id":102295,"depth":21,"text":102296},{"id":102327,"depth":21,"text":102328},{"id":102432,"depth":21,"text":102433,"children":107484},[107485,107486,107487,107488,107490],{"id":107319,"depth":1166,"text":107322},{"id":107331,"depth":1166,"text":107331},{"id":107357,"depth":1166,"text":107357},{"id":107366,"depth":1166,"text":107489},"data.ctrl[0] 写了但没有效果",{"id":107397,"depth":1166,"text":107397},{"id":102586,"depth":21,"text":102587},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105801,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107498,"title":107499,"body":107500,"description":20,"extension":24,"meta":109409,"navigation":27,"path":109410,"seo":109411,"stem":109412,"__hash__":109413},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107501,"toc":109385},[107502,107505,107507,107510,107518,107521,107538,107541,107566,107569,107615,107617,107619,107674,107676,107695,107697,107740,107743,107760,107763,107779,107789,107796,107798,107801,107804,107838,107841,107889,107893,107896,107910,107919,107923,107926,107951,107954,107958,107971,107974,107980,107983,107998,108000,108003,108263,108265,108277,108280,108592,108594,108606,108608,108611,108626,108631,108634,108656,108659,108662,108696,108699,108703,108714,108717,108734,108737,108751,108758,108778,108785,108799,108802,108814,108829,108849,108852,108874,108877,108881,108896,108907,108922,108925,108955,108971,109000,109008,109032,109035,109053,109063,109075,109082,109091,109097,109106,109109,109111,109120,109123,109138,109140,109143,109154,109157,109168,109171,109189,109191,109208,109211,109239,109241,109245,109248,109278,109284,109287,109291,109299,109302,109304,109325,109328,109331,109347,109350,109366,109368,109371,109382],[39,107503,107499],{"id":107504},"_5viewer-可视化与-renderer-离屏渲染",[43,107506,100627],{"id":100626},[10,107508,107509],{},"本章掌握两类可视化方式:",[55,107511,107512,107515],{},[58,107513,107514],{},"交互式 viewer: 适合人工观察仿真",[58,107516,107517],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[10,107519,107520],{},"使用官方接口:",[92,107522,107524],{"className":30367,"code":107523,"language":30369,"meta":20,"style":20},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[98,107525,107526,107533],{"__ignoreMap":20},[101,107527,107528,107530],{"class":103,"line":104},[101,107529,30381],{"class":107},[101,107531,107532],{"class":111}," mujoco.viewer\n",[101,107534,107535],{"class":103,"line":21},[101,107536,107537],{"class":111},"mujoco.viewer.launch_passive(model, data)\n",[10,107539,107540],{},"以及:",[92,107542,107544],{"className":30367,"code":107543,"language":30369,"meta":20,"style":20},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[98,107545,107546,107556],{"__ignoreMap":20},[101,107547,107548,107551,107553],{"class":103,"line":104},[101,107549,107550],{"class":111},"renderer ",[101,107552,157],{"class":107},[101,107554,107555],{"class":111}," mujoco.Renderer(model)\n",[101,107557,107558,107561,107563],{"class":103,"line":21},[101,107559,107560],{"class":111},"image ",[101,107562,157],{"class":107},[101,107564,107565],{"class":111}," renderer.render()\n",[10,107567,107568],{},"新手建议先理解二者区别：",[249,107570,107571,107587],{},[252,107572,107573],{},[255,107574,107575,107578,107581,107584],{},[258,107576,107577],{"align":23725},"工具",[258,107579,107580],{"align":23725},"用途",[258,107582,107583],{"align":23725},"是否打开窗口",[258,107585,107586],{"align":23725},"常见场景",[296,107588,107589,107602],{},[255,107590,107591,107594,107597,107599],{},[301,107592,107593],{"align":23725},"Viewer",[301,107595,107596],{"align":23725},"人眼实时观察仿真",[301,107598,104645],{"align":23725},[301,107600,107601],{"align":23725},"调试模型、看控制效果",[255,107603,107604,107607,107610,107612],{},[301,107605,107606],{"align":23725},"Renderer",[301,107608,107609],{"align":23725},"生成图像数组",[301,107611,104658],{"align":23725},[301,107613,107614],{"align":23725},"保存图片、训练视觉策略、服务器批量采集",[43,107616,100750],{"id":100749},[10,107618,100753],{},[92,107620,107622],{"className":23811,"code":107621,"language":23813,"meta":20,"style":20},"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",[98,107623,107624,107636,107646,107654,107662],{"__ignoreMap":20},[101,107625,107626,107628,107630,107632,107634],{"class":103,"line":104},[101,107627,24565],{"class":1950},[101,107629,26304],{"class":216},[101,107631,23823],{"class":216},[101,107633,26389],{"class":160},[101,107635,24667],{"class":160},[101,107637,107638,107640,107642,107644],{"class":103,"line":21},[101,107639,100788],{"class":216},[101,107641,100791],{"class":216},[101,107643,100794],{"class":216},[101,107645,24667],{"class":160},[101,107647,107648,107650,107652],{"class":103,"line":1166},[101,107649,100801],{"class":216},[101,107651,100804],{"class":216},[101,107653,24667],{"class":160},[101,107655,107656,107658,107660],{"class":103,"line":1181},[101,107657,100811],{"class":216},[101,107659,100814],{"class":216},[101,107661,24667],{"class":160},[101,107663,107664,107666,107668,107670,107672],{"class":103,"line":1187},[101,107665,100821],{"class":216},[101,107667,100824],{"class":216},[101,107669,100827],{"class":216},[101,107671,100830],{"class":216},[101,107673,102496],{"class":216},[10,107675,102799],{},[92,107677,107679],{"className":23811,"code":107678,"language":23813,"meta":20,"style":20},"pip install \"mujoco>=2.3\" numpy pillow\n",[98,107680,107681],{"__ignoreMap":20},[101,107682,107683,107685,107687,107689,107692],{"class":103,"line":104},[101,107684,23820],{"class":1950},[101,107686,23823],{"class":216},[101,107688,100910],{"class":216},[101,107690,107691],{"class":216}," numpy",[101,107693,107694],{"class":216}," pillow\n",[10,107696,102816],{},[92,107698,107700],{"className":23811,"code":107699,"language":23813,"meta":20,"style":20},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[98,107701,107702,107719,107728],{"__ignoreMap":20},[101,107703,107704,107706,107708,107710,107713,107715,107717],{"class":103,"line":104},[101,107705,30319],{"class":1950},[101,107707,29165],{"class":216},[101,107709,25104],{"class":160},[101,107711,107712],{"class":216}," mujoco-render",[101,107714,100955],{"class":216},[101,107716,100958],{"class":160},[101,107718,100961],{"class":160},[101,107720,107721,107723,107725],{"class":103,"line":21},[101,107722,30319],{"class":1950},[101,107724,100968],{"class":216},[101,107726,107727],{"class":216}," mujoco-render\n",[101,107729,107730,107732,107734,107736,107738],{"class":103,"line":1166},[101,107731,23820],{"class":1950},[101,107733,23823],{"class":216},[101,107735,100910],{"class":216},[101,107737,107691],{"class":216},[101,107739,107694],{"class":216},[10,107741,107742],{},"离屏渲染后端:",[92,107744,107746],{"className":23811,"code":107745,"language":23813,"meta":20,"style":20},"export MUJOCO_GL=egl\n",[98,107747,107748],{"__ignoreMap":20},[101,107749,107750,107752,107755,107757],{"class":103,"line":104},[101,107751,25031],{"class":107},[101,107753,107754],{"class":111}," MUJOCO_GL",[101,107756,157],{"class":107},[101,107758,107759],{"class":111},"egl\n",[10,107761,107762],{},"或:",[92,107764,107766],{"className":23811,"code":107765,"language":23813,"meta":20,"style":20},"export MUJOCO_GL=osmesa\n",[98,107767,107768],{"__ignoreMap":20},[101,107769,107770,107772,107774,107776],{"class":103,"line":104},[101,107771,25031],{"class":107},[101,107773,107754],{"class":111},[101,107775,157],{"class":107},[101,107777,107778],{"class":111},"osmesa\n",[10,107780,107781,107782,107785,107786,28374],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[98,107783,107784],{},"egl"," 失败，再尝试 ",[98,107787,107788],{},"osmesa",[10,107790,107791,107792,107795],{},"如果你在本机桌面环境运行，通常先不要设置 ",[98,107793,107794],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[43,107797,101025],{"id":101024},[10,107799,107800],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[10,107802,107803],{},"典型 viewer 流程:",[92,107805,107807],{"className":30367,"code":107806,"language":30369,"meta":20,"style":20},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[98,107808,107809,107822,107829,107833],{"__ignoreMap":20},[101,107810,107811,107814,107817,107819],{"class":103,"line":104},[101,107812,107813],{"class":107},"with",[101,107815,107816],{"class":111}," mujoco.viewer.launch_passive(model, data) ",[101,107818,31372],{"class":107},[101,107820,107821],{"class":111}," viewer:\n",[101,107823,107824,107826],{"class":103,"line":21},[101,107825,2238],{"class":107},[101,107827,107828],{"class":111}," viewer.is_running():\n",[101,107830,107831],{"class":103,"line":1166},[101,107832,101496],{"class":111},[101,107834,107835],{"class":103,"line":1181},[101,107836,107837],{"class":111},"        viewer.sync()\n",[10,107839,107840],{},"典型 renderer 流程:",[92,107842,107844],{"className":30367,"code":107843,"language":30369,"meta":20,"style":20},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[98,107845,107846,107872,107876,107881],{"__ignoreMap":20},[101,107847,107848,107850,107852,107855,107857,107859,107861,107863,107865,107867,107870],{"class":103,"line":104},[101,107849,107550],{"class":111},[101,107851,157],{"class":107},[101,107853,107854],{"class":111}," mujoco.Renderer(model, ",[101,107856,24970],{"class":5204},[101,107858,157],{"class":107},[101,107860,42331],{"class":160},[101,107862,12423],{"class":111},[101,107864,24966],{"class":5204},[101,107866,157],{"class":107},[101,107868,107869],{"class":160},"640",[101,107871,118],{"class":111},[101,107873,107874],{"class":103,"line":21},[101,107875,104485],{"class":111},[101,107877,107878],{"class":103,"line":1166},[101,107879,107880],{"class":111},"renderer.update_scene(data)\n",[101,107882,107883,107885,107887],{"class":103,"line":1181},[101,107884,107560],{"class":111},[101,107886,157],{"class":107},[101,107888,107565],{"class":111},[72,107890,107892],{"id":107891},"viewer-的同步逻辑","viewer 的同步逻辑",[10,107894,107895],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[92,107897,107899],{"className":30367,"code":107898,"language":30369,"meta":20,"style":20},"mujoco.mj_step(model, data)\nviewer.sync()\n",[98,107900,107901,107905],{"__ignoreMap":20},[101,107902,107903],{"class":103,"line":104},[101,107904,104485],{"class":111},[101,107906,107907],{"class":103,"line":21},[101,107908,107909],{"class":111},"viewer.sync()\n",[10,107911,107912,107914,107915,107918],{},[98,107913,101195],{}," 负责算物理，",[98,107916,107917],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[72,107920,107922],{"id":107921},"为什么要-sleep","为什么要 sleep",[10,107924,107925],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[92,107927,107929],{"className":30367,"code":107928,"language":30369,"meta":20,"style":20},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[98,107930,107931],{"__ignoreMap":20},[101,107932,107933,107936,107938,107941,107943,107946,107948],{"class":103,"line":104},[101,107934,107935],{"class":111},"sleep_time ",[101,107937,157],{"class":107},[101,107939,107940],{"class":111}," model.opt.timestep ",[101,107942,643],{"class":107},[101,107944,107945],{"class":111}," (time.time() ",[101,107947,643],{"class":107},[101,107949,107950],{"class":111}," step_start)\n",[10,107952,107953],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[72,107955,107957],{"id":107956},"renderer-输出是什么","renderer 输出是什么",[92,107959,107961],{"className":30367,"code":107960,"language":30369,"meta":20,"style":20},"image = renderer.render()\n",[98,107962,107963],{"__ignoreMap":20},[101,107964,107965,107967,107969],{"class":103,"line":104},[101,107966,107560],{"class":111},[101,107968,157],{"class":107},[101,107970,107565],{"class":111},[10,107972,107973],{},"得到的是 NumPy 数组，形状通常是：",[92,107975,107978],{"className":107976,"code":107977,"language":5175,"meta":20},[5173],"(height, width, 3)\n",[98,107979,107977],{"__ignoreMap":20},[10,107981,107982],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[92,107984,107986],{"className":30367,"code":107985,"language":30369,"meta":20,"style":20},"Image.fromarray(image).save(\"render_output.png\")\n",[98,107987,107988],{"__ignoreMap":20},[101,107989,107990,107993,107996],{"class":103,"line":104},[101,107991,107992],{"class":111},"Image.fromarray(image).save(",[101,107994,107995],{"class":216},"\"render_output.png\"",[101,107997,118],{"class":111},[43,107999,101233],{"id":101232},[10,108001,108002],{},"交互式 Viewer:",[92,108004,108006],{"className":30367,"code":108005,"language":30369,"meta":20,"style":20},"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",[98,108007,108008,108014,108018,108024,108030,108034,108038,108046,108051,108055,108059,108063,108068,108073,108077,108081,108085,108090,108094,108098,108102,108106,108110,108114,108126,108138,108146,108150,108160,108180,108190,108195,108200,108204,108221,108234,108239,108243,108247,108259],{"__ignoreMap":20},[101,108009,108010,108012],{"class":103,"line":104},[101,108011,30381],{"class":107},[101,108013,31818],{"class":111},[101,108015,108016],{"class":103,"line":21},[101,108017,2387],{"emptyLinePlaceholder":27},[101,108019,108020,108022],{"class":103,"line":1166},[101,108021,30381],{"class":107},[101,108023,101281],{"class":111},[101,108025,108026,108028],{"class":103,"line":1181},[101,108027,30381],{"class":107},[101,108029,107532],{"class":111},[101,108031,108032],{"class":103,"line":1187},[101,108033,2387],{"emptyLinePlaceholder":27},[101,108035,108036],{"class":103,"line":1201},[101,108037,2387],{"emptyLinePlaceholder":27},[101,108039,108040,108042,108044],{"class":103,"line":1207},[101,108041,101294],{"class":160},[101,108043,13552],{"class":107},[101,108045,101299],{"class":216},[101,108047,108048],{"class":103,"line":1298},[101,108049,108050],{"class":216},"\u003Cmujoco model=\"viewer_demo\">\n",[101,108052,108053],{"class":103,"line":1304},[101,108054,101309],{"class":216},[101,108056,108057],{"class":103,"line":1316},[101,108058,2387],{"emptyLinePlaceholder":27},[101,108060,108061],{"class":103,"line":1599},[101,108062,101318],{"class":216},[101,108064,108065],{"class":103,"line":1604},[101,108066,108067],{"class":216},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[101,108069,108070],{"class":103,"line":1610},[101,108071,108072],{"class":216},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[101,108074,108075],{"class":103,"line":1615},[101,108076,2387],{"emptyLinePlaceholder":27},[101,108078,108079],{"class":103,"line":1629},[101,108080,101332],{"class":216},[101,108082,108083],{"class":103,"line":1634},[101,108084,101337],{"class":216},[101,108086,108087],{"class":103,"line":1640},[101,108088,108089],{"class":216},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[101,108091,108092],{"class":103,"line":1661},[101,108093,101347],{"class":216},[101,108095,108096],{"class":103,"line":1666},[101,108097,101352],{"class":216},[101,108099,108100],{"class":103,"line":1680},[101,108101,101357],{"class":216},[101,108103,108104],{"class":103,"line":1685},[101,108105,95678],{"class":216},[101,108107,108108],{"class":103,"line":1714},[101,108109,2387],{"emptyLinePlaceholder":27},[101,108111,108112],{"class":103,"line":1719},[101,108113,2387],{"emptyLinePlaceholder":27},[101,108115,108116,108118,108120,108122,108124],{"class":103,"line":1736},[101,108117,31936],{"class":107},[101,108119,1960],{"class":1950},[101,108121,101378],{"class":111},[101,108123,95666],{"class":160},[101,108125,3726],{"class":111},[101,108127,108128,108130,108132,108134,108136],{"class":103,"line":1741},[101,108129,101387],{"class":111},[101,108131,157],{"class":107},[101,108133,101392],{"class":111},[101,108135,101294],{"class":160},[101,108137,118],{"class":111},[101,108139,108140,108142,108144],{"class":103,"line":1746},[101,108141,101401],{"class":111},[101,108143,157],{"class":107},[101,108145,101406],{"class":111},[101,108147,108148],{"class":103,"line":1751},[101,108149,2387],{"emptyLinePlaceholder":27},[101,108151,108152,108154,108156,108158],{"class":103,"line":1765},[101,108153,34167],{"class":107},[101,108155,107816],{"class":111},[101,108157,31372],{"class":107},[101,108159,107821],{"class":111},[101,108161,108162,108165,108168,108170,108173,108175,108178],{"class":103,"line":1770},[101,108163,108164],{"class":107},"        while",[101,108166,108167],{"class":111}," viewer.is_running() ",[101,108169,30451],{"class":107},[101,108171,108172],{"class":111}," data.time ",[101,108174,1021],{"class":107},[101,108176,108177],{"class":160}," 5.0",[101,108179,3726],{"class":111},[101,108181,108182,108185,108187],{"class":103,"line":2564},[101,108183,108184],{"class":111},"            step_start ",[101,108186,157],{"class":107},[101,108188,108189],{"class":111}," time.time()\n",[101,108191,108192],{"class":103,"line":2578},[101,108193,108194],{"class":111},"            mujoco.mj_step(model, data)\n",[101,108196,108197],{"class":103,"line":2586},[101,108198,108199],{"class":111},"            viewer.sync()\n",[101,108201,108202],{"class":103,"line":2591},[101,108203,2387],{"emptyLinePlaceholder":27},[101,108205,108206,108209,108211,108213,108215,108217,108219],{"class":103,"line":2597},[101,108207,108208],{"class":111},"            sleep_time ",[101,108210,157],{"class":107},[101,108212,107940],{"class":111},[101,108214,643],{"class":107},[101,108216,107945],{"class":111},[101,108218,643],{"class":107},[101,108220,107950],{"class":111},[101,108222,108223,108225,108228,108230,108232],{"class":103,"line":2603},[101,108224,4629],{"class":107},[101,108226,108227],{"class":111}," sleep_time ",[101,108229,1071],{"class":107},[101,108231,4080],{"class":160},[101,108233,3726],{"class":111},[101,108235,108236],{"class":103,"line":2608},[101,108237,108238],{"class":111},"                time.sleep(sleep_time)\n",[101,108240,108241],{"class":103,"line":7936},[101,108242,2387],{"emptyLinePlaceholder":27},[101,108244,108245],{"class":103,"line":7960},[101,108246,2387],{"emptyLinePlaceholder":27},[101,108248,108249,108251,108253,108255,108257],{"class":103,"line":7965},[101,108250,1518],{"class":107},[101,108252,31209],{"class":160},[101,108254,101539],{"class":107},[101,108256,101542],{"class":216},[101,108258,3726],{"class":111},[101,108260,108261],{"class":103,"line":7971},[101,108262,101549],{"class":111},[10,108264,103550],{},[92,108266,108268],{"className":23811,"code":108267,"language":23813,"meta":20,"style":20},"touch ch5_viewer.py\n",[98,108269,108270],{"__ignoreMap":20},[101,108271,108272,108274],{"class":103,"line":104},[101,108273,101263],{"class":1950},[101,108275,108276],{"class":216}," ch5_viewer.py\n",[10,108278,108279],{},"离屏 Renderer 保存图片:",[92,108281,108283],{"className":30367,"code":108282,"language":30369,"meta":20,"style":20},"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",[98,108284,108285,108297,108301,108307,108317,108321,108325,108333,108338,108342,108346,108350,108354,108359,108363,108367,108371,108375,108379,108383,108387,108391,108395,108399,108403,108415,108427,108435,108460,108464,108480,108484,108488,108503,108512,108516,108530,108535,108540,108544,108556,108568,108572,108576,108588],{"__ignoreMap":20},[101,108286,108287,108289,108292,108294],{"class":103,"line":104},[101,108288,30726],{"class":107},[101,108290,108291],{"class":111}," pathlib ",[101,108293,30381],{"class":107},[101,108295,108296],{"class":111}," Path\n",[101,108298,108299],{"class":103,"line":21},[101,108300,2387],{"emptyLinePlaceholder":27},[101,108302,108303,108305],{"class":103,"line":1166},[101,108304,30381],{"class":107},[101,108306,101281],{"class":111},[101,108308,108309,108311,108313,108315],{"class":103,"line":1181},[101,108310,30726],{"class":107},[101,108312,47252],{"class":160},[101,108314,47255],{"class":107},[101,108316,47258],{"class":111},[101,108318,108319],{"class":103,"line":1187},[101,108320,2387],{"emptyLinePlaceholder":27},[101,108322,108323],{"class":103,"line":1201},[101,108324,2387],{"emptyLinePlaceholder":27},[101,108326,108327,108329,108331],{"class":103,"line":1207},[101,108328,101294],{"class":160},[101,108330,13552],{"class":107},[101,108332,101299],{"class":216},[101,108334,108335],{"class":103,"line":1298},[101,108336,108337],{"class":216},"\u003Cmujoco model=\"renderer_demo\">\n",[101,108339,108340],{"class":103,"line":1304},[101,108341,101309],{"class":216},[101,108343,108344],{"class":103,"line":1316},[101,108345,2387],{"emptyLinePlaceholder":27},[101,108347,108348],{"class":103,"line":1599},[101,108349,101318],{"class":216},[101,108351,108352],{"class":103,"line":1604},[101,108353,108067],{"class":216},[101,108355,108356],{"class":103,"line":1610},[101,108357,108358],{"class":216},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[101,108360,108361],{"class":103,"line":1615},[101,108362,108072],{"class":216},[101,108364,108365],{"class":103,"line":1629},[101,108366,2387],{"emptyLinePlaceholder":27},[101,108368,108369],{"class":103,"line":1634},[101,108370,101332],{"class":216},[101,108372,108373],{"class":103,"line":1640},[101,108374,101337],{"class":216},[101,108376,108377],{"class":103,"line":1661},[101,108378,108089],{"class":216},[101,108380,108381],{"class":103,"line":1666},[101,108382,101347],{"class":216},[101,108384,108385],{"class":103,"line":1680},[101,108386,101352],{"class":216},[101,108388,108389],{"class":103,"line":1685},[101,108390,101357],{"class":216},[101,108392,108393],{"class":103,"line":1714},[101,108394,95678],{"class":216},[101,108396,108397],{"class":103,"line":1719},[101,108398,2387],{"emptyLinePlaceholder":27},[101,108400,108401],{"class":103,"line":1736},[101,108402,2387],{"emptyLinePlaceholder":27},[101,108404,108405,108407,108409,108411,108413],{"class":103,"line":1741},[101,108406,31936],{"class":107},[101,108408,1960],{"class":1950},[101,108410,101378],{"class":111},[101,108412,95666],{"class":160},[101,108414,3726],{"class":111},[101,108416,108417,108419,108421,108423,108425],{"class":103,"line":1746},[101,108418,101387],{"class":111},[101,108420,157],{"class":107},[101,108422,101392],{"class":111},[101,108424,101294],{"class":160},[101,108426,118],{"class":111},[101,108428,108429,108431,108433],{"class":103,"line":1751},[101,108430,101401],{"class":111},[101,108432,157],{"class":107},[101,108434,101406],{"class":111},[101,108436,108437,108440,108442,108444,108446,108448,108450,108452,108454,108456,108458],{"class":103,"line":1765},[101,108438,108439],{"class":111},"    renderer ",[101,108441,157],{"class":107},[101,108443,107854],{"class":111},[101,108445,24970],{"class":5204},[101,108447,157],{"class":107},[101,108449,42331],{"class":160},[101,108451,12423],{"class":111},[101,108453,24966],{"class":5204},[101,108455,157],{"class":107},[101,108457,107869],{"class":160},[101,108459,118],{"class":111},[101,108461,108462],{"class":103,"line":1770},[101,108463,2387],{"emptyLinePlaceholder":27},[101,108465,108466,108468,108470,108472,108474,108476,108478],{"class":103,"line":2564},[101,108467,3188],{"class":107},[101,108469,101481],{"class":111},[101,108471,26032],{"class":107},[101,108473,32432],{"class":160},[101,108475,112],{"class":111},[101,108477,422],{"class":160},[101,108479,30775],{"class":111},[101,108481,108482],{"class":103,"line":2578},[101,108483,101496],{"class":111},[101,108485,108486],{"class":103,"line":2586},[101,108487,2387],{"emptyLinePlaceholder":27},[101,108489,108490,108493,108496,108498,108501],{"class":103,"line":2591},[101,108491,108492],{"class":111},"    renderer.update_scene(data, ",[101,108494,108495],{"class":5204},"camera",[101,108497,157],{"class":107},[101,108499,108500],{"class":216},"\"fixed_camera\"",[101,108502,118],{"class":111},[101,108504,108505,108508,108510],{"class":103,"line":2597},[101,108506,108507],{"class":111},"    image ",[101,108509,157],{"class":107},[101,108511,107565],{"class":111},[101,108513,108514],{"class":103,"line":2603},[101,108515,2387],{"emptyLinePlaceholder":27},[101,108517,108518,108521,108523,108526,108528],{"class":103,"line":2608},[101,108519,108520],{"class":111},"    output_path ",[101,108522,157],{"class":107},[101,108524,108525],{"class":111}," Path(",[101,108527,107995],{"class":216},[101,108529,118],{"class":111},[101,108531,108532],{"class":103,"line":7936},[101,108533,108534],{"class":111},"    Image.fromarray(image).save(output_path)\n",[101,108536,108537],{"class":103,"line":7960},[101,108538,108539],{"class":111},"    renderer.close()\n",[101,108541,108542],{"class":103,"line":7965},[101,108543,2387],{"emptyLinePlaceholder":27},[101,108545,108546,108548,108550,108553],{"class":103,"line":7971},[101,108547,31288],{"class":160},[101,108549,112],{"class":111},[101,108551,108552],{"class":216},"\"saved:\"",[101,108554,108555],{"class":111},", output_path.resolve())\n",[101,108557,108558,108560,108562,108565],{"class":103,"line":7998},[101,108559,31288],{"class":160},[101,108561,112],{"class":111},[101,108563,108564],{"class":216},"\"image shape:\"",[101,108566,108567],{"class":111},", image.shape)\n",[101,108569,108570],{"class":103,"line":8003},[101,108571,2387],{"emptyLinePlaceholder":27},[101,108573,108574],{"class":103,"line":8009},[101,108575,2387],{"emptyLinePlaceholder":27},[101,108577,108578,108580,108582,108584,108586],{"class":103,"line":8021},[101,108579,1518],{"class":107},[101,108581,31209],{"class":160},[101,108583,101539],{"class":107},[101,108585,101542],{"class":216},[101,108587,3726],{"class":111},[101,108589,108590],{"class":103,"line":8033},[101,108591,101549],{"class":111},[10,108593,103550],{},[92,108595,108597],{"className":23811,"code":108596,"language":23813,"meta":20,"style":20},"touch ch5_renderer.py\n",[98,108598,108599],{"__ignoreMap":20},[101,108600,108601,108603],{"class":103,"line":104},[101,108602,101263],{"class":1950},[101,108604,108605],{"class":216}," ch5_renderer.py\n",[72,108607,101552],{"id":101552},[10,108609,108610],{},"viewer 上下文：",[92,108612,108614],{"className":30367,"code":108613,"language":30369,"meta":20,"style":20},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[98,108615,108616],{"__ignoreMap":20},[101,108617,108618,108620,108622,108624],{"class":103,"line":104},[101,108619,107813],{"class":107},[101,108621,107816],{"class":111},[101,108623,31372],{"class":107},[101,108625,107821],{"class":111},[10,108627,108628,108630],{},[98,108629,107813],{}," 语句会创建窗口，并在退出时自动清理资源。",[10,108632,108633],{},"窗口循环：",[92,108635,108637],{"className":30367,"code":108636,"language":30369,"meta":20,"style":20},"while viewer.is_running() and data.time \u003C 5.0:\n",[98,108638,108639],{"__ignoreMap":20},[101,108640,108641,108644,108646,108648,108650,108652,108654],{"class":103,"line":104},[101,108642,108643],{"class":107},"while",[101,108645,108167],{"class":111},[101,108647,30451],{"class":107},[101,108649,108172],{"class":111},[101,108651,1021],{"class":107},[101,108653,108177],{"class":160},[101,108655,3726],{"class":111},[10,108657,108658],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[10,108660,108661],{},"固定相机：",[92,108663,108665],{"className":53056,"code":108664,"language":53058,"meta":20,"style":20},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[98,108666,108667],{"__ignoreMap":20},[101,108668,108669,108671,108673,108675,108677,108679,108681,108683,108686,108689,108691,108694],{"class":103,"line":104},[101,108670,1021],{"class":111},[101,108672,108495],{"class":51289},[101,108674,14908],{"class":1950},[101,108676,157],{"class":111},[101,108678,108500],{"class":216},[101,108680,101086],{"class":1950},[101,108682,157],{"class":111},[101,108684,108685],{"class":216},"\"1.5 -2.0 1.2\"",[101,108687,108688],{"class":1950}," xyaxes",[101,108690,157],{"class":111},[101,108692,108693],{"class":216},"\"1 0.75 0 0 0 1\"",[101,108695,101124],{"class":111},[10,108697,108698],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[72,108700,108702],{"id":108701},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[92,108704,108706],{"className":30367,"code":108705,"language":30369,"meta":20,"style":20},"import time\n",[98,108707,108708],{"__ignoreMap":20},[101,108709,108710,108712],{"class":103,"line":104},[101,108711,30381],{"class":107},[101,108713,31818],{"class":111},[10,108715,108716],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[92,108718,108720],{"className":30367,"code":108719,"language":30369,"meta":20,"style":20},"import mujoco\nimport mujoco.viewer\n",[98,108721,108722,108728],{"__ignoreMap":20},[101,108723,108724,108726],{"class":103,"line":104},[101,108725,30381],{"class":107},[101,108727,101281],{"class":111},[101,108729,108730,108732],{"class":103,"line":21},[101,108731,30381],{"class":107},[101,108733,107532],{"class":111},[10,108735,108736],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[92,108738,108739],{"className":30367,"code":108613,"language":30369,"meta":20,"style":20},[98,108740,108741],{"__ignoreMap":20},[101,108742,108743,108745,108747,108749],{"class":103,"line":104},[101,108744,107813],{"class":107},[101,108746,107816],{"class":111},[101,108748,31372],{"class":107},[101,108750,107821],{"class":111},[10,108752,108753,108754,108757],{},"打开一个 viewer 窗口。",[98,108755,108756],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[92,108759,108760],{"className":30367,"code":108636,"language":30369,"meta":20,"style":20},[98,108761,108762],{"__ignoreMap":20},[101,108763,108764,108766,108768,108770,108772,108774,108776],{"class":103,"line":104},[101,108765,108643],{"class":107},[101,108767,108167],{"class":111},[101,108769,30451],{"class":107},[101,108771,108172],{"class":111},[101,108773,1021],{"class":107},[101,108775,108177],{"class":160},[101,108777,3726],{"class":111},[10,108779,108780,108781,108784],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[98,108782,108783],{},"viewer.is_running()"," 会变成 false，循环结束。",[92,108786,108788],{"className":30367,"code":108787,"language":30369,"meta":20,"style":20},"step_start = time.time()\n",[98,108789,108790],{"__ignoreMap":20},[101,108791,108792,108795,108797],{"class":103,"line":104},[101,108793,108794],{"class":111},"step_start ",[101,108796,157],{"class":107},[101,108798,108189],{"class":111},[10,108800,108801],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[92,108803,108804],{"className":30367,"code":107898,"language":30369,"meta":20,"style":20},[98,108805,108806,108810],{"__ignoreMap":20},[101,108807,108808],{"class":103,"line":104},[101,108809,104485],{"class":111},[101,108811,108812],{"class":103,"line":21},[101,108813,107909],{"class":111},[10,108815,108816,108818,108819,108821,108822,108824,108825,108828],{},[98,108817,101195],{}," 推进物理仿真。",[98,108820,107917],{}," 把最新的 ",[98,108823,33390],{}," 同步到窗口里显示。没有 ",[98,108826,108827],{},"sync()","，窗口可能看不到最新状态。",[92,108830,108831],{"className":30367,"code":107928,"language":30369,"meta":20,"style":20},[98,108832,108833],{"__ignoreMap":20},[101,108834,108835,108837,108839,108841,108843,108845,108847],{"class":103,"line":104},[101,108836,107935],{"class":111},[101,108838,157],{"class":107},[101,108840,107940],{"class":111},[101,108842,643],{"class":107},[101,108844,107945],{"class":111},[101,108846,643],{"class":107},[101,108848,107950],{"class":111},[10,108850,108851],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[92,108853,108855],{"className":30367,"code":108854,"language":30369,"meta":20,"style":20},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[98,108856,108857,108869],{"__ignoreMap":20},[101,108858,108859,108861,108863,108865,108867],{"class":103,"line":104},[101,108860,1518],{"class":107},[101,108862,108227],{"class":111},[101,108864,1071],{"class":107},[101,108866,4080],{"class":160},[101,108868,3726],{"class":111},[101,108870,108871],{"class":103,"line":21},[101,108872,108873],{"class":111},"    time.sleep(sleep_time)\n",[10,108875,108876],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[72,108878,108880],{"id":108879},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[92,108882,108884],{"className":30367,"code":108883,"language":30369,"meta":20,"style":20},"from pathlib import Path\n",[98,108885,108886],{"__ignoreMap":20},[101,108887,108888,108890,108892,108894],{"class":103,"line":104},[101,108889,30726],{"class":107},[101,108891,108291],{"class":111},[101,108893,30381],{"class":107},[101,108895,108296],{"class":111},[10,108897,108898,108899,108902,108903,108906],{},"导入 ",[98,108900,108901],{},"Path","，用来处理文件路径。相比直接写字符串，",[98,108904,108905],{},"Path(\"render_output.png\")"," 更清晰。",[92,108908,108910],{"className":30367,"code":108909,"language":30369,"meta":20,"style":20},"from PIL import Image\n",[98,108911,108912],{"__ignoreMap":20},[101,108913,108914,108916,108918,108920],{"class":103,"line":104},[101,108915,30726],{"class":107},[101,108917,47252],{"class":160},[101,108919,47255],{"class":107},[101,108921,47258],{"class":111},[10,108923,108924],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[92,108926,108927],{"className":53056,"code":108664,"language":53058,"meta":20,"style":20},[98,108928,108929],{"__ignoreMap":20},[101,108930,108931,108933,108935,108937,108939,108941,108943,108945,108947,108949,108951,108953],{"class":103,"line":104},[101,108932,1021],{"class":111},[101,108934,108495],{"class":51289},[101,108936,14908],{"class":1950},[101,108938,157],{"class":111},[101,108940,108500],{"class":216},[101,108942,101086],{"class":1950},[101,108944,157],{"class":111},[101,108946,108685],{"class":216},[101,108948,108688],{"class":1950},[101,108950,157],{"class":111},[101,108952,108693],{"class":216},[101,108954,101124],{"class":111},[10,108956,108957,108958,108960,108961,108963,108964,108967,108968,108970],{},"定义一个相机。",[98,108959,79799],{}," 是相机名字。",[98,108962,104126],{}," 是相机在世界里的位置。",[98,108965,108966],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[98,108969,104126],{}," 来调视角。",[92,108972,108974],{"className":30367,"code":108973,"language":30369,"meta":20,"style":20},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[98,108975,108976],{"__ignoreMap":20},[101,108977,108978,108980,108982,108984,108986,108988,108990,108992,108994,108996,108998],{"class":103,"line":104},[101,108979,107550],{"class":111},[101,108981,157],{"class":107},[101,108983,107854],{"class":111},[101,108985,24970],{"class":5204},[101,108987,157],{"class":107},[101,108989,42331],{"class":160},[101,108991,12423],{"class":111},[101,108993,24966],{"class":5204},[101,108995,157],{"class":107},[101,108997,107869],{"class":160},[101,108999,118],{"class":111},[10,109001,109002,109003,100998,109005,109007],{},"创建离屏渲染器。",[98,109004,24970],{},[98,109006,24966],{}," 决定输出图片大小。",[92,109009,109010],{"className":30367,"code":101656,"language":30369,"meta":20,"style":20},[98,109011,109012,109028],{"__ignoreMap":20},[101,109013,109014,109016,109018,109020,109022,109024,109026],{"class":103,"line":104},[101,109015,3012],{"class":107},[101,109017,101481],{"class":111},[101,109019,26032],{"class":107},[101,109021,32432],{"class":160},[101,109023,112],{"class":111},[101,109025,422],{"class":160},[101,109027,30775],{"class":111},[101,109029,109030],{"class":103,"line":21},[101,109031,101679],{"class":111},[10,109033,109034],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[92,109036,109038],{"className":30367,"code":109037,"language":30369,"meta":20,"style":20},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[98,109039,109040],{"__ignoreMap":20},[101,109041,109042,109045,109047,109049,109051],{"class":103,"line":104},[101,109043,109044],{"class":111},"renderer.update_scene(data, ",[101,109046,108495],{"class":5204},[101,109048,157],{"class":107},[101,109050,108500],{"class":216},[101,109052,118],{"class":111},[10,109054,109055,109056,109058,109059,109062],{},"告诉 renderer：用当前 ",[98,109057,33390],{}," 的状态更新画面，并使用名为 ",[98,109060,109061],{},"fixed_camera"," 的相机视角。",[92,109064,109065],{"className":30367,"code":107960,"language":30369,"meta":20,"style":20},[98,109066,109067],{"__ignoreMap":20},[101,109068,109069,109071,109073],{"class":103,"line":104},[101,109070,107560],{"class":111},[101,109072,157],{"class":107},[101,109074,107565],{"class":111},[10,109076,109077,109078,109081],{},"真正渲染出图像。",[98,109079,109080],{},"image"," 是一个 NumPy 数组，不是文件。",[92,109083,109085],{"className":30367,"code":109084,"language":30369,"meta":20,"style":20},"Image.fromarray(image).save(output_path)\n",[98,109086,109087],{"__ignoreMap":20},[101,109088,109089],{"class":103,"line":104},[101,109090,109084],{"class":111},[10,109092,109093,109094,28374],{},"把数组转换成图片，并保存到 ",[98,109095,109096],{},"render_output.png",[92,109098,109100],{"className":30367,"code":109099,"language":30369,"meta":20,"style":20},"renderer.close()\n",[98,109101,109102],{"__ignoreMap":20},[101,109103,109104],{"class":103,"line":104},[101,109105,109099],{"class":111},[10,109107,109108],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[43,109110,102296],{"id":102295},[10,109112,109113,109114,109116,109117,28374],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[98,109115,109096],{},"，并输出图像数组形状，例如 ",[98,109118,109119],{},"(480, 640, 3)",[10,109121,109122],{},"如果图片里看不到方块，先检查：",[55,109124,109125,109128,109131],{},[58,109126,109127],{},"方块是否掉到相机视野外。",[58,109129,109130],{},"camera 位置是否合理。",[58,109132,109133,109134,109137],{},"是否在 ",[98,109135,109136],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[43,109139,102328],{"id":102327},[10,109141,109142],{},"运行 viewer:",[92,109144,109146],{"className":23811,"code":109145,"language":23813,"meta":20,"style":20},"python ch5_viewer.py\n",[98,109147,109148],{"__ignoreMap":20},[101,109149,109150,109152],{"class":103,"line":104},[101,109151,30369],{"class":1950},[101,109153,108276],{"class":216},[10,109155,109156],{},"运行 renderer:",[92,109158,109160],{"className":23811,"code":109159,"language":23813,"meta":20,"style":20},"python ch5_renderer.py\n",[98,109161,109162],{"__ignoreMap":20},[101,109163,109164,109166],{"class":103,"line":104},[101,109165,30369],{"class":1950},[101,109167,108605],{"class":216},[10,109169,109170],{},"如果在服务器上运行:",[92,109172,109174],{"className":23811,"code":109173,"language":23813,"meta":20,"style":20},"MUJOCO_GL=egl python ch5_renderer.py\n",[98,109175,109176],{"__ignoreMap":20},[101,109177,109178,109180,109182,109184,109187],{"class":103,"line":104},[101,109179,107794],{"class":111},[101,109181,157],{"class":107},[101,109183,107784],{"class":216},[101,109185,109186],{"class":1950}," python",[101,109188,108605],{"class":216},[10,109190,107762],{},[92,109192,109194],{"className":23811,"code":109193,"language":23813,"meta":20,"style":20},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[98,109195,109196],{"__ignoreMap":20},[101,109197,109198,109200,109202,109204,109206],{"class":103,"line":104},[101,109199,107794],{"class":111},[101,109201,157],{"class":107},[101,109203,107788],{"class":216},[101,109205,109186],{"class":1950},[101,109207,108605],{"class":216},[10,109209,109210],{},"再做几个练习：",[55,109212,109213,109220,109223,109229],{},[58,109214,109215,109216,109219],{},"把 renderer 分辨率改成 ",[98,109217,109218],{},"height=240, width=320","，观察输出 shape。",[58,109221,109222],{},"把方块颜色改成蓝色，重新保存图片。",[58,109224,109225,109226,109228],{},"把相机 ",[98,109227,104126],{}," 改远一点，观察画面中物体是否变小。",[58,109230,109231,109232,102394,109235,109238],{},"把 viewer 示例中的 ",[98,109233,109234],{},"data.time \u003C 5.0",[98,109236,109237],{},"data.time \u003C 20.0","，观察更长时间。",[43,109240,102433],{"id":102432},[72,109242,109244],{"id":109243},"viewer-窗口打不开","viewer 窗口打不开",[10,109246,109247],{},"安装:",[92,109249,109251],{"className":23811,"code":109250,"language":23813,"meta":20,"style":20},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[98,109252,109253],{"__ignoreMap":20},[101,109254,109255,109257,109259,109261,109263,109265,109267,109269,109271,109273,109275],{"class":103,"line":104},[101,109256,24565],{"class":1950},[101,109258,26304],{"class":216},[101,109260,23823],{"class":216},[101,109262,26389],{"class":160},[101,109264,102486],{"class":216},[101,109266,100814],{"class":216},[101,109268,102491],{"class":216},[101,109270,100827],{"class":216},[101,109272,100833],{"class":216},[101,109274,100824],{"class":216},[101,109276,109277],{"class":216}," libXinerama\n",[72,109279,109281],{"id":109280},"glfwerror",[98,109282,109283],{},"GLFWError",[10,109285,109286],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[72,109288,109290],{"id":109289},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[10,109292,109293,109294,82528,109296,109298],{},"尝试 ",[98,109295,101017],{},[98,109297,101020],{},"。可能存在版本差异。",[72,109300,109301],{"id":109301},"保存图片是黑的",[10,109303,102555],{},[55,109305,109306,109309,109312,109322],{},[58,109307,109308],{},"XML 里是否有 light。",[58,109310,109311],{},"相机是否对着模型。",[58,109313,109314,109315,109318,109319,28374],{},"是否先 ",[98,109316,109317],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[98,109320,109321],{},"renderer.render()",[58,109323,109324],{},"物体是否已经掉出视野。",[72,109326,109327],{"id":109327},"远程服务器没有显示器",[10,109329,109330],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[92,109332,109333],{"className":23811,"code":109173,"language":23813,"meta":20,"style":20},[98,109334,109335],{"__ignoreMap":20},[101,109336,109337,109339,109341,109343,109345],{"class":103,"line":104},[101,109338,107794],{"class":111},[101,109340,157],{"class":107},[101,109342,107784],{"class":216},[101,109344,109186],{"class":1950},[101,109346,108605],{"class":216},[10,109348,109349],{},"如果 EGL 不可用，再尝试：",[92,109351,109352],{"className":23811,"code":109193,"language":23813,"meta":20,"style":20},[98,109353,109354],{"__ignoreMap":20},[101,109355,109356,109358,109360,109362,109364],{"class":103,"line":104},[101,109357,107794],{"class":111},[101,109359,157],{"class":107},[101,109361,107788],{"class":216},[101,109363,109186],{"class":1950},[101,109365,108605],{"class":216},[43,109367,102587],{"id":102586},[10,109369,109370],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[55,109372,109373,109376,109379],{},[58,109374,109375],{},"先用 viewer 看模型和控制是否正常。",[58,109377,109378],{},"再用 renderer 保存图片或构造视觉观测。",[58,109380,109381],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5114,109383,109384],{},"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":20,"searchDepth":21,"depth":21,"links":109386},[109387,109388,109389,109394,109399,109400,109401,109408],{"id":100626,"depth":21,"text":100627},{"id":100749,"depth":21,"text":100750},{"id":101024,"depth":21,"text":101025,"children":109390},[109391,109392,109393],{"id":107891,"depth":1166,"text":107892},{"id":107921,"depth":1166,"text":107922},{"id":107956,"depth":1166,"text":107957},{"id":101232,"depth":21,"text":101233,"children":109395},[109396,109397,109398],{"id":101552,"depth":1166,"text":101552},{"id":108701,"depth":1166,"text":108702},{"id":108879,"depth":1166,"text":108880},{"id":102295,"depth":21,"text":102296},{"id":102327,"depth":21,"text":102328},{"id":102432,"depth":21,"text":102433,"children":109402},[109403,109404,109405,109406,109407],{"id":109243,"depth":1166,"text":109244},{"id":109280,"depth":1166,"text":109283},{"id":109289,"depth":1166,"text":109290},{"id":109301,"depth":1166,"text":109301},{"id":109327,"depth":1166,"text":109327},{"id":102586,"depth":21,"text":102587},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107499,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109415,"title":109416,"body":109417,"description":20,"extension":24,"meta":111328,"navigation":27,"path":111329,"seo":111330,"stem":111331,"__hash__":111332},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109418,"toc":111304},[109419,109422,109424,109427,109429,109448,109451,109457,109460,109462,109464,109488,109490,109504,109506,109547,109549,109560,109562,109565,109571,109574,109608,109611,109643,109646,109678,109682,109685,109725,109728,109734,109737,109743,109747,109750,109756,109759,109763,109766,109806,109808,109821,109824,109826,110408,110410,110422,110425,110436,110438,110441,110460,110472,110475,110496,110499,110502,110545,110548,110551,110571,110578,110580,110598,110613,110616,110622,110625,110631,110648,110655,110686,110697,110731,110742,110759,110768,110776,110781,110795,110798,110819,110825,110839,110844,110874,110884,110909,110917,110940,110943,110959,110962,110970,110976,110998,111011,111032,111041,111080,111091,111093,111096,111102,111105,111108,111114,111117,111137,111140,111142,111181,111183,111186,111194,111197,111200,111227,111230,111240,111246,111249,111255,111257,111263,111267,111270,111272,111275,111299,111302],[39,109420,109416],{"id":109421},"_6控制任务cartpole",[43,109423,100627],{"id":100626},[10,109425,109426],{},"本章搭建一个最小 Cartpole 控制任务。",[10,109428,104311],{},[55,109430,109431,109434,109436,109439,109442,109445],{},[58,109432,109433],{},"slide joint",[58,109435,106164],{},[58,109437,109438],{},"cart force actuator",[58,109440,109441],{},"状态观测",[58,109443,109444],{},"简单控制循环",[58,109446,109447],{},"reward 设计雏形",[10,109449,109450],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[92,109452,109455],{"className":109453,"code":109454,"language":5175,"meta":20},[5173],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[98,109456,109454],{"__ignoreMap":20},[10,109458,109459],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[43,109461,100750],{"id":100749},[10,109463,100753],{},[92,109465,109466],{"className":23811,"code":104368,"language":23813,"meta":20,"style":20},[98,109467,109468],{"__ignoreMap":20},[101,109469,109470,109472,109474,109476,109478,109480,109482,109484,109486],{"class":103,"line":104},[101,109471,24565],{"class":1950},[101,109473,26304],{"class":216},[101,109475,23823],{"class":216},[101,109477,26389],{"class":160},[101,109479,104383],{"class":216},[101,109481,100778],{"class":216},[101,109483,102481],{"class":216},[101,109485,100794],{"class":216},[101,109487,104392],{"class":216},[10,109489,102799],{},[92,109491,109492],{"className":23811,"code":100899,"language":23813,"meta":20,"style":20},[98,109493,109494],{"__ignoreMap":20},[101,109495,109496,109498,109500,109502],{"class":103,"line":104},[101,109497,23820],{"class":1950},[101,109499,23823],{"class":216},[101,109501,100910],{"class":216},[101,109503,100913],{"class":216},[10,109505,102816],{},[92,109507,109509],{"className":23811,"code":109508,"language":23813,"meta":20,"style":20},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[98,109510,109511,109528,109537],{"__ignoreMap":20},[101,109512,109513,109515,109517,109519,109522,109524,109526],{"class":103,"line":104},[101,109514,30319],{"class":1950},[101,109516,29165],{"class":216},[101,109518,25104],{"class":160},[101,109520,109521],{"class":216}," mujoco-cartpole",[101,109523,100955],{"class":216},[101,109525,100958],{"class":160},[101,109527,100961],{"class":160},[101,109529,109530,109532,109534],{"class":103,"line":21},[101,109531,30319],{"class":1950},[101,109533,100968],{"class":216},[101,109535,109536],{"class":216}," mujoco-cartpole\n",[101,109538,109539,109541,109543,109545],{"class":103,"line":1166},[101,109540,23820],{"class":1950},[101,109542,23823],{"class":216},[101,109544,100910],{"class":216},[101,109546,100913],{"class":216},[10,109548,100984],{},[55,109550,109551,109554,109557],{},[58,109552,109553],{},"本章不依赖 Gymnasium。",[58,109555,109556],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[58,109558,109559],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[43,109561,101025],{"id":101024},[10,109563,109564],{},"Cartpole 的模型结构:",[92,109566,109569],{"className":109567,"code":109568,"language":5175,"meta":20},[5173],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[98,109570,109568],{"__ignoreMap":20},[10,109572,109573],{},"小车通过 slide joint 左右移动:",[92,109575,109577],{"className":53056,"code":109576,"language":53058,"meta":20,"style":20},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[98,109578,109579],{"__ignoreMap":20},[101,109580,109581,109583,109585,109587,109589,109592,109594,109596,109599,109601,109603,109606],{"class":103,"line":104},[101,109582,1021],{"class":111},[101,109584,102936],{"class":51289},[101,109586,14908],{"class":1950},[101,109588,157],{"class":111},[101,109590,109591],{"class":216},"\"cart_x\"",[101,109593,53813],{"class":1950},[101,109595,157],{"class":111},[101,109597,109598],{"class":216},"\"slide\"",[101,109600,106008],{"class":1950},[101,109602,157],{"class":111},[101,109604,109605],{"class":216},"\"1 0 0\"",[101,109607,101124],{"class":111},[10,109609,109610],{},"杆子通过 hinge joint 旋转:",[92,109612,109614],{"className":53056,"code":109613,"language":53058,"meta":20,"style":20},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[98,109615,109616],{"__ignoreMap":20},[101,109617,109618,109620,109622,109624,109626,109629,109631,109633,109635,109637,109639,109641],{"class":103,"line":104},[101,109619,1021],{"class":111},[101,109621,102936],{"class":51289},[101,109623,14908],{"class":1950},[101,109625,157],{"class":111},[101,109627,109628],{"class":216},"\"pole_hinge\"",[101,109630,53813],{"class":1950},[101,109632,157],{"class":111},[101,109634,105999],{"class":216},[101,109636,106008],{"class":1950},[101,109638,157],{"class":111},[101,109640,106013],{"class":216},[101,109642,101124],{"class":111},[10,109644,109645],{},"控制力作用在小车 slide joint 上:",[92,109647,109649],{"className":53056,"code":109648,"language":53058,"meta":20,"style":20},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[98,109650,109651],{"__ignoreMap":20},[101,109652,109653,109655,109657,109659,109661,109664,109666,109668,109670,109672,109674,109676],{"class":103,"line":104},[101,109654,1021],{"class":111},[101,109656,106054],{"class":51289},[101,109658,14908],{"class":1950},[101,109660,157],{"class":111},[101,109662,109663],{"class":216},"\"cart_motor\"",[101,109665,106064],{"class":1950},[101,109667,157],{"class":111},[101,109669,109591],{"class":216},[101,109671,106071],{"class":1950},[101,109673,157],{"class":111},[101,109675,54305],{"class":216},[101,109677,101124],{"class":111},[72,109679,109681],{"id":109680},"cartpole-的状态是什么","Cartpole 的状态是什么",[10,109683,109684],{},"这个简化模型有两个关节：",[249,109686,109687,109698],{},[252,109688,109689],{},[255,109690,109691,109693,109695],{},[258,109692,102739],{"align":23725},[258,109694,23726],{"align":23725},[258,109696,109697],{"align":23725},"对应状态",[296,109699,109700,109713],{},[255,109701,109702,109707,109710],{},[301,109703,109704],{"align":23725},[98,109705,109706],{},"cart_x",[301,109708,109709],{"align":23725},"slide",[301,109711,109712],{"align":23725},"小车 x 位置",[255,109714,109715,109720,109722],{},[301,109716,109717],{"align":23725},[98,109718,109719],{},"pole_hinge",[301,109721,105820],{"align":23725},[301,109723,109724],{"align":23725},"杆子角度",[10,109726,109727],{},"所以：",[92,109729,109732],{"className":109730,"code":109731,"language":5175,"meta":20},[5173],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[98,109733,109731],{"__ignoreMap":20},[10,109735,109736],{},"把它们拼起来就是观测：",[92,109738,109741],{"className":109739,"code":109740,"language":5175,"meta":20},[5173],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[98,109742,109740],{"__ignoreMap":20},[72,109744,109746],{"id":109745},"action-是什么","action 是什么",[10,109748,109749],{},"本章只有一个 actuator：",[92,109751,109754],{"className":109752,"code":109753,"language":5175,"meta":20},[5173],"data.ctrl[0] = action\n",[98,109755,109753],{"__ignoreMap":20},[10,109757,109758],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[72,109760,109762],{"id":109761},"reward-是什么","reward 是什么",[10,109764,109765],{},"奖励函数：",[92,109767,109769],{"className":30367,"code":109768,"language":30369,"meta":20,"style":20},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[98,109770,109771],{"__ignoreMap":20},[101,109772,109773,109775,109778,109780,109782,109784,109787,109789,109792,109794,109796,109798,109801,109803],{"class":103,"line":104},[101,109774,17034],{"class":107},[101,109776,109777],{"class":160}," float",[101,109779,112],{"class":111},[101,109781,102383],{"class":160},[101,109783,52260],{"class":107},[101,109785,109786],{"class":160}," 0.1",[101,109788,6506],{"class":107},[101,109790,109791],{"class":111}," cart_x ",[101,109793,566],{"class":107},[101,109795,109791],{"class":111},[101,109797,643],{"class":107},[101,109799,109800],{"class":111}," pole_angle ",[101,109802,566],{"class":107},[101,109804,109805],{"class":111}," pole_angle)\n",[10,109807,106206],{},[55,109809,109810,109815,109818],{},[58,109811,109812,109813,28374],{},"基础奖励是 ",[98,109814,102383],{},[58,109816,109817],{},"小车离中心越远，扣分越多。",[58,109819,109820],{},"杆子角度越大，扣分越多。",[10,109822,109823],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[43,109825,101233],{"id":101232},[92,109827,109829],{"className":30367,"code":109828,"language":30369,"meta":20,"style":20},"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",[98,109830,109831,109837,109847,109851,109855,109863,109868,109872,109876,109880,109885,109889,109894,109899,109904,109908,109913,109918,109923,109927,109931,109935,109939,109943,109948,109952,109956,109960,109964,109968,109978,109985,109989,109993,110007,110021,110034,110064,110068,110072,110084,110096,110104,110108,110121,110125,110129,110138,110142,110158,110168,110181,110194,110198,110221,110239,110243,110255,110259,110263,110273,110283,110287,110303,110344,110348,110368,110384,110388,110392,110404],{"__ignoreMap":20},[101,109832,109833,109835],{"class":103,"line":104},[101,109834,30381],{"class":107},[101,109836,101281],{"class":111},[101,109838,109839,109841,109843,109845],{"class":103,"line":21},[101,109840,30381],{"class":107},[101,109842,31369],{"class":111},[101,109844,31372],{"class":107},[101,109846,31375],{"class":111},[101,109848,109849],{"class":103,"line":1166},[101,109850,2387],{"emptyLinePlaceholder":27},[101,109852,109853],{"class":103,"line":1181},[101,109854,2387],{"emptyLinePlaceholder":27},[101,109856,109857,109859,109861],{"class":103,"line":1187},[101,109858,101294],{"class":160},[101,109860,13552],{"class":107},[101,109862,101299],{"class":216},[101,109864,109865],{"class":103,"line":1201},[101,109866,109867],{"class":216},"\u003Cmujoco model=\"cartpole\">\n",[101,109869,109870],{"class":103,"line":1207},[101,109871,101309],{"class":216},[101,109873,109874],{"class":103,"line":1298},[101,109875,2387],{"emptyLinePlaceholder":27},[101,109877,109878],{"class":103,"line":1304},[101,109879,101318],{"class":216},[101,109881,109882],{"class":103,"line":1316},[101,109883,109884],{"class":216},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[101,109886,109887],{"class":103,"line":1599},[101,109888,2387],{"emptyLinePlaceholder":27},[101,109890,109891],{"class":103,"line":1604},[101,109892,109893],{"class":216},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[101,109895,109896],{"class":103,"line":1610},[101,109897,109898],{"class":216},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[101,109900,109901],{"class":103,"line":1615},[101,109902,109903],{"class":216},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[101,109905,109906],{"class":103,"line":1629},[101,109907,2387],{"emptyLinePlaceholder":27},[101,109909,109910],{"class":103,"line":1634},[101,109911,109912],{"class":216},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[101,109914,109915],{"class":103,"line":1640},[101,109916,109917],{"class":216},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[101,109919,109920],{"class":103,"line":1661},[101,109921,109922],{"class":216},"        \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",[101,109924,109925],{"class":103,"line":1666},[101,109926,106418],{"class":216},[101,109928,109929],{"class":103,"line":1680},[101,109930,101347],{"class":216},[101,109932,109933],{"class":103,"line":1685},[101,109934,101352],{"class":216},[101,109936,109937],{"class":103,"line":1714},[101,109938,2387],{"emptyLinePlaceholder":27},[101,109940,109941],{"class":103,"line":1719},[101,109942,106435],{"class":216},[101,109944,109945],{"class":103,"line":1736},[101,109946,109947],{"class":216},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[101,109949,109950],{"class":103,"line":1741},[101,109951,106445],{"class":216},[101,109953,109954],{"class":103,"line":1746},[101,109955,101357],{"class":216},[101,109957,109958],{"class":103,"line":1751},[101,109959,95678],{"class":216},[101,109961,109962],{"class":103,"line":1765},[101,109963,2387],{"emptyLinePlaceholder":27},[101,109965,109966],{"class":103,"line":1770},[101,109967,2387],{"emptyLinePlaceholder":27},[101,109969,109970,109972,109975],{"class":103,"line":2564},[101,109971,31936],{"class":107},[101,109973,109974],{"class":1950}," get_observation",[101,109976,109977],{"class":111},"(data: mujoco.MjData) -> np.ndarray:\n",[101,109979,109980,109982],{"class":103,"line":2578},[101,109981,4077],{"class":107},[101,109983,109984],{"class":111}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[101,109986,109987],{"class":103,"line":2586},[101,109988,2387],{"emptyLinePlaceholder":27},[101,109990,109991],{"class":103,"line":2591},[101,109992,2387],{"emptyLinePlaceholder":27},[101,109994,109995,109997,110000,110003,110005],{"class":103,"line":2597},[101,109996,31936],{"class":107},[101,109998,109999],{"class":1950}," compute_reward",[101,110001,110002],{"class":111},"(obs: np.ndarray) -> ",[101,110004,151],{"class":160},[101,110006,3726],{"class":111},[101,110008,110009,110012,110014,110017,110019],{"class":103,"line":2603},[101,110010,110011],{"class":111},"    cart_x ",[101,110013,157],{"class":107},[101,110015,110016],{"class":111}," obs[",[101,110018,303],{"class":160},[101,110020,33235],{"class":111},[101,110022,110023,110026,110028,110030,110032],{"class":103,"line":2608},[101,110024,110025],{"class":111},"    pole_angle ",[101,110027,157],{"class":107},[101,110029,110016],{"class":111},[101,110031,329],{"class":160},[101,110033,33235],{"class":111},[101,110035,110036,110038,110040,110042,110044,110046,110048,110050,110052,110054,110056,110058,110060,110062],{"class":103,"line":7936},[101,110037,4077],{"class":107},[101,110039,109777],{"class":160},[101,110041,112],{"class":111},[101,110043,102383],{"class":160},[101,110045,52260],{"class":107},[101,110047,109786],{"class":160},[101,110049,6506],{"class":107},[101,110051,109791],{"class":111},[101,110053,566],{"class":107},[101,110055,109791],{"class":111},[101,110057,643],{"class":107},[101,110059,109800],{"class":111},[101,110061,566],{"class":107},[101,110063,109805],{"class":111},[101,110065,110066],{"class":103,"line":7960},[101,110067,2387],{"emptyLinePlaceholder":27},[101,110069,110070],{"class":103,"line":7965},[101,110071,2387],{"emptyLinePlaceholder":27},[101,110073,110074,110076,110078,110080,110082],{"class":103,"line":7971},[101,110075,31936],{"class":107},[101,110077,1960],{"class":1950},[101,110079,101378],{"class":111},[101,110081,95666],{"class":160},[101,110083,3726],{"class":111},[101,110085,110086,110088,110090,110092,110094],{"class":103,"line":7998},[101,110087,101387],{"class":111},[101,110089,157],{"class":107},[101,110091,101392],{"class":111},[101,110093,101294],{"class":160},[101,110095,118],{"class":111},[101,110097,110098,110100,110102],{"class":103,"line":8003},[101,110099,101401],{"class":111},[101,110101,157],{"class":107},[101,110103,101406],{"class":111},[101,110105,110106],{"class":103,"line":8009},[101,110107,2387],{"emptyLinePlaceholder":27},[101,110109,110110,110112,110114,110116,110118],{"class":103,"line":8021},[101,110111,105049],{"class":111},[101,110113,329],{"class":160},[101,110115,4430],{"class":111},[101,110117,157],{"class":107},[101,110119,110120],{"class":160}," 0.1\n",[101,110122,110123],{"class":103,"line":8033},[101,110124,105062],{"class":111},[101,110126,110127],{"class":103,"line":8045},[101,110128,2387],{"emptyLinePlaceholder":27},[101,110130,110131,110134,110136],{"class":103,"line":9704},[101,110132,110133],{"class":111},"    total_reward ",[101,110135,157],{"class":107},[101,110137,104741],{"class":160},[101,110139,110140],{"class":103,"line":9729},[101,110141,2387],{"emptyLinePlaceholder":27},[101,110143,110144,110146,110148,110150,110152,110154,110156],{"class":103,"line":9752},[101,110145,3188],{"class":107},[101,110147,31605],{"class":111},[101,110149,26032],{"class":107},[101,110151,32432],{"class":160},[101,110153,112],{"class":111},[101,110155,6398],{"class":160},[101,110157,30775],{"class":111},[101,110159,110160,110163,110165],{"class":103,"line":9776},[101,110161,110162],{"class":111},"        obs ",[101,110164,157],{"class":107},[101,110166,110167],{"class":111}," get_observation(data)\n",[101,110169,110170,110173,110175,110177,110179],{"class":103,"line":9781},[101,110171,110172],{"class":111},"        pole_angle ",[101,110174,157],{"class":107},[101,110176,110016],{"class":111},[101,110178,329],{"class":160},[101,110180,33235],{"class":111},[101,110182,110183,110186,110188,110190,110192],{"class":103,"line":9786},[101,110184,110185],{"class":111},"        pole_angular_velocity ",[101,110187,157],{"class":107},[101,110189,110016],{"class":111},[101,110191,183],{"class":160},[101,110193,33235],{"class":111},[101,110195,110196],{"class":103,"line":9791},[101,110197,2387],{"emptyLinePlaceholder":27},[101,110199,110200,110203,110205,110208,110210,110212,110214,110216,110218],{"class":103,"line":9800},[101,110201,110202],{"class":111},"        action ",[101,110204,157],{"class":107},[101,110206,110207],{"class":160}," 2.0",[101,110209,6506],{"class":107},[101,110211,109800],{"class":111},[101,110213,592],{"class":107},[101,110215,61856],{"class":160},[101,110217,6506],{"class":107},[101,110219,110220],{"class":111}," pole_angular_velocity\n",[101,110222,110223,110225,110227,110229,110231,110233,110235,110237],{"class":103,"line":9805},[101,110224,110202],{"class":111},[101,110226,157],{"class":107},[101,110228,107427],{"class":111},[101,110230,643],{"class":107},[101,110232,102383],{"class":160},[101,110234,12423],{"class":111},[101,110236,102383],{"class":160},[101,110238,118],{"class":111},[101,110240,110241],{"class":103,"line":9811},[101,110242,2387],{"emptyLinePlaceholder":27},[101,110244,110245,110247,110249,110251,110253],{"class":103,"line":9832},[101,110246,106597],{"class":111},[101,110248,303],{"class":160},[101,110250,4430],{"class":111},[101,110252,157],{"class":107},[101,110254,107450],{"class":111},[101,110256,110257],{"class":103,"line":9838},[101,110258,101496],{"class":111},[101,110260,110261],{"class":103,"line":9852},[101,110262,2387],{"emptyLinePlaceholder":27},[101,110264,110265,110268,110270],{"class":103,"line":9858},[101,110266,110267],{"class":111},"        reward ",[101,110269,157],{"class":107},[101,110271,110272],{"class":111}," compute_reward(get_observation(data))\n",[101,110274,110275,110278,110280],{"class":103,"line":9885},[101,110276,110277],{"class":111},"        total_reward ",[101,110279,9465],{"class":107},[101,110281,110282],{"class":111}," reward\n",[101,110284,110285],{"class":103,"line":9894},[101,110286,2387],{"emptyLinePlaceholder":27},[101,110288,110289,110291,110293,110295,110297,110299,110301],{"class":103,"line":9900},[101,110290,2484],{"class":107},[101,110292,31605],{"class":111},[101,110294,439],{"class":107},[101,110296,5742],{"class":160},[101,110298,101539],{"class":107},[101,110300,4080],{"class":160},[101,110302,3726],{"class":111},[101,110304,110305,110307,110309,110312,110315,110318,110321,110323,110326,110329,110331,110333,110335,110337,110340,110342],{"class":103,"line":9908},[101,110306,34639],{"class":160},[101,110308,112],{"class":111},[101,110310,110311],{"class":216},"\"step:\"",[101,110313,110314],{"class":111},", step, ",[101,110316,110317],{"class":216},"\"obs:\"",[101,110319,110320],{"class":111},", np.round(obs, ",[101,110322,183],{"class":160},[101,110324,110325],{"class":111},"), ",[101,110327,110328],{"class":216},"\"action:\"",[101,110330,12423],{"class":111},[101,110332,32007],{"class":160},[101,110334,112],{"class":111},[101,110336,151],{"class":160},[101,110338,110339],{"class":111},"(action), ",[101,110341,183],{"class":160},[101,110343,30486],{"class":111},[101,110345,110346],{"class":103,"line":9913},[101,110347,2387],{"emptyLinePlaceholder":27},[101,110349,110350,110352,110354,110357,110359,110361,110364,110366],{"class":103,"line":16592},[101,110351,31288],{"class":160},[101,110353,112],{"class":111},[101,110355,110356],{"class":216},"\"total_reward:\"",[101,110358,12423],{"class":111},[101,110360,32007],{"class":160},[101,110362,110363],{"class":111},"(total_reward, ",[101,110365,183],{"class":160},[101,110367,30486],{"class":111},[101,110369,110370,110372,110374,110377,110380,110382],{"class":103,"line":16598},[101,110371,31288],{"class":160},[101,110373,112],{"class":111},[101,110375,110376],{"class":216},"\"final obs:\"",[101,110378,110379],{"class":111},", np.round(get_observation(data), ",[101,110381,183],{"class":160},[101,110383,30486],{"class":111},[101,110385,110386],{"class":103,"line":16621},[101,110387,2387],{"emptyLinePlaceholder":27},[101,110389,110390],{"class":103,"line":16627},[101,110391,2387],{"emptyLinePlaceholder":27},[101,110393,110394,110396,110398,110400,110402],{"class":103,"line":16650},[101,110395,1518],{"class":107},[101,110397,31209],{"class":160},[101,110399,101539],{"class":107},[101,110401,101542],{"class":216},[101,110403,3726],{"class":111},[101,110405,110406],{"class":103,"line":16664},[101,110407,101549],{"class":111},[10,110409,103550],{},[92,110411,110413],{"className":23811,"code":110412,"language":23813,"meta":20,"style":20},"touch ch6_cartpole.py\n",[98,110414,110415],{"__ignoreMap":20},[101,110416,110417,110419],{"class":103,"line":104},[101,110418,101263],{"class":1950},[101,110420,110421],{"class":216}," ch6_cartpole.py\n",[10,110423,110424],{},"运行：",[92,110426,110428],{"className":23811,"code":110427,"language":23813,"meta":20,"style":20},"python ch6_cartpole.py\n",[98,110429,110430],{"__ignoreMap":20},[101,110431,110432,110434],{"class":103,"line":104},[101,110433,30369],{"class":1950},[101,110435,110421],{"class":216},[72,110437,101552],{"id":101552},[10,110439,110440],{},"构造观测：",[92,110442,110444],{"className":30367,"code":110443,"language":30369,"meta":20,"style":20},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[98,110445,110446,110454],{"__ignoreMap":20},[101,110447,110448,110450,110452],{"class":103,"line":104},[101,110449,31936],{"class":107},[101,110451,109974],{"class":1950},[101,110453,109977],{"class":111},[101,110455,110456,110458],{"class":103,"line":21},[101,110457,4077],{"class":107},[101,110459,109984],{"class":111},[10,110461,110462,110465,110466,110468,110469,110471],{},[98,110463,110464],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[98,110467,104010],{}," 2 维，",[98,110470,104340],{}," 2 维，所以 obs 是 4 维。",[10,110473,110474],{},"设置初始角度：",[92,110476,110478],{"className":30367,"code":110477,"language":30369,"meta":20,"style":20},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[98,110479,110480,110492],{"__ignoreMap":20},[101,110481,110482,110484,110486,110488,110490],{"class":103,"line":104},[101,110483,104679],{"class":111},[101,110485,329],{"class":160},[101,110487,4430],{"class":111},[101,110489,157],{"class":107},[101,110491,110120],{"class":160},[101,110493,110494],{"class":103,"line":21},[101,110495,104523],{"class":111},[10,110497,110498],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[10,110500,110501],{},"简单反馈控制：",[92,110503,110505],{"className":30367,"code":110504,"language":30369,"meta":20,"style":20},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[98,110506,110507,110527],{"__ignoreMap":20},[101,110508,110509,110511,110513,110515,110517,110519,110521,110523,110525],{"class":103,"line":104},[101,110510,107422],{"class":111},[101,110512,157],{"class":107},[101,110514,110207],{"class":160},[101,110516,6506],{"class":107},[101,110518,109800],{"class":111},[101,110520,592],{"class":107},[101,110522,61856],{"class":160},[101,110524,6506],{"class":107},[101,110526,110220],{"class":111},[101,110528,110529,110531,110533,110535,110537,110539,110541,110543],{"class":103,"line":21},[101,110530,107422],{"class":111},[101,110532,157],{"class":107},[101,110534,107427],{"class":111},[101,110536,643],{"class":107},[101,110538,102383],{"class":160},[101,110540,12423],{"class":111},[101,110542,102383],{"class":160},[101,110544,118],{"class":111},[10,110546,110547],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[10,110549,110550],{},"限制动作：",[92,110552,110554],{"className":30367,"code":110553,"language":30369,"meta":20,"style":20},"np.clip(action, -1.0, 1.0)\n",[98,110555,110556],{"__ignoreMap":20},[101,110557,110558,110561,110563,110565,110567,110569],{"class":103,"line":104},[101,110559,110560],{"class":111},"np.clip(action, ",[101,110562,643],{"class":107},[101,110564,102383],{"class":160},[101,110566,12423],{"class":111},[101,110568,102383],{"class":160},[101,110570,118],{"class":111},[10,110572,110573,110574,110577],{},"因为 XML 里 ",[98,110575,110576],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[72,110579,101688],{"id":101688},[92,110581,110582],{"className":30367,"code":110443,"language":30369,"meta":20,"style":20},[98,110583,110584,110592],{"__ignoreMap":20},[101,110585,110586,110588,110590],{"class":103,"line":104},[101,110587,31936],{"class":107},[101,110589,109974],{"class":1950},[101,110591,109977],{"class":111},[101,110593,110594,110596],{"class":103,"line":21},[101,110595,4077],{"class":107},[101,110597,109984],{"class":111},[10,110599,110600,110601,110604,110605,110608,110609,110612],{},"这段定义了一个函数，用来获取当前观测。",[98,110602,110603],{},"data.qpos.copy()"," 是位置数组副本，",[98,110606,110607],{},"data.qvel.copy()"," 是速度数组副本。",[98,110610,110611],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[10,110614,110615],{},"在本章模型里：",[92,110617,110620],{"className":110618,"code":110619,"language":5175,"meta":20},[5173],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[98,110621,110619],{"__ignoreMap":20},[10,110623,110624],{},"所以返回的 obs 是：",[92,110626,110629],{"className":110627,"code":110628,"language":5175,"meta":20},[5173],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[98,110630,110628],{"__ignoreMap":20},[92,110632,110634],{"className":30367,"code":110633,"language":30369,"meta":20,"style":20},"def compute_reward(obs: np.ndarray) -> float:\n",[98,110635,110636],{"__ignoreMap":20},[101,110637,110638,110640,110642,110644,110646],{"class":103,"line":104},[101,110639,31936],{"class":107},[101,110641,109999],{"class":1950},[101,110643,110002],{"class":111},[101,110645,151],{"class":160},[101,110647,3726],{"class":111},[10,110649,110650,110651,110654],{},"这行定义奖励函数。输入是观测 ",[98,110652,110653],{},"obs","，输出是一个浮点数奖励。",[92,110656,110658],{"className":30367,"code":110657,"language":30369,"meta":20,"style":20},"cart_x = obs[0]\npole_angle = obs[1]\n",[98,110659,110660,110673],{"__ignoreMap":20},[101,110661,110662,110665,110667,110669,110671],{"class":103,"line":104},[101,110663,110664],{"class":111},"cart_x ",[101,110666,157],{"class":107},[101,110668,110016],{"class":111},[101,110670,303],{"class":160},[101,110672,33235],{"class":111},[101,110674,110675,110678,110680,110682,110684],{"class":103,"line":21},[101,110676,110677],{"class":111},"pole_angle ",[101,110679,157],{"class":107},[101,110681,110016],{"class":111},[101,110683,329],{"class":160},[101,110685,33235],{"class":111},[10,110687,110688,110689,110692,110693,110696],{},"数组索引从 0 开始。",[98,110690,110691],{},"obs[0]"," 是第一个元素，也就是小车位置。",[98,110694,110695],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[92,110698,110699],{"className":30367,"code":109768,"language":30369,"meta":20,"style":20},[98,110700,110701],{"__ignoreMap":20},[101,110702,110703,110705,110707,110709,110711,110713,110715,110717,110719,110721,110723,110725,110727,110729],{"class":103,"line":104},[101,110704,17034],{"class":107},[101,110706,109777],{"class":160},[101,110708,112],{"class":111},[101,110710,102383],{"class":160},[101,110712,52260],{"class":107},[101,110714,109786],{"class":160},[101,110716,6506],{"class":107},[101,110718,109791],{"class":111},[101,110720,566],{"class":107},[101,110722,109791],{"class":111},[101,110724,643],{"class":107},[101,110726,109800],{"class":111},[101,110728,566],{"class":107},[101,110730,109805],{"class":111},[10,110732,110733,110734,110737,110738,110741],{},"这行计算奖励。",[98,110735,110736],{},"cart_x * cart_x"," 是小车位置的平方，",[98,110739,110740],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[92,110743,110745],{"className":30367,"code":110744,"language":30369,"meta":20,"style":20},"data.qpos[1] = 0.1\n",[98,110746,110747],{"__ignoreMap":20},[101,110748,110749,110751,110753,110755,110757],{"class":103,"line":104},[101,110750,104679],{"class":111},[101,110752,329],{"class":160},[101,110754,4430],{"class":111},[101,110756,157],{"class":107},[101,110758,110120],{"class":160},[10,110760,110761,110762,110764,110765,110767],{},"手动设置杆子的初始角度。因为 ",[98,110763,105436],{}," 是小车位置，",[98,110766,105439],{}," 是杆子角度，所以这里改的是杆子。",[92,110769,110770],{"className":30367,"code":104523,"language":30369,"meta":20,"style":20},[98,110771,110772],{"__ignoreMap":20},[101,110773,110774],{"class":103,"line":104},[101,110775,104523],{"class":111},[10,110777,105482,110778,110780],{},[98,110779,104010],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[92,110782,110784],{"className":30367,"code":110783,"language":30369,"meta":20,"style":20},"total_reward = 0.0\n",[98,110785,110786],{"__ignoreMap":20},[101,110787,110788,110791,110793],{"class":103,"line":104},[101,110789,110790],{"class":111},"total_reward ",[101,110792,157],{"class":107},[101,110794,104741],{"class":160},[10,110796,110797],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[92,110799,110801],{"className":30367,"code":110800,"language":30369,"meta":20,"style":20},"for step in range(1000):\n",[98,110802,110803],{"__ignoreMap":20},[101,110804,110805,110807,110809,110811,110813,110815,110817],{"class":103,"line":104},[101,110806,3012],{"class":107},[101,110808,31605],{"class":111},[101,110810,26032],{"class":107},[101,110812,32432],{"class":160},[101,110814,112],{"class":111},[101,110816,6398],{"class":160},[101,110818,30775],{"class":111},[10,110820,110821,110822,110824],{},"循环 1000 步。",[98,110823,107114],{}," 是当前步数，从 0 到 999。",[92,110826,110828],{"className":30367,"code":110827,"language":30369,"meta":20,"style":20},"obs = get_observation(data)\n",[98,110829,110830],{"__ignoreMap":20},[101,110831,110832,110835,110837],{"class":103,"line":104},[101,110833,110834],{"class":111},"obs ",[101,110836,157],{"class":107},[101,110838,110167],{"class":111},[10,110840,110841,110842,28374],{},"读取当前状态，保存到 ",[98,110843,110653],{},[92,110845,110847],{"className":30367,"code":110846,"language":30369,"meta":20,"style":20},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[98,110848,110849,110861],{"__ignoreMap":20},[101,110850,110851,110853,110855,110857,110859],{"class":103,"line":104},[101,110852,110677],{"class":111},[101,110854,157],{"class":107},[101,110856,110016],{"class":111},[101,110858,329],{"class":160},[101,110860,33235],{"class":111},[101,110862,110863,110866,110868,110870,110872],{"class":103,"line":21},[101,110864,110865],{"class":111},"pole_angular_velocity ",[101,110867,157],{"class":107},[101,110869,110016],{"class":111},[101,110871,183],{"class":160},[101,110873,33235],{"class":111},[10,110875,110876,110877,110880,110881,28374],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[98,110878,110879],{},"obs[3]","？因为 obs 的顺序是 ",[98,110882,110883],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[92,110885,110887],{"className":30367,"code":110886,"language":30369,"meta":20,"style":20},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[98,110888,110889],{"__ignoreMap":20},[101,110890,110891,110893,110895,110897,110899,110901,110903,110905,110907],{"class":103,"line":104},[101,110892,107422],{"class":111},[101,110894,157],{"class":107},[101,110896,110207],{"class":160},[101,110898,6506],{"class":107},[101,110900,109800],{"class":111},[101,110902,592],{"class":107},[101,110904,61856],{"class":160},[101,110906,6506],{"class":107},[101,110908,110220],{"class":111},[10,110910,110911,110912,100998,110914,110916],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[98,110913,105240],{},[98,110915,35318],{}," 是人为设置的系数，不是固定公式。",[92,110918,110920],{"className":30367,"code":110919,"language":30369,"meta":20,"style":20},"action = np.clip(action, -1.0, 1.0)\n",[98,110921,110922],{"__ignoreMap":20},[101,110923,110924,110926,110928,110930,110932,110934,110936,110938],{"class":103,"line":104},[101,110925,107422],{"class":111},[101,110927,157],{"class":107},[101,110929,107427],{"class":111},[101,110931,643],{"class":107},[101,110933,102383],{"class":160},[101,110935,12423],{"class":111},[101,110937,102383],{"class":160},[101,110939,118],{"class":111},[10,110941,110942],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[92,110944,110945],{"className":30367,"code":109753,"language":30369,"meta":20,"style":20},[98,110946,110947],{"__ignoreMap":20},[101,110948,110949,110951,110953,110955,110957],{"class":103,"line":104},[101,110950,105851],{"class":111},[101,110952,303],{"class":160},[101,110954,4430],{"class":111},[101,110956,157],{"class":107},[101,110958,107450],{"class":111},[10,110960,110961],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[92,110963,110964],{"className":30367,"code":104485,"language":30369,"meta":20,"style":20},[98,110965,110966],{"__ignoreMap":20},[101,110967,110968],{"class":103,"line":104},[101,110969,104485],{"class":111},[10,110971,110972,110973,110975],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[98,110974,106106],{}," 计算小车和杆子的下一刻状态。",[92,110977,110979],{"className":30367,"code":110978,"language":30369,"meta":20,"style":20},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[98,110980,110981,110990],{"__ignoreMap":20},[101,110982,110983,110986,110988],{"class":103,"line":104},[101,110984,110985],{"class":111},"reward ",[101,110987,157],{"class":107},[101,110989,110272],{"class":111},[101,110991,110992,110994,110996],{"class":103,"line":21},[101,110993,110790],{"class":111},[101,110995,9465],{"class":107},[101,110997,110282],{"class":111},[10,110999,111000,111001,111003,111004,111007,111008,28374],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[98,111002,9465],{}," 是简写，",[98,111005,111006],{},"total_reward += reward"," 等价于 ",[98,111009,111010],{},"total_reward = total_reward + reward",[92,111012,111014],{"className":30367,"code":111013,"language":30369,"meta":20,"style":20},"if step % 100 == 0:\n",[98,111015,111016],{"__ignoreMap":20},[101,111017,111018,111020,111022,111024,111026,111028,111030],{"class":103,"line":104},[101,111019,1518],{"class":107},[101,111021,31605],{"class":111},[101,111023,439],{"class":107},[101,111025,5742],{"class":160},[101,111027,101539],{"class":107},[101,111029,4080],{"class":160},[101,111031,3726],{"class":111},[10,111033,111034,111036,111037,111040],{},[98,111035,439],{}," 是取余数。",[98,111038,111039],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[92,111042,111044],{"className":30367,"code":111043,"language":30369,"meta":20,"style":20},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[98,111045,111046],{"__ignoreMap":20},[101,111047,111048,111050,111052,111054,111056,111058,111060,111062,111064,111066,111068,111070,111072,111074,111076,111078],{"class":103,"line":104},[101,111049,30404],{"class":160},[101,111051,112],{"class":111},[101,111053,110311],{"class":216},[101,111055,110314],{"class":111},[101,111057,110317],{"class":216},[101,111059,110320],{"class":111},[101,111061,183],{"class":160},[101,111063,110325],{"class":111},[101,111065,110328],{"class":216},[101,111067,12423],{"class":111},[101,111069,32007],{"class":160},[101,111071,112],{"class":111},[101,111073,151],{"class":160},[101,111075,110339],{"class":111},[101,111077,183],{"class":160},[101,111079,30486],{"class":111},[10,111081,111082,111083,111086,111087,111090],{},"打印当前步数、观测和动作。",[98,111084,111085],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[98,111088,111089],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[43,111092,102296],{"id":102295},[10,111094,111095],{},"观测向量:",[92,111097,111100],{"className":111098,"code":111099,"language":5175,"meta":20},[5173],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[98,111101,111099],{"__ignoreMap":20},[10,111103,111104],{},"控制器是教学用的简单线性反馈，不保证最优。",[10,111106,111107],{},"每隔 100 步会打印一次：",[92,111109,111112],{"className":111110,"code":111111,"language":5175,"meta":20},[5173],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[98,111113,111111],{"__ignoreMap":20},[10,111115,111116],{},"重点观察：",[55,111118,111119,111125,111130],{},[58,111120,111121,111124],{},[98,111122,111123],{},"pole_angle"," 是否越来越大。",[58,111126,111127,111129],{},[98,111128,109706],{}," 是否跑得太远。",[58,111131,111132,111133,82528,111135,28374],{},"action 是否经常被 clip 到 ",[98,111134,103895],{},[98,111136,329],{},[10,111138,111139],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[43,111141,102328],{"id":102327},[55,111143,111144,111150,111153,111159,111169,111175,111178],{},[58,111145,111146,111147,28374],{},"把初始角度改为 ",[98,111148,111149],{},"data.qpos[1] = 0.3",[58,111151,111152],{},"重新运行，观察控制是否变差。",[58,111154,111155,111156,111158],{},"把 actuator ",[98,111157,107047],{}," 改小。",[58,111160,111161,111162,111165,111166,28374],{},"打印 ",[98,111163,111164],{},"model.nq, model.nv, model.nu","，应为 ",[98,111167,111168],{},"2 2 1",[58,111170,111171,111172,111174],{},"把 reward 里的 ",[98,111173,110740],{}," 系数改大，观察总奖励变化。",[58,111176,111177],{},"把控制器改成反号，观察杆子是否更容易倒。",[58,111179,111180],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[43,111182,102433],{"id":102432},[72,111184,111185],{"id":111185},"杆子方向和预期不一致",[10,111187,102376,111188,111190,111191,111193],{},[98,111189,106219],{}," 和 capsule 的 ",[98,111192,103156],{},"，必要时用 viewer 可视化确认。",[72,111195,111196],{"id":111196},"控制器越控越倒",[10,111198,111199],{},"说明反馈符号可能反了，尝试:",[92,111201,111203],{"className":30367,"code":111202,"language":30369,"meta":20,"style":20},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[98,111204,111205],{"__ignoreMap":20},[101,111206,111207,111209,111211,111213,111215,111217,111219,111221,111223,111225],{"class":103,"line":104},[101,111208,107422],{"class":111},[101,111210,157],{"class":107},[101,111212,52260],{"class":107},[101,111214,105240],{"class":160},[101,111216,6506],{"class":107},[101,111218,109800],{"class":111},[101,111220,643],{"class":107},[101,111222,61856],{"class":160},[101,111224,6506],{"class":107},[101,111226,110220],{"class":111},[72,111228,111229],{"id":111229},"小车飞走",[10,111231,111232,111233,111235,111236,111239],{},"降低 ",[98,111234,107047],{}," 或缩小 ",[98,111237,111238],{},"action"," 的 clip 范围。",[72,111241,111243,111245],{"id":111242},"obs3-为什么是杆子角速度",[98,111244,110879],{}," 为什么是杆子角速度",[10,111247,111248],{},"因为这个模型里：",[92,111250,111253],{"className":111251,"code":111252,"language":5175,"meta":20},[5173],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[98,111254,111252],{"__ignoreMap":20},[10,111256,109727],{},[92,111258,111261],{"className":111259,"code":111260,"language":5175,"meta":20},[5173],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[98,111262,111260],{"__ignoreMap":20},[72,111264,111266],{"id":111265},"reward-变成负数是否错误","reward 变成负数是否错误",[10,111268,111269],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[43,111271,102587],{"id":102586},[10,111273,111274],{},"一个控制任务通常包含：",[55,111276,111277,111280,111288,111293,111296],{},[58,111278,111279],{},"模型：Cartpole 的 body、joint、actuator。",[58,111281,111282,111283,324,111285,111287],{},"观测：从 ",[98,111284,104010],{},[98,111286,104340],{}," 里取状态。",[58,111289,111290,111291,28374],{},"动作：写入 ",[98,111292,101056],{},[58,111294,111295],{},"奖励：根据任务目标打分。",[58,111297,111298],{},"循环：obs -> action -> step -> reward。",[10,111300,111301],{},"这就是后面 Gymnasium 环境的基本骨架。",[5114,111303,104266],{},{"title":20,"searchDepth":21,"depth":21,"links":111305},[111306,111307,111308,111313,111317,111318,111319,111327],{"id":100626,"depth":21,"text":100627},{"id":100749,"depth":21,"text":100750},{"id":101024,"depth":21,"text":101025,"children":111309},[111310,111311,111312],{"id":109680,"depth":1166,"text":109681},{"id":109745,"depth":1166,"text":109746},{"id":109761,"depth":1166,"text":109762},{"id":101232,"depth":21,"text":101233,"children":111314},[111315,111316],{"id":101552,"depth":1166,"text":101552},{"id":101688,"depth":1166,"text":101688},{"id":102295,"depth":21,"text":102296},{"id":102327,"depth":21,"text":102328},{"id":102432,"depth":21,"text":102433,"children":111320},[111321,111322,111323,111324,111326],{"id":111185,"depth":1166,"text":111185},{"id":111196,"depth":1166,"text":111196},{"id":111229,"depth":1166,"text":111229},{"id":111242,"depth":1166,"text":111325},"obs[3] 为什么是杆子角速度",{"id":111265,"depth":1166,"text":111266},{"id":102586,"depth":21,"text":102587},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109416,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111334,"title":111335,"body":111336,"description":20,"extension":24,"meta":113350,"navigation":27,"path":113351,"seo":113352,"stem":113353,"__hash__":113354},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111337,"toc":113326},[111338,111341,111343,111346,111348,111365,111368,111371,111377,111380,111382,111384,111408,111410,111424,111426,111467,111469,111487,111489,111492,111498,111501,111529,111533,111539,111564,111567,111598,111605,111608,111611,111617,111620,111626,111629,111635,111639,111642,111667,111670,111672,112432,112434,112446,112448,112459,112461,112464,112481,112484,112486,112497,112500,112502,112548,112551,112564,112567,112649,112652,112654,112670,112680,112693,112696,112735,112745,112756,112766,112779,112782,112811,112814,112824,112827,112833,112850,112861,112863,112869,112886,112897,112918,112921,112933,112936,112957,112960,112968,112976,112993,112996,113065,113072,113080,113083,113096,113103,113105,113108,113114,113117,113120,113126,113132,113134,113174,113176,113182,113191,113194,113196,113216,113219,113222,113228,113232,113234,113261,113264,113267,113294,113300,113303,113306,113308,113311,113314,113320,113323],[39,111339,111335],{"id":111340},"_7控制任务reacher-机械臂到达目标",[43,111342,100627],{"id":100626},[10,111344,111345],{},"本章搭建一个二维两关节 reacher 任务。",[10,111347,104311],{},[55,111349,111350,111353,111356,111359,111362],{},[58,111351,111352],{},"两个 hinge joint",[58,111354,111355],{},"两个 motor actuator",[58,111357,111358],{},"site 作为末端点和目标点",[58,111360,111361],{},"根据末端和目标距离设计 reward",[58,111363,111364],{},"构造机械臂任务的基本形式",[10,111366,111367],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[10,111369,111370],{},"Reacher 任务可以理解为：",[92,111372,111375],{"className":111373,"code":111374,"language":5175,"meta":20},[5173],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[98,111376,111374],{"__ignoreMap":20},[10,111378,111379],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[43,111381,100750],{"id":100749},[10,111383,100753],{},[92,111385,111386],{"className":23811,"code":104368,"language":23813,"meta":20,"style":20},[98,111387,111388],{"__ignoreMap":20},[101,111389,111390,111392,111394,111396,111398,111400,111402,111404,111406],{"class":103,"line":104},[101,111391,24565],{"class":1950},[101,111393,26304],{"class":216},[101,111395,23823],{"class":216},[101,111397,26389],{"class":160},[101,111399,104383],{"class":216},[101,111401,100778],{"class":216},[101,111403,102481],{"class":216},[101,111405,100794],{"class":216},[101,111407,104392],{"class":216},[10,111409,102799],{},[92,111411,111412],{"className":23811,"code":100899,"language":23813,"meta":20,"style":20},[98,111413,111414],{"__ignoreMap":20},[101,111415,111416,111418,111420,111422],{"class":103,"line":104},[101,111417,23820],{"class":1950},[101,111419,23823],{"class":216},[101,111421,100910],{"class":216},[101,111423,100913],{"class":216},[10,111425,102816],{},[92,111427,111429],{"className":23811,"code":111428,"language":23813,"meta":20,"style":20},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[98,111430,111431,111448,111457],{"__ignoreMap":20},[101,111432,111433,111435,111437,111439,111442,111444,111446],{"class":103,"line":104},[101,111434,30319],{"class":1950},[101,111436,29165],{"class":216},[101,111438,25104],{"class":160},[101,111440,111441],{"class":216}," mujoco-reacher",[101,111443,100955],{"class":216},[101,111445,100958],{"class":160},[101,111447,100961],{"class":160},[101,111449,111450,111452,111454],{"class":103,"line":21},[101,111451,30319],{"class":1950},[101,111453,100968],{"class":216},[101,111455,111456],{"class":216}," mujoco-reacher\n",[101,111458,111459,111461,111463,111465],{"class":103,"line":1166},[101,111460,23820],{"class":1950},[101,111462,23823],{"class":216},[101,111464,100910],{"class":216},[101,111466,100913],{"class":216},[10,111468,100984],{},[55,111470,111471,111474,111477],{},[58,111472,111473],{},"本章使用低维状态，不使用图像输入。",[58,111475,111476],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[58,111478,111479,111480,324,111482,324,111484,111486],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[98,111481,104010],{},[98,111483,104340],{},[98,111485,103660],{}," 的方法一致。",[43,111488,101025],{"id":101024},[10,111490,111491],{},"Reacher 任务核心:",[92,111493,111496],{"className":111494,"code":111495,"language":5175,"meta":20},[5173],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[98,111497,111495],{"__ignoreMap":20},[10,111499,111500],{},"读取 site 世界坐标:",[92,111502,111504],{"className":30367,"code":111503,"language":30369,"meta":20,"style":20},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[98,111505,111506,111519],{"__ignoreMap":20},[101,111507,111508,111510,111512,111514,111517],{"class":103,"line":104},[101,111509,103614],{"class":111},[101,111511,157],{"class":107},[101,111513,103385],{"class":111},[101,111515,111516],{"class":216},"\"tip\"",[101,111518,118],{"class":111},[101,111520,111521,111524,111526],{"class":103,"line":21},[101,111522,111523],{"class":111},"tip_pos ",[101,111525,157],{"class":107},[101,111527,111528],{"class":111}," data.site_xpos[site_id]\n",[72,111530,111532],{"id":111531},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[10,111534,111535,111536,111538],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[98,111537,104010],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[92,111540,111542],{"className":30367,"code":111541,"language":30369,"meta":20,"style":20},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[98,111543,111544,111554],{"__ignoreMap":20},[101,111545,111546,111549,111551],{"class":103,"line":104},[101,111547,111548],{"class":111},"tip ",[101,111550,157],{"class":107},[101,111552,111553],{"class":111}," data.site_xpos[tip_site_id]\n",[101,111555,111556,111559,111561],{"class":103,"line":21},[101,111557,111558],{"class":111},"target ",[101,111560,157],{"class":107},[101,111562,111563],{"class":111}," data.site_xpos[target_site_id]\n",[10,111565,111566],{},"这样 reward 就很容易写：",[92,111568,111570],{"className":30367,"code":111569,"language":30369,"meta":20,"style":20},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[98,111571,111572,111587],{"__ignoreMap":20},[101,111573,111574,111577,111579,111582,111584],{"class":103,"line":104},[101,111575,111576],{"class":111},"dist ",[101,111578,157],{"class":107},[101,111580,111581],{"class":111}," np.linalg.norm(tip ",[101,111583,643],{"class":107},[101,111585,111586],{"class":111}," target)\n",[101,111588,111589,111591,111593,111595],{"class":103,"line":21},[101,111590,110985],{"class":111},[101,111592,157],{"class":107},[101,111594,52260],{"class":107},[101,111596,111597],{"class":111},"dist\n",[10,111599,111600,111601,111604],{},"距离越小，",[98,111602,111603],{},"-dist"," 越接近 0，奖励越高。",[72,111606,111607],{"id":111607},"两关节机械臂的状态",[10,111609,111610],{},"这个模型有两个 hinge joint：",[92,111612,111615],{"className":111613,"code":111614,"language":5175,"meta":20},[5173],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[98,111616,111614],{"__ignoreMap":20},[10,111618,111619],{},"再加上末端和目标位置：",[92,111621,111624],{"className":111622,"code":111623,"language":5175,"meta":20},[5173],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[98,111625,111623],{"__ignoreMap":20},[10,111627,111628],{},"总维度：",[92,111630,111633],{"className":111631,"code":111632,"language":5175,"meta":20},[5173],"2 + 2 + 3 + 3 = 10\n",[98,111634,111632],{"__ignoreMap":20},[72,111636,111638],{"id":111637},"为什么-gravity-是-0","为什么 gravity 是 0",[10,111640,111641],{},"本章把重力设为：",[92,111643,111645],{"className":53056,"code":111644,"language":53058,"meta":20,"style":20},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[98,111646,111647],{"__ignoreMap":20},[101,111648,111649,111651,111653,111655,111657,111659,111661,111663,111665],{"class":103,"line":104},[101,111650,1021],{"class":111},[101,111652,69155],{"class":51289},[101,111654,101174],{"class":1950},[101,111656,157],{"class":111},[101,111658,101179],{"class":216},[101,111660,101182],{"class":1950},[101,111662,157],{"class":111},[101,111664,103751],{"class":216},[101,111666,101124],{"class":111},[10,111668,111669],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[43,111671,101233],{"id":101232},[92,111673,111675],{"className":30367,"code":111674,"language":30369,"meta":20,"style":20},"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",[98,111676,111677,111683,111693,111697,111701,111709,111714,111719,111723,111727,111732,111737,111741,111746,111751,111756,111760,111765,111770,111775,111780,111784,111788,111792,111796,111800,111805,111810,111814,111818,111822,111826,111830,111845,111854,111866,111889,111896,111900,111904,111914,111928,111942,111949,111953,111957,111971,111983,111995,112008,112023,112040,112044,112048,112060,112072,112080,112088,112092,112108,112113,112126,112139,112154,112158,112193,112225,112229,112233,112242,112246,112262,112272,112283,112299,112315,112331,112347,112351,112369,112389,112408,112412,112416,112428],{"__ignoreMap":20},[101,111678,111679,111681],{"class":103,"line":104},[101,111680,30381],{"class":107},[101,111682,101281],{"class":111},[101,111684,111685,111687,111689,111691],{"class":103,"line":21},[101,111686,30381],{"class":107},[101,111688,31369],{"class":111},[101,111690,31372],{"class":107},[101,111692,31375],{"class":111},[101,111694,111695],{"class":103,"line":1166},[101,111696,2387],{"emptyLinePlaceholder":27},[101,111698,111699],{"class":103,"line":1181},[101,111700,2387],{"emptyLinePlaceholder":27},[101,111702,111703,111705,111707],{"class":103,"line":1187},[101,111704,101294],{"class":160},[101,111706,13552],{"class":107},[101,111708,101299],{"class":216},[101,111710,111711],{"class":103,"line":1201},[101,111712,111713],{"class":216},"\u003Cmujoco model=\"two_link_reacher\">\n",[101,111715,111716],{"class":103,"line":1207},[101,111717,111718],{"class":216},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[101,111720,111721],{"class":103,"line":1298},[101,111722,2387],{"emptyLinePlaceholder":27},[101,111724,111725],{"class":103,"line":1304},[101,111726,101318],{"class":216},[101,111728,111729],{"class":103,"line":1316},[101,111730,111731],{"class":216},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[101,111733,111734],{"class":103,"line":1599},[101,111735,111736],{"class":216},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[101,111738,111739],{"class":103,"line":1604},[101,111740,2387],{"emptyLinePlaceholder":27},[101,111742,111743],{"class":103,"line":1610},[101,111744,111745],{"class":216},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[101,111747,111748],{"class":103,"line":1615},[101,111749,111750],{"class":216},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[101,111752,111753],{"class":103,"line":1629},[101,111754,111755],{"class":216},"      \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",[101,111757,111758],{"class":103,"line":1634},[101,111759,2387],{"emptyLinePlaceholder":27},[101,111761,111762],{"class":103,"line":1640},[101,111763,111764],{"class":216},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[101,111766,111767],{"class":103,"line":1661},[101,111768,111769],{"class":216},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[101,111771,111772],{"class":103,"line":1666},[101,111773,111774],{"class":216},"        \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",[101,111776,111777],{"class":103,"line":1680},[101,111778,111779],{"class":216},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[101,111781,111782],{"class":103,"line":1685},[101,111783,106418],{"class":216},[101,111785,111786],{"class":103,"line":1714},[101,111787,101347],{"class":216},[101,111789,111790],{"class":103,"line":1719},[101,111791,101352],{"class":216},[101,111793,111794],{"class":103,"line":1736},[101,111795,2387],{"emptyLinePlaceholder":27},[101,111797,111798],{"class":103,"line":1741},[101,111799,106435],{"class":216},[101,111801,111802],{"class":103,"line":1746},[101,111803,111804],{"class":216},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[101,111806,111807],{"class":103,"line":1751},[101,111808,111809],{"class":216},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[101,111811,111812],{"class":103,"line":1765},[101,111813,106445],{"class":216},[101,111815,111816],{"class":103,"line":1770},[101,111817,101357],{"class":216},[101,111819,111820],{"class":103,"line":2564},[101,111821,95678],{"class":216},[101,111823,111824],{"class":103,"line":2578},[101,111825,2387],{"emptyLinePlaceholder":27},[101,111827,111828],{"class":103,"line":2586},[101,111829,2387],{"emptyLinePlaceholder":27},[101,111831,111832,111834,111837,111840,111842],{"class":103,"line":2591},[101,111833,31936],{"class":107},[101,111835,111836],{"class":1950}," site_position",[101,111838,111839],{"class":111},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[101,111841,1286],{"class":160},[101,111843,111844],{"class":111},") -> np.ndarray:\n",[101,111846,111847,111849,111851],{"class":103,"line":2597},[101,111848,103380],{"class":111},[101,111850,157],{"class":107},[101,111852,111853],{"class":111}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[101,111855,111856,111858,111860,111862,111864],{"class":103,"line":2603},[101,111857,3088],{"class":107},[101,111859,103429],{"class":111},[101,111861,1021],{"class":107},[101,111863,4080],{"class":160},[101,111865,3726],{"class":111},[101,111867,111868,111870,111872,111874,111876,111879,111881,111883,111885,111887],{"class":103,"line":2608},[101,111869,103412],{"class":107},[101,111871,103415],{"class":160},[101,111873,112],{"class":111},[101,111875,164],{"class":107},[101,111877,111878],{"class":216},"\"site not found: ",[101,111880,1007],{"class":160},[101,111882,79799],{"class":111},[101,111884,1057],{"class":160},[101,111886,362],{"class":216},[101,111888,118],{"class":111},[101,111890,111891,111893],{"class":103,"line":7936},[101,111892,4077],{"class":107},[101,111894,111895],{"class":111}," data.site_xpos[site_id].copy()\n",[101,111897,111898],{"class":103,"line":7960},[101,111899,2387],{"emptyLinePlaceholder":27},[101,111901,111902],{"class":103,"line":7965},[101,111903,2387],{"emptyLinePlaceholder":27},[101,111905,111906,111908,111911],{"class":103,"line":7971},[101,111907,31936],{"class":107},[101,111909,111910],{"class":1950}," get_obs",[101,111912,111913],{"class":111},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[101,111915,111916,111919,111921,111924,111926],{"class":103,"line":7998},[101,111917,111918],{"class":111},"    tip ",[101,111920,157],{"class":107},[101,111922,111923],{"class":111}," site_position(model, data, ",[101,111925,111516],{"class":216},[101,111927,118],{"class":111},[101,111929,111930,111933,111935,111937,111940],{"class":103,"line":8003},[101,111931,111932],{"class":111},"    target ",[101,111934,157],{"class":107},[101,111936,111923],{"class":111},[101,111938,111939],{"class":216},"\"target\"",[101,111941,118],{"class":111},[101,111943,111944,111946],{"class":103,"line":8009},[101,111945,4077],{"class":107},[101,111947,111948],{"class":111}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[101,111950,111951],{"class":103,"line":8021},[101,111952,2387],{"emptyLinePlaceholder":27},[101,111954,111955],{"class":103,"line":8033},[101,111956,2387],{"emptyLinePlaceholder":27},[101,111958,111959,111961,111964,111967,111969],{"class":103,"line":8045},[101,111960,31936],{"class":107},[101,111962,111963],{"class":1950}," reward",[101,111965,111966],{"class":111},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[101,111968,151],{"class":160},[101,111970,3726],{"class":111},[101,111972,111973,111975,111977,111979,111981],{"class":103,"line":9704},[101,111974,111918],{"class":111},[101,111976,157],{"class":107},[101,111978,111923],{"class":111},[101,111980,111516],{"class":216},[101,111982,118],{"class":111},[101,111984,111985,111987,111989,111991,111993],{"class":103,"line":9729},[101,111986,111932],{"class":111},[101,111988,157],{"class":107},[101,111990,111923],{"class":111},[101,111992,111939],{"class":216},[101,111994,118],{"class":111},[101,111996,111997,112000,112002,112004,112006],{"class":103,"line":9752},[101,111998,111999],{"class":111},"    dist ",[101,112001,157],{"class":107},[101,112003,111581],{"class":111},[101,112005,643],{"class":107},[101,112007,111586],{"class":111},[101,112009,112010,112013,112015,112018,112020],{"class":103,"line":9776},[101,112011,112012],{"class":111},"    control_cost ",[101,112014,157],{"class":107},[101,112016,112017],{"class":160}," 0.01",[101,112019,6506],{"class":107},[101,112021,112022],{"class":111}," np.sum(np.square(data.ctrl))\n",[101,112024,112025,112027,112029,112031,112033,112035,112037],{"class":103,"line":9781},[101,112026,4077],{"class":107},[101,112028,109777],{"class":160},[101,112030,112],{"class":111},[101,112032,643],{"class":107},[101,112034,111576],{"class":111},[101,112036,643],{"class":107},[101,112038,112039],{"class":111}," control_cost)\n",[101,112041,112042],{"class":103,"line":9786},[101,112043,2387],{"emptyLinePlaceholder":27},[101,112045,112046],{"class":103,"line":9791},[101,112047,2387],{"emptyLinePlaceholder":27},[101,112049,112050,112052,112054,112056,112058],{"class":103,"line":9800},[101,112051,31936],{"class":107},[101,112053,1960],{"class":1950},[101,112055,101378],{"class":111},[101,112057,95666],{"class":160},[101,112059,3726],{"class":111},[101,112061,112062,112064,112066,112068,112070],{"class":103,"line":9805},[101,112063,101387],{"class":111},[101,112065,157],{"class":107},[101,112067,101392],{"class":111},[101,112069,101294],{"class":160},[101,112071,118],{"class":111},[101,112073,112074,112076,112078],{"class":103,"line":9811},[101,112075,101401],{"class":111},[101,112077,157],{"class":107},[101,112079,101406],{"class":111},[101,112081,112082,112084,112086],{"class":103,"line":9832},[101,112083,110133],{"class":111},[101,112085,157],{"class":107},[101,112087,104741],{"class":160},[101,112089,112090],{"class":103,"line":9838},[101,112091,2387],{"emptyLinePlaceholder":27},[101,112093,112094,112096,112098,112100,112102,112104,112106],{"class":103,"line":9852},[101,112095,3188],{"class":107},[101,112097,31605],{"class":111},[101,112099,26032],{"class":107},[101,112101,32432],{"class":160},[101,112103,112],{"class":111},[101,112105,65063],{"class":160},[101,112107,30775],{"class":111},[101,112109,112110],{"class":103,"line":9858},[101,112111,112112],{"class":111},"        mujoco.mj_forward(model, data)\n",[101,112114,112115,112118,112120,112122,112124],{"class":103,"line":9885},[101,112116,112117],{"class":111},"        tip ",[101,112119,157],{"class":107},[101,112121,111923],{"class":111},[101,112123,111516],{"class":216},[101,112125,118],{"class":111},[101,112127,112128,112131,112133,112135,112137],{"class":103,"line":9894},[101,112129,112130],{"class":111},"        target ",[101,112132,157],{"class":107},[101,112134,111923],{"class":111},[101,112136,111939],{"class":216},[101,112138,118],{"class":111},[101,112140,112141,112144,112146,112149,112151],{"class":103,"line":9900},[101,112142,112143],{"class":111},"        error ",[101,112145,157],{"class":107},[101,112147,112148],{"class":111}," target ",[101,112150,643],{"class":107},[101,112152,112153],{"class":111}," tip\n",[101,112155,112156],{"class":103,"line":9908},[101,112157,2387],{"emptyLinePlaceholder":27},[101,112159,112160,112162,112164,112166,112168,112171,112173,112175,112178,112180,112183,112185,112187,112189,112191],{"class":103,"line":9913},[101,112161,106597],{"class":111},[101,112163,303],{"class":160},[101,112165,4430],{"class":111},[101,112167,157],{"class":107},[101,112169,112170],{"class":111}," np.clip(",[101,112172,105240],{"class":160},[101,112174,6506],{"class":107},[101,112176,112177],{"class":111}," error[",[101,112179,189],{"class":160},[101,112181,112182],{"class":111},"], ",[101,112184,643],{"class":107},[101,112186,102383],{"class":160},[101,112188,12423],{"class":111},[101,112190,102383],{"class":160},[101,112192,118],{"class":111},[101,112194,112195,112197,112199,112201,112203,112205,112207,112209,112211,112213,112215,112217,112219,112221,112223],{"class":103,"line":16592},[101,112196,106597],{"class":111},[101,112198,329],{"class":160},[101,112200,4430],{"class":111},[101,112202,157],{"class":107},[101,112204,112170],{"class":111},[101,112206,105240],{"class":160},[101,112208,6506],{"class":107},[101,112210,112177],{"class":111},[101,112212,303],{"class":160},[101,112214,112182],{"class":111},[101,112216,643],{"class":107},[101,112218,102383],{"class":160},[101,112220,12423],{"class":111},[101,112222,102383],{"class":160},[101,112224,118],{"class":111},[101,112226,112227],{"class":103,"line":16598},[101,112228,2387],{"emptyLinePlaceholder":27},[101,112230,112231],{"class":103,"line":16621},[101,112232,101496],{"class":111},[101,112234,112235,112237,112239],{"class":103,"line":16627},[101,112236,110277],{"class":111},[101,112238,9465],{"class":107},[101,112240,112241],{"class":111}," reward(model, data)\n",[101,112243,112244],{"class":103,"line":16650},[101,112245,2387],{"emptyLinePlaceholder":27},[101,112247,112248,112250,112252,112254,112256,112258,112260],{"class":103,"line":16664},[101,112249,2484],{"class":107},[101,112251,31605],{"class":111},[101,112253,439],{"class":107},[101,112255,5742],{"class":160},[101,112257,101539],{"class":107},[101,112259,4080],{"class":160},[101,112261,3726],{"class":111},[101,112263,112264,112267,112269],{"class":103,"line":16684},[101,112265,112266],{"class":111},"            obs ",[101,112268,157],{"class":107},[101,112270,112271],{"class":111}," get_obs(model, data)\n",[101,112273,112274,112276,112278,112280],{"class":103,"line":16690},[101,112275,34639],{"class":160},[101,112277,112],{"class":111},[101,112279,110311],{"class":216},[101,112281,112282],{"class":111},", step)\n",[101,112284,112285,112287,112289,112292,112295,112297],{"class":103,"line":16701},[101,112286,34639],{"class":160},[101,112288,112],{"class":111},[101,112290,112291],{"class":216},"\"  tip:\"",[101,112293,112294],{"class":111},", np.round(tip, ",[101,112296,183],{"class":160},[101,112298,30486],{"class":111},[101,112300,112301,112303,112305,112308,112311,112313],{"class":103,"line":16724},[101,112302,34639],{"class":160},[101,112304,112],{"class":111},[101,112306,112307],{"class":216},"\"  target:\"",[101,112309,112310],{"class":111},", np.round(target, ",[101,112312,183],{"class":160},[101,112314,30486],{"class":111},[101,112316,112317,112319,112321,112324,112327,112329],{"class":103,"line":16746},[101,112318,34639],{"class":160},[101,112320,112],{"class":111},[101,112322,112323],{"class":216},"\"  ctrl:\"",[101,112325,112326],{"class":111},", np.round(data.ctrl.copy(), ",[101,112328,183],{"class":160},[101,112330,30486],{"class":111},[101,112332,112333,112335,112337,112340,112343,112345],{"class":103,"line":16751},[101,112334,34639],{"class":160},[101,112336,112],{"class":111},[101,112338,112339],{"class":216},"\"  obs_dim:\"",[101,112341,112342],{"class":111},", obs.shape[",[101,112344,303],{"class":160},[101,112346,4644],{"class":111},[101,112348,112349],{"class":103,"line":16757},[101,112350,2387],{"emptyLinePlaceholder":27},[101,112352,112353,112355,112357,112359,112361,112363,112365,112367],{"class":103,"line":16771},[101,112354,31288],{"class":160},[101,112356,112],{"class":111},[101,112358,110356],{"class":216},[101,112360,12423],{"class":111},[101,112362,32007],{"class":160},[101,112364,110363],{"class":111},[101,112366,183],{"class":160},[101,112368,30486],{"class":111},[101,112370,112371,112373,112375,112378,112381,112383,112385,112387],{"class":103,"line":16784},[101,112372,31288],{"class":160},[101,112374,112],{"class":111},[101,112376,112377],{"class":216},"\"final tip:\"",[101,112379,112380],{"class":111},", np.round(site_position(model, data, ",[101,112382,111516],{"class":216},[101,112384,110325],{"class":111},[101,112386,183],{"class":160},[101,112388,30486],{"class":111},[101,112390,112391,112393,112395,112398,112400,112402,112404,112406],{"class":103,"line":16789},[101,112392,31288],{"class":160},[101,112394,112],{"class":111},[101,112396,112397],{"class":216},"\"target:\"",[101,112399,112380],{"class":111},[101,112401,111939],{"class":216},[101,112403,110325],{"class":111},[101,112405,183],{"class":160},[101,112407,30486],{"class":111},[101,112409,112410],{"class":103,"line":16803},[101,112411,2387],{"emptyLinePlaceholder":27},[101,112413,112414],{"class":103,"line":16808},[101,112415,2387],{"emptyLinePlaceholder":27},[101,112417,112418,112420,112422,112424,112426],{"class":103,"line":16814},[101,112419,1518],{"class":107},[101,112421,31209],{"class":160},[101,112423,101539],{"class":107},[101,112425,101542],{"class":216},[101,112427,3726],{"class":111},[101,112429,112430],{"class":103,"line":16819},[101,112431,101549],{"class":111},[10,112433,103550],{},[92,112435,112437],{"className":23811,"code":112436,"language":23813,"meta":20,"style":20},"touch ch7_reacher.py\n",[98,112438,112439],{"__ignoreMap":20},[101,112440,112441,112443],{"class":103,"line":104},[101,112442,101263],{"class":1950},[101,112444,112445],{"class":216}," ch7_reacher.py\n",[10,112447,110424],{},[92,112449,112451],{"className":23811,"code":112450,"language":23813,"meta":20,"style":20},"python ch7_reacher.py\n",[98,112452,112453],{"__ignoreMap":20},[101,112454,112455,112457],{"class":103,"line":104},[101,112456,30369],{"class":1950},[101,112458,112445],{"class":216},[72,112460,101552],{"id":101552},[10,112462,112463],{},"读取 site 坐标：",[92,112465,112467],{"className":30367,"code":112466,"language":30369,"meta":20,"style":20},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[98,112468,112469],{"__ignoreMap":20},[101,112470,112471,112473,112475,112477,112479],{"class":103,"line":104},[101,112472,31936],{"class":107},[101,112474,111836],{"class":1950},[101,112476,111839],{"class":111},[101,112478,1286],{"class":160},[101,112480,111844],{"class":111},[10,112482,112483],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[10,112485,110440],{},[92,112487,112489],{"className":30367,"code":112488,"language":30369,"meta":20,"style":20},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[98,112490,112491],{"__ignoreMap":20},[101,112492,112493,112495],{"class":103,"line":104},[101,112494,17034],{"class":107},[101,112496,111948],{"class":111},[10,112498,112499],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[10,112501,109765],{},[92,112503,112505],{"className":30367,"code":112504,"language":30369,"meta":20,"style":20},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[98,112506,112507,112519,112532],{"__ignoreMap":20},[101,112508,112509,112511,112513,112515,112517],{"class":103,"line":104},[101,112510,111576],{"class":111},[101,112512,157],{"class":107},[101,112514,111581],{"class":111},[101,112516,643],{"class":107},[101,112518,111586],{"class":111},[101,112520,112521,112524,112526,112528,112530],{"class":103,"line":21},[101,112522,112523],{"class":111},"control_cost ",[101,112525,157],{"class":107},[101,112527,112017],{"class":160},[101,112529,6506],{"class":107},[101,112531,112022],{"class":111},[101,112533,112534,112536,112538,112540,112542,112544,112546],{"class":103,"line":1166},[101,112535,17034],{"class":107},[101,112537,109777],{"class":160},[101,112539,112],{"class":111},[101,112541,643],{"class":107},[101,112543,111576],{"class":111},[101,112545,643],{"class":107},[101,112547,112039],{"class":111},[10,112549,112550],{},"奖励由两部分组成：",[55,112552,112553,112558],{},[58,112554,112555,112557],{},[98,112556,111603],{},"：末端离目标越远，奖励越低。",[58,112559,112560,112563],{},[98,112561,112562],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[10,112565,112566],{},"简单控制器：",[92,112568,112570],{"className":30367,"code":112569,"language":30369,"meta":20,"style":20},"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",[98,112571,112572,112585,112617],{"__ignoreMap":20},[101,112573,112574,112577,112579,112581,112583],{"class":103,"line":104},[101,112575,112576],{"class":111},"error ",[101,112578,157],{"class":107},[101,112580,112148],{"class":111},[101,112582,643],{"class":107},[101,112584,112153],{"class":111},[101,112586,112587,112589,112591,112593,112595,112597,112599,112601,112603,112605,112607,112609,112611,112613,112615],{"class":103,"line":21},[101,112588,105851],{"class":111},[101,112590,303],{"class":160},[101,112592,4430],{"class":111},[101,112594,157],{"class":107},[101,112596,112170],{"class":111},[101,112598,105240],{"class":160},[101,112600,6506],{"class":107},[101,112602,112177],{"class":111},[101,112604,189],{"class":160},[101,112606,112182],{"class":111},[101,112608,643],{"class":107},[101,112610,102383],{"class":160},[101,112612,12423],{"class":111},[101,112614,102383],{"class":160},[101,112616,118],{"class":111},[101,112618,112619,112621,112623,112625,112627,112629,112631,112633,112635,112637,112639,112641,112643,112645,112647],{"class":103,"line":1166},[101,112620,105851],{"class":111},[101,112622,329],{"class":160},[101,112624,4430],{"class":111},[101,112626,157],{"class":107},[101,112628,112170],{"class":111},[101,112630,105240],{"class":160},[101,112632,6506],{"class":107},[101,112634,112177],{"class":111},[101,112636,303],{"class":160},[101,112638,112182],{"class":111},[101,112640,643],{"class":107},[101,112642,102383],{"class":160},[101,112644,12423],{"class":111},[101,112646,102383],{"class":160},[101,112648,118],{"class":111},[10,112650,112651],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[72,112653,101688],{"id":101688},[92,112655,112656],{"className":30367,"code":112466,"language":30369,"meta":20,"style":20},[98,112657,112658],{"__ignoreMap":20},[101,112659,112660,112662,112664,112666,112668],{"class":103,"line":104},[101,112661,31936],{"class":107},[101,112663,111836],{"class":1950},[101,112665,111839],{"class":111},[101,112667,1286],{"class":160},[101,112669,111844],{"class":111},[10,112671,112672,112673,112675,112676,82528,112678,28374],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[98,112674,79799],{}," 是 site 的名字，比如 ",[98,112677,111516],{},[98,112679,111939],{},[92,112681,112683],{"className":30367,"code":112682,"language":30369,"meta":20,"style":20},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[98,112684,112685],{"__ignoreMap":20},[101,112686,112687,112689,112691],{"class":103,"line":104},[101,112688,103614],{"class":111},[101,112690,157],{"class":107},[101,112692,111853],{"class":111},[10,112694,112695],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[92,112697,112699],{"className":30367,"code":112698,"language":30369,"meta":20,"style":20},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[98,112700,112701,112713],{"__ignoreMap":20},[101,112702,112703,112705,112707,112709,112711],{"class":103,"line":104},[101,112704,1518],{"class":107},[101,112706,103429],{"class":111},[101,112708,1021],{"class":107},[101,112710,4080],{"class":160},[101,112712,3726],{"class":111},[101,112714,112715,112717,112719,112721,112723,112725,112727,112729,112731,112733],{"class":103,"line":21},[101,112716,103875],{"class":107},[101,112718,103415],{"class":160},[101,112720,112],{"class":111},[101,112722,164],{"class":107},[101,112724,111878],{"class":216},[101,112726,1007],{"class":160},[101,112728,79799],{"class":111},[101,112730,1057],{"class":160},[101,112732,362],{"class":216},[101,112734,118],{"class":111},[10,112736,112737,112738,112741,112742,112744],{},"如果 site 没找到，就主动报错。",[98,112739,112740],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[98,112743,79799],{}," 的值放进字符串里。",[92,112746,112748],{"className":30367,"code":112747,"language":30369,"meta":20,"style":20},"return data.site_xpos[site_id].copy()\n",[98,112749,112750],{"__ignoreMap":20},[101,112751,112752,112754],{"class":103,"line":104},[101,112753,17034],{"class":107},[101,112755,111895],{"class":111},[10,112757,112758,112759,112761,112762,112765],{},"返回这个 site 的世界坐标。",[98,112760,103660],{}," 里的每一行都是一个 site 的 ",[98,112763,112764],{},"(x, y, z)"," 坐标。",[92,112767,112769],{"className":30367,"code":112768,"language":30369,"meta":20,"style":20},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[98,112770,112771],{"__ignoreMap":20},[101,112772,112773,112775,112777],{"class":103,"line":104},[101,112774,31936],{"class":107},[101,112776,111910],{"class":1950},[101,112778,111913],{"class":111},[10,112780,112781],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[92,112783,112785],{"className":30367,"code":112784,"language":30369,"meta":20,"style":20},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[98,112786,112787,112799],{"__ignoreMap":20},[101,112788,112789,112791,112793,112795,112797],{"class":103,"line":104},[101,112790,111548],{"class":111},[101,112792,157],{"class":107},[101,112794,111923],{"class":111},[101,112796,111516],{"class":216},[101,112798,118],{"class":111},[101,112800,112801,112803,112805,112807,112809],{"class":103,"line":21},[101,112802,111558],{"class":111},[101,112804,157],{"class":107},[101,112806,111923],{"class":111},[101,112808,111939],{"class":216},[101,112810,118],{"class":111},[10,112812,112813],{},"分别读取末端点和目标点的世界坐标。",[92,112815,112816],{"className":30367,"code":112488,"language":30369,"meta":20,"style":20},[98,112817,112818],{"__ignoreMap":20},[101,112819,112820,112822],{"class":103,"line":104},[101,112821,17034],{"class":107},[101,112823,111948],{"class":111},[10,112825,112826],{},"把四部分拼成一个观测数组：",[92,112828,112831],{"className":112829,"code":112830,"language":5175,"meta":20},[5173],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[98,112832,112830],{"__ignoreMap":20},[92,112834,112836],{"className":30367,"code":112835,"language":30369,"meta":20,"style":20},"dist = np.linalg.norm(tip - target)\n",[98,112837,112838],{"__ignoreMap":20},[101,112839,112840,112842,112844,112846,112848],{"class":103,"line":104},[101,112841,111576],{"class":111},[101,112843,157],{"class":107},[101,112845,111581],{"class":111},[101,112847,643],{"class":107},[101,112849,111586],{"class":111},[10,112851,112852,112853,112856,112857,112860],{},"计算 tip 到 target 的距离。",[98,112854,112855],{},"tip - target"," 得到一个三维向量，",[98,112858,112859],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[10,112862,14621],{},[92,112864,112867],{"className":112865,"code":112866,"language":5175,"meta":20},[5173],"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",[98,112868,112866],{"__ignoreMap":20},[92,112870,112872],{"className":30367,"code":112871,"language":30369,"meta":20,"style":20},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[98,112873,112874],{"__ignoreMap":20},[101,112875,112876,112878,112880,112882,112884],{"class":103,"line":104},[101,112877,112523],{"class":111},[101,112879,157],{"class":107},[101,112881,112017],{"class":160},[101,112883,6506],{"class":107},[101,112885,112022],{"class":111},[10,112887,112888,112889,112892,112893,112896],{},"计算动作惩罚。",[98,112890,112891],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[98,112894,112895],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[92,112898,112900],{"className":30367,"code":112899,"language":30369,"meta":20,"style":20},"return float(-dist - control_cost)\n",[98,112901,112902],{"__ignoreMap":20},[101,112903,112904,112906,112908,112910,112912,112914,112916],{"class":103,"line":104},[101,112905,17034],{"class":107},[101,112907,109777],{"class":160},[101,112909,112],{"class":111},[101,112911,643],{"class":107},[101,112913,111576],{"class":111},[101,112915,643],{"class":107},[101,112917,112039],{"class":111},[10,112919,112920],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[92,112922,112923],{"className":30367,"code":110783,"language":30369,"meta":20,"style":20},[98,112924,112925],{"__ignoreMap":20},[101,112926,112927,112929,112931],{"class":103,"line":104},[101,112928,110790],{"class":111},[101,112930,157],{"class":107},[101,112932,104741],{"class":160},[10,112934,112935],{},"累计奖励变量，记录整个运行过程的总分。",[92,112937,112939],{"className":30367,"code":112938,"language":30369,"meta":20,"style":20},"for step in range(500):\n",[98,112940,112941],{"__ignoreMap":20},[101,112942,112943,112945,112947,112949,112951,112953,112955],{"class":103,"line":104},[101,112944,3012],{"class":107},[101,112946,31605],{"class":111},[101,112948,26032],{"class":107},[101,112950,32432],{"class":160},[101,112952,112],{"class":111},[101,112954,65063],{"class":160},[101,112956,30775],{"class":111},[10,112958,112959],{},"运行 500 个控制步。",[92,112961,112962],{"className":30367,"code":104523,"language":30369,"meta":20,"style":20},[98,112963,112964],{"__ignoreMap":20},[101,112965,112966],{"class":103,"line":104},[101,112967,104523],{"class":111},[10,112969,112970,112971,100998,112973,112975],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[98,112972,103211],{},[98,112974,103214],{}," 是当前状态下的坐标。",[92,112977,112979],{"className":30367,"code":112978,"language":30369,"meta":20,"style":20},"error = target - tip\n",[98,112980,112981],{"__ignoreMap":20},[101,112982,112983,112985,112987,112989,112991],{"class":103,"line":104},[101,112984,112576],{"class":111},[101,112986,157],{"class":107},[101,112988,112148],{"class":111},[101,112990,643],{"class":107},[101,112992,112153],{"class":111},[10,112994,112995],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[92,112997,112999],{"className":30367,"code":112998,"language":30369,"meta":20,"style":20},"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",[98,113000,113001,113033],{"__ignoreMap":20},[101,113002,113003,113005,113007,113009,113011,113013,113015,113017,113019,113021,113023,113025,113027,113029,113031],{"class":103,"line":104},[101,113004,105851],{"class":111},[101,113006,303],{"class":160},[101,113008,4430],{"class":111},[101,113010,157],{"class":107},[101,113012,112170],{"class":111},[101,113014,105240],{"class":160},[101,113016,6506],{"class":107},[101,113018,112177],{"class":111},[101,113020,189],{"class":160},[101,113022,112182],{"class":111},[101,113024,643],{"class":107},[101,113026,102383],{"class":160},[101,113028,12423],{"class":111},[101,113030,102383],{"class":160},[101,113032,118],{"class":111},[101,113034,113035,113037,113039,113041,113043,113045,113047,113049,113051,113053,113055,113057,113059,113061,113063],{"class":103,"line":21},[101,113036,105851],{"class":111},[101,113038,329],{"class":160},[101,113040,4430],{"class":111},[101,113042,157],{"class":107},[101,113044,112170],{"class":111},[101,113046,105240],{"class":160},[101,113048,6506],{"class":107},[101,113050,112177],{"class":111},[101,113052,303],{"class":160},[101,113054,112182],{"class":111},[101,113056,643],{"class":107},[101,113058,102383],{"class":160},[101,113060,12423],{"class":111},[101,113062,102383],{"class":160},[101,113064,118],{"class":111},[10,113066,113067,113068,113071],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[98,113069,113070],{},"error -> ctrl -> step"," 的流程。",[92,113073,113074],{"className":30367,"code":104485,"language":30369,"meta":20,"style":20},[98,113075,113076],{"__ignoreMap":20},[101,113077,113078],{"class":103,"line":104},[101,113079,104485],{"class":111},[10,113081,113082],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[92,113084,113086],{"className":30367,"code":113085,"language":30369,"meta":20,"style":20},"obs = get_obs(model, data)\n",[98,113087,113088],{"__ignoreMap":20},[101,113089,113090,113092,113094],{"class":103,"line":104},[101,113091,110834],{"class":111},[101,113093,157],{"class":107},[101,113095,112271],{"class":111},[10,113097,113098,113099,113102],{},"读取最新观测。后面打印 ",[98,113100,113101],{},"obs.shape[0]","，用来确认观测维度是 10。",[43,113104,102296],{"id":102295},[10,113106,113107],{},"观测维度为:",[92,113109,113112],{"className":113110,"code":113111,"language":5175,"meta":20},[5173],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[98,113113,113111],{"__ignoreMap":20},[10,113115,113116],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[10,113118,113119],{},"程序每 100 步打印：",[92,113121,113124],{"className":113122,"code":113123,"language":5175,"meta":20},[5173],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[98,113125,113123],{"__ignoreMap":20},[10,113127,113128,113129,113131],{},"如果控制有效，你应该看到最终 ",[98,113130,103211],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[43,113133,102328],{"id":102327},[55,113135,113136,113139,113142,113148,113154,113161,113171],{},[58,113137,113138],{},"修改目标点位置。",[58,113140,113141],{},"重新运行，观察最终 tip 是否变化。",[58,113143,113144,113145,113147],{},"把 gravity 改成 ",[98,113146,102569],{},"，观察控制是否变差。",[58,113149,111161,113150,111165,113152,28374],{},[98,113151,102138],{},[98,113153,189],{},[58,113155,102391,113156,102394,113158,113160],{},[98,113157,110576],{},[98,113159,107287],{},"，观察机械臂是否更难移动。",[58,113162,102391,113163,82519,113165,102394,113167,113170],{},[98,113164,103214],{},[98,113166,104126],{},[98,113168,113169],{},"0.2 0 0.6","，观察 reward 和 final tip。",[58,113172,113173],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[43,113175,102433],{"id":102432},[72,113177,113179],{"id":113178},"site-not-found",[98,113180,113181],{},"site not found",[10,113183,113184,113185,100998,113188,28374],{},"检查 XML 中是否有 ",[98,113186,113187],{},"site name=\"tip\"",[98,113189,113190],{},"site name=\"target\"",[72,113192,113193],{"id":113193},"机械臂完全不动",[10,113195,102503],{},[55,113197,113198,113203,113206,113211],{},[58,113199,113200,113202],{},[98,113201,102138],{}," 是否为 2",[58,113204,113205],{},"actuator 是否引用正确 joint",[58,113207,113208,113210],{},[98,113209,101056],{}," 是否被赋值",[58,113212,113213,113214],{},"是否执行了 ",[98,113215,100665],{},[72,113217,113218],{"id":113218},"控制效果不好",[10,113220,113221],{},"正常。本章重点不是控制器最优，而是任务结构:",[92,113223,113226],{"className":113224,"code":113225,"language":5175,"meta":20},[5173],"obs → action → mj_step → reward → next_obs\n",[98,113227,113225],{"__ignoreMap":20},[72,113229,113231],{"id":113230},"tip-坐标不变化","tip 坐标不变化",[10,113233,102555],{},[55,113235,113236,113241,113249,113258],{},[58,113237,113238,113239,28374],{},"是否每步调用了 ",[98,113240,100665],{},[58,113242,113243,113244,100998,113246,28374],{},"是否写入了 ",[98,113245,106106],{},[98,113247,113248],{},"data.ctrl[1]",[58,113250,113251,113252,324,113255,28374],{},"actuator 是否正确引用 ",[98,113253,113254],{},"joint1",[98,113256,113257],{},"joint2",[58,113259,113260],{},"控制输入是否太小。",[72,113262,113263],{"id":113263},"目标点不会动",[10,113265,113266],{},"本章的 target 是固定 site：",[92,113268,113270],{"className":53056,"code":113269,"language":53058,"meta":20,"style":20},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[98,113271,113272],{"__ignoreMap":20},[101,113273,113274,113276,113278,113280,113282,113284,113286,113288,113291],{"class":103,"line":104},[101,113275,1021],{"class":111},[101,113277,103190],{"class":51289},[101,113279,14908],{"class":1950},[101,113281,157],{"class":111},[101,113283,111939],{"class":216},[101,113285,101086],{"class":1950},[101,113287,157],{"class":111},[101,113289,113290],{"class":216},"\"0.5 0 0.4\"",[101,113292,113293],{"class":111}," ...\u002F>\n",[10,113295,113296,113297,113299],{},"它直接挂在 ",[98,113298,101821],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[72,113301,113302],{"id":113302},"机械臂不像真实机械臂",[10,113304,113305],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[43,113307,102587],{"id":102586},[10,113309,113310],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[10,113312,113313],{},"核心公式：",[92,113315,113318],{"className":113316,"code":113317,"language":5175,"meta":20},[5173],"distance = ||tip - target||\nreward = -distance - action_cost\n",[98,113319,113317],{"__ignoreMap":20},[10,113321,113322],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5114,113324,113325],{},"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":20,"searchDepth":21,"depth":21,"links":113327},[113328,113329,113330,113335,113339,113340,113341,113349],{"id":100626,"depth":21,"text":100627},{"id":100749,"depth":21,"text":100750},{"id":101024,"depth":21,"text":101025,"children":113331},[113332,113333,113334],{"id":111531,"depth":1166,"text":111532},{"id":111607,"depth":1166,"text":111607},{"id":111637,"depth":1166,"text":111638},{"id":101232,"depth":21,"text":101233,"children":113336},[113337,113338],{"id":101552,"depth":1166,"text":101552},{"id":101688,"depth":1166,"text":101688},{"id":102295,"depth":21,"text":102296},{"id":102327,"depth":21,"text":102328},{"id":102432,"depth":21,"text":102433,"children":113342},[113343,113344,113345,113346,113347,113348],{"id":113178,"depth":1166,"text":113181},{"id":113193,"depth":1166,"text":113193},{"id":113218,"depth":1166,"text":113218},{"id":113230,"depth":1166,"text":113231},{"id":113263,"depth":1166,"text":113263},{"id":113302,"depth":1166,"text":113302},{"id":102586,"depth":21,"text":102587},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111335,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113356,"title":113357,"body":113358,"description":20,"extension":24,"meta":116820,"navigation":27,"path":116821,"seo":116822,"stem":116823,"__hash__":116824},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113359,"toc":116791},[113360,113363,113365,113368,113371,113396,113399,113405,113408,113414,113416,113418,113442,113444,113462,113464,113507,113509,113536,113538,113541,113593,113596,113602,113611,113614,113652,113655,113694,113697,113705,113712,113715,113721,113723,113777,113784,113829,113832,113836,113852,113862,113864,115125,115127,115139,115141,115152,115154,115157,115178,115181,115184,115217,115223,115226,115259,115262,115265,115306,115311,115325,115328,115341,115346,115369,115371,115386,115396,115411,115418,115438,115453,115471,115474,115491,115499,115515,115521,115553,115566,115598,115608,115643,115657,115703,115717,115759,115770,115783,115789,115822,115825,115852,115862,115902,115912,115929,115936,115954,115957,115998,116011,116026,116029,116052,116055,116067,116070,116089,116094,116115,116118,116133,116136,116170,116182,116197,116200,116225,116228,116247,116250,116282,116285,116309,116315,116345,116352,116365,116368,116370,116372,116378,116381,116384,116396,116399,116401,116455,116457,116461,116467,116476,116479,116486,116488,116511,116514,116518,116520,116538,116544,116546,116579,116582,116588,116592,116595,116615,116620,116624,116631,116651,116656,116660,116663,116683,116686,116772,116776,116779,116785,116788],[39,113361,113357],{"id":113362},"_8gymnasium-风格强化学习接口基础",[43,113364,100627],{"id":100626},[10,113366,113367],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[10,113369,113370],{},"你将实现:",[92,113372,113374],{"className":30367,"code":113373,"language":30369,"meta":20,"style":20},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[98,113375,113376,113386],{"__ignoreMap":20},[101,113377,113378,113381,113383],{"class":103,"line":104},[101,113379,113380],{"class":111},"obs, info ",[101,113382,157],{"class":107},[101,113384,113385],{"class":111}," env.reset()\n",[101,113387,113388,113391,113393],{"class":103,"line":21},[101,113389,113390],{"class":111},"obs, reward, terminated, truncated, info ",[101,113392,157],{"class":107},[101,113394,113395],{"class":111}," env.step(action)\n",[10,113397,113398],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[10,113400,113401,113402,113404],{},"前面章节的代码都是“脚本式”的：在 ",[98,113403,102275],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[10,113406,113407],{},"可以先记住 Gymnasium 环境的核心交互：",[92,113409,113412],{"className":113410,"code":113411,"language":5175,"meta":20},[5173],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[98,113413,113411],{"__ignoreMap":20},[43,113415,100750],{"id":100749},[10,113417,100753],{},[92,113419,113420],{"className":23811,"code":104368,"language":23813,"meta":20,"style":20},[98,113421,113422],{"__ignoreMap":20},[101,113423,113424,113426,113428,113430,113432,113434,113436,113438,113440],{"class":103,"line":104},[101,113425,24565],{"class":1950},[101,113427,26304],{"class":216},[101,113429,23823],{"class":216},[101,113431,26389],{"class":160},[101,113433,104383],{"class":216},[101,113435,100778],{"class":216},[101,113437,102481],{"class":216},[101,113439,100794],{"class":216},[101,113441,104392],{"class":216},[10,113443,102799],{},[92,113445,113447],{"className":23811,"code":113446,"language":23813,"meta":20,"style":20},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[98,113448,113449],{"__ignoreMap":20},[101,113450,113451,113453,113455,113457,113459],{"class":103,"line":104},[101,113452,23820],{"class":1950},[101,113454,23823],{"class":216},[101,113456,100910],{"class":216},[101,113458,107691],{"class":216},[101,113460,113461],{"class":216}," gymnasium\n",[10,113463,102816],{},[92,113465,113467],{"className":23811,"code":113466,"language":23813,"meta":20,"style":20},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[98,113468,113469,113486,113495],{"__ignoreMap":20},[101,113470,113471,113473,113475,113477,113480,113482,113484],{"class":103,"line":104},[101,113472,30319],{"class":1950},[101,113474,29165],{"class":216},[101,113476,25104],{"class":160},[101,113478,113479],{"class":216}," mujoco-gym-api",[101,113481,100955],{"class":216},[101,113483,100958],{"class":160},[101,113485,100961],{"class":160},[101,113487,113488,113490,113492],{"class":103,"line":21},[101,113489,30319],{"class":1950},[101,113491,100968],{"class":216},[101,113493,113494],{"class":216}," mujoco-gym-api\n",[101,113496,113497,113499,113501,113503,113505],{"class":103,"line":1166},[101,113498,23820],{"class":1950},[101,113500,23823],{"class":216},[101,113502,100910],{"class":216},[101,113504,107691],{"class":216},[101,113506,113461],{"class":216},[10,113508,100984],{},[55,113510,113511,113521,113524,113530],{},[58,113512,113513,113514,113517,113518,28374],{},"本章使用 ",[98,113515,113516],{},"gymnasium","，不是旧版 ",[98,113519,113520],{},"gym",[58,113522,113523],{},"Gymnasium API 与旧 Gym API 有差异。",[58,113525,113526,113527,28374],{},"旧 Gym 常见返回值是 4 个: ",[98,113528,113529],{},"obs, reward, done, info",[58,113531,113532,113533,28374],{},"Gymnasium 返回值是 5 个: ",[98,113534,113535],{},"obs, reward, terminated, truncated, info",[43,113537,101025],{"id":101024},[10,113539,113540],{},"强化学习环境接口包含:",[249,113542,113543,113552],{},[252,113544,113545],{},[255,113546,113547,113550],{},[258,113548,113549],{"align":23725},"方法",[258,113551,102676],{"align":23725},[296,113553,113554,113564,113574,113584],{},[255,113555,113556,113561],{},[301,113557,113558],{"align":23725},[98,113559,113560],{},"reset()",[301,113562,113563],{"align":23725},"重置环境",[255,113565,113566,113571],{},[301,113567,113568],{"align":23725},[98,113569,113570],{},"step(action)",[301,113572,113573],{"align":23725},"执行动作",[255,113575,113576,113581],{},[301,113577,113578],{"align":23725},[98,113579,113580],{},"observation_space",[301,113582,113583],{"align":23725},"观测空间",[255,113585,113586,113591],{},[301,113587,113588],{"align":23725},[98,113589,113590],{},"action_space",[301,113592,23643],{"align":23725},[10,113594,113595],{},"一个最小环境需要完成:",[92,113597,113600],{"className":113598,"code":113599,"language":5175,"meta":20},[5173],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[98,113601,113599],{"__ignoreMap":20},[72,113603,113605,100998,113608,104618],{"id":113604},"terminated-和-truncated-的区别",[98,113606,113607],{},"terminated",[98,113609,113610],{},"truncated",[10,113612,113613],{},"Gymnasium 把“结束”拆成两个概念：",[249,113615,113616,113626],{},[252,113617,113618],{},[255,113619,113620,113622,113624],{},[258,113621,104554],{"align":23725},[258,113623,100680],{"align":23725},[258,113625,21175],{"align":23725},[296,113627,113628,113640],{},[255,113629,113630,113634,113637],{},[301,113631,113632],{"align":23725},[98,113633,113607],{},[301,113635,113636],{"align":23725},"任务自然结束",[301,113638,113639],{"align":23725},"机械臂到达目标、机器人摔倒",[255,113641,113642,113646,113649],{},[301,113643,113644],{"align":23725},[98,113645,113610],{},[301,113647,113648],{"align":23725},"因外部限制截断",[301,113650,113651],{"align":23725},"达到最大步数、时间限制",[10,113653,113654],{},"本章中：",[92,113656,113658],{"className":30367,"code":113657,"language":30369,"meta":20,"style":20},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[98,113659,113660,113675],{"__ignoreMap":20},[101,113661,113662,113665,113667,113670,113672],{"class":103,"line":104},[101,113663,113664],{"class":111},"terminated ",[101,113666,157],{"class":107},[101,113668,113669],{"class":111}," dist ",[101,113671,1021],{"class":107},[101,113673,113674],{"class":160}," 0.05\n",[101,113676,113677,113680,113682,113684,113687,113689,113691],{"class":103,"line":21},[101,113678,113679],{"class":111},"truncated ",[101,113681,157],{"class":107},[101,113683,38862],{"class":160},[101,113685,113686],{"class":111},".steps ",[101,113688,1697],{"class":107},[101,113690,38862],{"class":160},[101,113692,113693],{"class":111},".max_steps\n",[10,113695,113696],{},"也就是：",[55,113698,113699,113702],{},[58,113700,113701],{},"末端距离目标小于 0.05，任务成功结束。",[58,113703,113704],{},"步数超过上限，episode 被截断。",[72,113706,113708,100998,113710],{"id":113707},"observation_space-和-action_space",[98,113709,113580],{},[98,113711,113590],{},[10,113713,113714],{},"这两个对象告诉算法：",[92,113716,113719],{"className":113717,"code":113718,"language":5175,"meta":20},[5173],"观测长什么样\n动作允许多大\n",[98,113720,113718],{"__ignoreMap":20},[10,113722,14621],{},[92,113724,113726],{"className":30367,"code":113725,"language":30369,"meta":20,"style":20},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[98,113727,113728],{"__ignoreMap":20},[101,113729,113730,113732,113735,113737,113740,113743,113746,113748,113750,113753,113755,113757,113759,113761,113763,113765,113767,113770,113772,113774],{"class":103,"line":104},[101,113731,30812],{"class":160},[101,113733,113734],{"class":111},".action_space ",[101,113736,157],{"class":107},[101,113738,113739],{"class":111}," spaces.Box(",[101,113741,113742],{"class":5204},"low",[101,113744,113745],{"class":107},"=-",[101,113747,102383],{"class":160},[101,113749,12423],{"class":111},[101,113751,113752],{"class":5204},"high",[101,113754,157],{"class":107},[101,113756,102383],{"class":160},[101,113758,12423],{"class":111},[101,113760,95943],{"class":5204},[101,113762,157],{"class":107},[101,113764,112],{"class":111},[101,113766,189],{"class":160},[101,113768,113769],{"class":111},",), ",[101,113771,93480],{"class":5204},[101,113773,157],{"class":107},[101,113775,113776],{"class":111},"np.float32)\n",[10,113778,113779,113780,113783],{},"表示动作是 2 维数组，每个值都在 ",[98,113781,113782],{},"[-1, 1]"," 范围内。",[92,113785,113787],{"className":30367,"code":113786,"language":30369,"meta":20,"style":20},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[98,113788,113789],{"__ignoreMap":20},[101,113790,113791,113793,113796,113798,113800,113802,113804,113807,113809,113811,113813,113815,113817,113819,113821,113823,113825,113827],{"class":103,"line":104},[101,113792,30812],{"class":160},[101,113794,113795],{"class":111},".observation_space ",[101,113797,157],{"class":107},[101,113799,113739],{"class":111},[101,113801,113742],{"class":5204},[101,113803,113745],{"class":107},[101,113805,113806],{"class":111},"np.inf, ",[101,113808,113752],{"class":5204},[101,113810,157],{"class":107},[101,113812,113806],{"class":111},[101,113814,95943],{"class":5204},[101,113816,157],{"class":107},[101,113818,112],{"class":111},[101,113820,557],{"class":160},[101,113822,113769],{"class":111},[101,113824,93480],{"class":5204},[101,113826,157],{"class":107},[101,113828,113776],{"class":111},[10,113830,113831],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[72,113833,113835],{"id":113834},"frame_skip-是什么","frame_skip 是什么",[92,113837,113839],{"className":30367,"code":113838,"language":30369,"meta":20,"style":20},"self.frame_skip = 5\n",[98,113840,113841],{"__ignoreMap":20},[101,113842,113843,113845,113848,113850],{"class":103,"line":104},[101,113844,30812],{"class":160},[101,113846,113847],{"class":111},".frame_skip ",[101,113849,157],{"class":107},[101,113851,54416],{"class":160},[10,113853,113854,113855,113858,113859,113861],{},"表示外部调用一次 ",[98,113856,113857],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[98,113860,101195],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[43,113863,101233],{"id":101232},[92,113865,113867],{"className":30367,"code":113866,"language":30369,"meta":20,"style":20},"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",[98,113868,113869,113881,113887,113897,113908,113912,113916,113924,113929,113933,113937,113941,113945,113949,113953,113957,113962,113966,113970,113974,113979,113983,113987,113991,113995,113999,114003,114007,114011,114015,114019,114023,114027,114031,114049,114064,114068,114081,114091,114106,114123,114127,114148,114167,114192,114206,114210,114220,114232,114242,114246,114288,114326,114330,114340,114356,114371,114390,114397,114401,114414,114429,114444,114457,114476,114492,114496,114537,114552,114567,114571,114610,114621,114634,114638,114648,114657,114661,114671,114686,114704,114708,114719,114736,114749,114753,114763,114767,114778,114789,114793,114807,114821,114837,114841,114854,114871,114886,114893,114897,114901,114913,114923,114941,114953,114965,114969,114977,114993,115002,115011,115019,115061,115074,115079,115083,115101,115105,115109,115121],{"__ignoreMap":20},[101,113870,113871,113873,113876,113878],{"class":103,"line":104},[101,113872,30381],{"class":107},[101,113874,113875],{"class":111}," gymnasium ",[101,113877,31372],{"class":107},[101,113879,113880],{"class":111}," gym\n",[101,113882,113883,113885],{"class":103,"line":21},[101,113884,30381],{"class":107},[101,113886,101281],{"class":111},[101,113888,113889,113891,113893,113895],{"class":103,"line":1166},[101,113890,30381],{"class":107},[101,113892,31369],{"class":111},[101,113894,31372],{"class":107},[101,113896,31375],{"class":111},[101,113898,113899,113901,113903,113905],{"class":103,"line":1181},[101,113900,30726],{"class":107},[101,113902,113875],{"class":111},[101,113904,30381],{"class":107},[101,113906,113907],{"class":111}," spaces\n",[101,113909,113910],{"class":103,"line":1187},[101,113911,2387],{"emptyLinePlaceholder":27},[101,113913,113914],{"class":103,"line":1201},[101,113915,2387],{"emptyLinePlaceholder":27},[101,113917,113918,113920,113922],{"class":103,"line":1207},[101,113919,101294],{"class":160},[101,113921,13552],{"class":107},[101,113923,101299],{"class":216},[101,113925,113926],{"class":103,"line":1298},[101,113927,113928],{"class":216},"\u003Cmujoco model=\"gym_reacher\">\n",[101,113930,113931],{"class":103,"line":1304},[101,113932,111718],{"class":216},[101,113934,113935],{"class":103,"line":1316},[101,113936,2387],{"emptyLinePlaceholder":27},[101,113938,113939],{"class":103,"line":1599},[101,113940,101318],{"class":216},[101,113942,113943],{"class":103,"line":1604},[101,113944,111736],{"class":216},[101,113946,113947],{"class":103,"line":1610},[101,113948,2387],{"emptyLinePlaceholder":27},[101,113950,113951],{"class":103,"line":1615},[101,113952,111745],{"class":216},[101,113954,113955],{"class":103,"line":1629},[101,113956,111750],{"class":216},[101,113958,113959],{"class":103,"line":1634},[101,113960,113961],{"class":216},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[101,113963,113964],{"class":103,"line":1640},[101,113965,2387],{"emptyLinePlaceholder":27},[101,113967,113968],{"class":103,"line":1661},[101,113969,111764],{"class":216},[101,113971,113972],{"class":103,"line":1666},[101,113973,111769],{"class":216},[101,113975,113976],{"class":103,"line":1680},[101,113977,113978],{"class":216},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[101,113980,113981],{"class":103,"line":1685},[101,113982,111779],{"class":216},[101,113984,113985],{"class":103,"line":1714},[101,113986,106418],{"class":216},[101,113988,113989],{"class":103,"line":1719},[101,113990,101347],{"class":216},[101,113992,113993],{"class":103,"line":1736},[101,113994,101352],{"class":216},[101,113996,113997],{"class":103,"line":1741},[101,113998,2387],{"emptyLinePlaceholder":27},[101,114000,114001],{"class":103,"line":1746},[101,114002,106435],{"class":216},[101,114004,114005],{"class":103,"line":1751},[101,114006,111804],{"class":216},[101,114008,114009],{"class":103,"line":1765},[101,114010,111809],{"class":216},[101,114012,114013],{"class":103,"line":1770},[101,114014,106445],{"class":216},[101,114016,114017],{"class":103,"line":2564},[101,114018,101357],{"class":216},[101,114020,114021],{"class":103,"line":2578},[101,114022,95678],{"class":216},[101,114024,114025],{"class":103,"line":2586},[101,114026,2387],{"emptyLinePlaceholder":27},[101,114028,114029],{"class":103,"line":2591},[101,114030,2387],{"emptyLinePlaceholder":27},[101,114032,114033,114035,114038,114040,114042,114044,114047],{"class":103,"line":2597},[101,114034,14682],{"class":107},[101,114036,114037],{"class":1950}," ReacherEnv",[101,114039,112],{"class":111},[101,114041,113520],{"class":1950},[101,114043,669],{"class":111},[101,114045,114046],{"class":1950},"Env",[101,114048,30775],{"class":111},[101,114050,114051,114054,114056,114058,114061],{"class":103,"line":2603},[101,114052,114053],{"class":111},"    metadata ",[101,114055,157],{"class":107},[101,114057,4435],{"class":111},[101,114059,114060],{"class":216},"\"render_modes\"",[101,114062,114063],{"class":111},": []}\n",[101,114065,114066],{"class":103,"line":2608},[101,114067,2387],{"emptyLinePlaceholder":27},[101,114069,114070,114072,114074,114077,114079],{"class":103,"line":7936},[101,114071,30790],{"class":107},[101,114073,30793],{"class":160},[101,114075,114076],{"class":111},"(self) -> ",[101,114078,95666],{"class":160},[101,114080,3726],{"class":111},[101,114082,114083,114085,114087,114089],{"class":103,"line":7960},[101,114084,30806],{"class":160},[101,114086,17249],{"class":111},[101,114088,30818],{"class":160},[101,114090,1963],{"class":111},[101,114092,114093,114095,114098,114100,114102,114104],{"class":103,"line":7965},[101,114094,30834],{"class":160},[101,114096,114097],{"class":111},".model ",[101,114099,157],{"class":107},[101,114101,101392],{"class":111},[101,114103,101294],{"class":160},[101,114105,118],{"class":111},[101,114107,114108,114110,114113,114115,114118,114120],{"class":103,"line":7971},[101,114109,30834],{"class":160},[101,114111,114112],{"class":111},".data ",[101,114114,157],{"class":107},[101,114116,114117],{"class":111}," mujoco.MjData(",[101,114119,30812],{"class":160},[101,114121,114122],{"class":111},".model)\n",[101,114124,114125],{"class":103,"line":7998},[101,114126,2387],{"emptyLinePlaceholder":27},[101,114128,114129,114131,114134,114136,114139,114141,114144,114146],{"class":103,"line":8003},[101,114130,30834],{"class":160},[101,114132,114133],{"class":111},".tip_site_id ",[101,114135,157],{"class":107},[101,114137,114138],{"class":111}," mujoco.mj_name2id(",[101,114140,30812],{"class":160},[101,114142,114143],{"class":111},".model, mujoco.mjtObj.mjOBJ_SITE, ",[101,114145,111516],{"class":216},[101,114147,118],{"class":111},[101,114149,114150,114152,114155,114157,114159,114161,114163,114165],{"class":103,"line":8009},[101,114151,30834],{"class":160},[101,114153,114154],{"class":111},".target_site_id ",[101,114156,157],{"class":107},[101,114158,114138],{"class":111},[101,114160,30812],{"class":160},[101,114162,114143],{"class":111},[101,114164,111939],{"class":216},[101,114166,118],{"class":111},[101,114168,114169,114171,114173,114175,114177,114179,114182,114184,114186,114188,114190],{"class":103,"line":8021},[101,114170,2484],{"class":107},[101,114172,38862],{"class":160},[101,114174,114133],{"class":111},[101,114176,1021],{"class":107},[101,114178,4080],{"class":160},[101,114180,114181],{"class":107}," or",[101,114183,38862],{"class":160},[101,114185,114154],{"class":111},[101,114187,1021],{"class":107},[101,114189,4080],{"class":160},[101,114191,3726],{"class":111},[101,114193,114194,114197,114199,114201,114204],{"class":103,"line":8033},[101,114195,114196],{"class":107},"            raise",[101,114198,103415],{"class":160},[101,114200,112],{"class":111},[101,114202,114203],{"class":216},"\"required sites not found\"",[101,114205,118],{"class":111},[101,114207,114208],{"class":103,"line":8045},[101,114209,2387],{"emptyLinePlaceholder":27},[101,114211,114212,114214,114216,114218],{"class":103,"line":9704},[101,114213,30834],{"class":160},[101,114215,113847],{"class":111},[101,114217,157],{"class":107},[101,114219,54416],{"class":160},[101,114221,114222,114224,114227,114229],{"class":103,"line":9729},[101,114223,30834],{"class":160},[101,114225,114226],{"class":111},".max_steps ",[101,114228,157],{"class":107},[101,114230,114231],{"class":160}," 200\n",[101,114233,114234,114236,114238,114240],{"class":103,"line":9752},[101,114235,30834],{"class":160},[101,114237,113686],{"class":111},[101,114239,157],{"class":107},[101,114241,47322],{"class":160},[101,114243,114244],{"class":103,"line":9776},[101,114245,2387],{"emptyLinePlaceholder":27},[101,114247,114248,114250,114252,114254,114256,114258,114260,114262,114264,114266,114268,114270,114272,114274,114276,114278,114280,114282,114284,114286],{"class":103,"line":9781},[101,114249,30834],{"class":160},[101,114251,113734],{"class":111},[101,114253,157],{"class":107},[101,114255,113739],{"class":111},[101,114257,113742],{"class":5204},[101,114259,113745],{"class":107},[101,114261,102383],{"class":160},[101,114263,12423],{"class":111},[101,114265,113752],{"class":5204},[101,114267,157],{"class":107},[101,114269,102383],{"class":160},[101,114271,12423],{"class":111},[101,114273,95943],{"class":5204},[101,114275,157],{"class":107},[101,114277,112],{"class":111},[101,114279,189],{"class":160},[101,114281,113769],{"class":111},[101,114283,93480],{"class":5204},[101,114285,157],{"class":107},[101,114287,113776],{"class":111},[101,114289,114290,114292,114294,114296,114298,114300,114302,114304,114306,114308,114310,114312,114314,114316,114318,114320,114322,114324],{"class":103,"line":9786},[101,114291,30834],{"class":160},[101,114293,113795],{"class":111},[101,114295,157],{"class":107},[101,114297,113739],{"class":111},[101,114299,113742],{"class":5204},[101,114301,113745],{"class":107},[101,114303,113806],{"class":111},[101,114305,113752],{"class":5204},[101,114307,157],{"class":107},[101,114309,113806],{"class":111},[101,114311,95943],{"class":5204},[101,114313,157],{"class":107},[101,114315,112],{"class":111},[101,114317,557],{"class":160},[101,114319,113769],{"class":111},[101,114321,93480],{"class":5204},[101,114323,157],{"class":107},[101,114325,113776],{"class":111},[101,114327,114328],{"class":103,"line":9791},[101,114329,2387],{"emptyLinePlaceholder":27},[101,114331,114332,114334,114337],{"class":103,"line":9800},[101,114333,30790],{"class":107},[101,114335,114336],{"class":1950}," _get_obs",[101,114338,114339],{"class":111},"(self) -> np.ndarray:\n",[101,114341,114342,114344,114346,114348,114351,114353],{"class":103,"line":9805},[101,114343,112117],{"class":111},[101,114345,157],{"class":107},[101,114347,38862],{"class":160},[101,114349,114350],{"class":111},".data.site_xpos[",[101,114352,30812],{"class":160},[101,114354,114355],{"class":111},".tip_site_id].copy()\n",[101,114357,114358,114360,114362,114364,114366,114368],{"class":103,"line":9811},[101,114359,112130],{"class":111},[101,114361,157],{"class":107},[101,114363,38862],{"class":160},[101,114365,114350],{"class":111},[101,114367,30812],{"class":160},[101,114369,114370],{"class":111},".target_site_id].copy()\n",[101,114372,114373,114375,114377,114380,114382,114385,114387],{"class":103,"line":9832},[101,114374,110162],{"class":111},[101,114376,157],{"class":107},[101,114378,114379],{"class":111}," np.concatenate([",[101,114381,30812],{"class":160},[101,114383,114384],{"class":111},".data.qpos.copy(), ",[101,114386,30812],{"class":160},[101,114388,114389],{"class":111},".data.qvel.copy(), tip, target])\n",[101,114391,114392,114394],{"class":103,"line":9838},[101,114393,14740],{"class":107},[101,114395,114396],{"class":111}," obs.astype(np.float32)\n",[101,114398,114399],{"class":103,"line":9852},[101,114400,2387],{"emptyLinePlaceholder":27},[101,114402,114403,114405,114408,114410,114412],{"class":103,"line":9858},[101,114404,30790],{"class":107},[101,114406,114407],{"class":1950}," _get_reward",[101,114409,114076],{"class":111},[101,114411,151],{"class":160},[101,114413,3726],{"class":111},[101,114415,114416,114418,114420,114422,114424,114426],{"class":103,"line":9885},[101,114417,112117],{"class":111},[101,114419,157],{"class":107},[101,114421,38862],{"class":160},[101,114423,114350],{"class":111},[101,114425,30812],{"class":160},[101,114427,114428],{"class":111},".tip_site_id]\n",[101,114430,114431,114433,114435,114437,114439,114441],{"class":103,"line":9894},[101,114432,112130],{"class":111},[101,114434,157],{"class":107},[101,114436,38862],{"class":160},[101,114438,114350],{"class":111},[101,114440,30812],{"class":160},[101,114442,114443],{"class":111},".target_site_id]\n",[101,114445,114446,114449,114451,114453,114455],{"class":103,"line":9900},[101,114447,114448],{"class":111},"        dist ",[101,114450,157],{"class":107},[101,114452,111581],{"class":111},[101,114454,643],{"class":107},[101,114456,111586],{"class":111},[101,114458,114459,114462,114464,114466,114468,114471,114473],{"class":103,"line":9908},[101,114460,114461],{"class":111},"        control_cost ",[101,114463,157],{"class":107},[101,114465,112017],{"class":160},[101,114467,6506],{"class":107},[101,114469,114470],{"class":111}," np.sum(np.square(",[101,114472,30812],{"class":160},[101,114474,114475],{"class":111},".data.ctrl))\n",[101,114477,114478,114480,114482,114484,114486,114488,114490],{"class":103,"line":9913},[101,114479,14740],{"class":107},[101,114481,109777],{"class":160},[101,114483,112],{"class":111},[101,114485,643],{"class":107},[101,114487,111576],{"class":111},[101,114489,643],{"class":107},[101,114491,112039],{"class":111},[101,114493,114494],{"class":103,"line":16592},[101,114495,2387],{"emptyLinePlaceholder":27},[101,114497,114498,114500,114503,114506,114508,114511,114513,114515,114517,114519,114521,114524,114527,114529,114531,114533,114535],{"class":103,"line":16598},[101,114499,30790],{"class":107},[101,114501,114502],{"class":1950}," reset",[101,114504,114505],{"class":111},"(self, ",[101,114507,566],{"class":107},[101,114509,114510],{"class":111},", seed: ",[101,114512,115],{"class":160},[101,114514,25098],{"class":107},[101,114516,38922],{"class":160},[101,114518,13552],{"class":107},[101,114520,38922],{"class":160},[101,114522,114523],{"class":111},", options: ",[101,114525,114526],{"class":160},"dict",[101,114528,25098],{"class":107},[101,114530,38922],{"class":160},[101,114532,13552],{"class":107},[101,114534,38922],{"class":160},[101,114536,30775],{"class":111},[101,114538,114539,114541,114544,114547,114549],{"class":103,"line":16621},[101,114540,30806],{"class":160},[101,114542,114543],{"class":111},"().reset(",[101,114545,114546],{"class":5204},"seed",[101,114548,157],{"class":107},[101,114550,114551],{"class":111},"seed)\n",[101,114553,114554,114557,114559,114562,114564],{"class":103,"line":16627},[101,114555,114556],{"class":111},"        mujoco.mj_resetData(",[101,114558,30812],{"class":160},[101,114560,114561],{"class":111},".model, ",[101,114563,30812],{"class":160},[101,114565,114566],{"class":111},".data)\n",[101,114568,114569],{"class":103,"line":16650},[101,114570,2387],{"emptyLinePlaceholder":27},[101,114572,114573,114575,114578,114580,114582,114585,114587,114589,114591,114593,114595,114597,114599,114601,114603,114605,114607],{"class":103,"line":16664},[101,114574,30834],{"class":160},[101,114576,114577],{"class":111},".data.qpos[:] ",[101,114579,157],{"class":107},[101,114581,38862],{"class":160},[101,114583,114584],{"class":111},".np_random.uniform(",[101,114586,113742],{"class":5204},[101,114588,113745],{"class":107},[101,114590,86199],{"class":160},[101,114592,12423],{"class":111},[101,114594,113752],{"class":5204},[101,114596,157],{"class":107},[101,114598,86199],{"class":160},[101,114600,12423],{"class":111},[101,114602,31485],{"class":5204},[101,114604,157],{"class":107},[101,114606,30812],{"class":160},[101,114608,114609],{"class":111},".model.nq)\n",[101,114611,114612,114614,114617,114619],{"class":103,"line":16684},[101,114613,30834],{"class":160},[101,114615,114616],{"class":111},".data.qvel[:] ",[101,114618,157],{"class":107},[101,114620,104741],{"class":160},[101,114622,114623,114626,114628,114630,114632],{"class":103,"line":16690},[101,114624,114625],{"class":111},"        mujoco.mj_forward(",[101,114627,30812],{"class":160},[101,114629,114561],{"class":111},[101,114631,30812],{"class":160},[101,114633,114566],{"class":111},[101,114635,114636],{"class":103,"line":16701},[101,114637,2387],{"emptyLinePlaceholder":27},[101,114639,114640,114642,114644,114646],{"class":103,"line":16724},[101,114641,30834],{"class":160},[101,114643,113686],{"class":111},[101,114645,157],{"class":107},[101,114647,47322],{"class":160},[101,114649,114650,114652,114654],{"class":103,"line":16746},[101,114651,14740],{"class":107},[101,114653,38862],{"class":160},[101,114655,114656],{"class":111},"._get_obs(), {}\n",[101,114658,114659],{"class":103,"line":16751},[101,114660,2387],{"emptyLinePlaceholder":27},[101,114662,114663,114665,114668],{"class":103,"line":16757},[101,114664,30790],{"class":107},[101,114666,114667],{"class":1950}," step",[101,114669,114670],{"class":111},"(self, action):\n",[101,114672,114673,114675,114677,114680,114682,114684],{"class":103,"line":16771},[101,114674,110202],{"class":111},[101,114676,157],{"class":107},[101,114678,114679],{"class":111}," np.asarray(action, ",[101,114681,93480],{"class":5204},[101,114683,157],{"class":107},[101,114685,113776],{"class":111},[101,114687,114688,114690,114692,114694,114696,114699,114701],{"class":103,"line":16784},[101,114689,110202],{"class":111},[101,114691,157],{"class":107},[101,114693,107427],{"class":111},[101,114695,30812],{"class":160},[101,114697,114698],{"class":111},".action_space.low, ",[101,114700,30812],{"class":160},[101,114702,114703],{"class":111},".action_space.high)\n",[101,114705,114706],{"class":103,"line":16789},[101,114707,2387],{"emptyLinePlaceholder":27},[101,114709,114710,114712,114715,114717],{"class":103,"line":16803},[101,114711,30834],{"class":160},[101,114713,114714],{"class":111},".data.ctrl[:] ",[101,114716,157],{"class":107},[101,114718,107450],{"class":111},[101,114720,114721,114723,114725,114727,114729,114731,114733],{"class":103,"line":16808},[101,114722,3390],{"class":107},[101,114724,101481],{"class":111},[101,114726,26032],{"class":107},[101,114728,32432],{"class":160},[101,114730,112],{"class":111},[101,114732,30812],{"class":160},[101,114734,114735],{"class":111},".frame_skip):\n",[101,114737,114738,114741,114743,114745,114747],{"class":103,"line":16814},[101,114739,114740],{"class":111},"            mujoco.mj_step(",[101,114742,30812],{"class":160},[101,114744,114561],{"class":111},[101,114746,30812],{"class":160},[101,114748,114566],{"class":111},[101,114750,114751],{"class":103,"line":16819},[101,114752,2387],{"emptyLinePlaceholder":27},[101,114754,114755,114757,114759,114761],{"class":103,"line":16833},[101,114756,30834],{"class":160},[101,114758,113686],{"class":111},[101,114760,9465],{"class":107},[101,114762,55688],{"class":160},[101,114764,114765],{"class":103,"line":16838},[101,114766,2387],{"emptyLinePlaceholder":27},[101,114768,114769,114771,114773,114775],{"class":103,"line":16843},[101,114770,110162],{"class":111},[101,114772,157],{"class":107},[101,114774,38862],{"class":160},[101,114776,114777],{"class":111},"._get_obs()\n",[101,114779,114780,114782,114784,114786],{"class":103,"line":16857},[101,114781,110267],{"class":111},[101,114783,157],{"class":107},[101,114785,38862],{"class":160},[101,114787,114788],{"class":111},"._get_reward()\n",[101,114790,114791],{"class":103,"line":16869},[101,114792,2387],{"emptyLinePlaceholder":27},[101,114794,114795,114797,114799,114801,114803,114805],{"class":103,"line":16874},[101,114796,112117],{"class":111},[101,114798,157],{"class":107},[101,114800,38862],{"class":160},[101,114802,114350],{"class":111},[101,114804,30812],{"class":160},[101,114806,114428],{"class":111},[101,114808,114809,114811,114813,114815,114817,114819],{"class":103,"line":16887},[101,114810,112130],{"class":111},[101,114812,157],{"class":107},[101,114814,38862],{"class":160},[101,114816,114350],{"class":111},[101,114818,30812],{"class":160},[101,114820,114443],{"class":111},[101,114822,114823,114825,114827,114829,114832,114834],{"class":103,"line":16892},[101,114824,114448],{"class":111},[101,114826,157],{"class":107},[101,114828,109777],{"class":160},[101,114830,114831],{"class":111},"(np.linalg.norm(tip ",[101,114833,643],{"class":107},[101,114835,114836],{"class":111}," target))\n",[101,114838,114839],{"class":103,"line":16897},[101,114840,2387],{"emptyLinePlaceholder":27},[101,114842,114843,114846,114848,114850,114852],{"class":103,"line":16902},[101,114844,114845],{"class":111},"        terminated ",[101,114847,157],{"class":107},[101,114849,113669],{"class":111},[101,114851,1021],{"class":107},[101,114853,113674],{"class":160},[101,114855,114856,114859,114861,114863,114865,114867,114869],{"class":103,"line":16915},[101,114857,114858],{"class":111},"        truncated ",[101,114860,157],{"class":107},[101,114862,38862],{"class":160},[101,114864,113686],{"class":111},[101,114866,1697],{"class":107},[101,114868,38862],{"class":160},[101,114870,113693],{"class":111},[101,114872,114873,114876,114878,114880,114883],{"class":103,"line":16920},[101,114874,114875],{"class":111},"        info ",[101,114877,157],{"class":107},[101,114879,4435],{"class":111},[101,114881,114882],{"class":216},"\"distance\"",[101,114884,114885],{"class":111},": dist}\n",[101,114887,114888,114890],{"class":103,"line":32622},[101,114889,14740],{"class":107},[101,114891,114892],{"class":111}," obs, reward, terminated, truncated, info\n",[101,114894,114895],{"class":103,"line":32628},[101,114896,2387],{"emptyLinePlaceholder":27},[101,114898,114899],{"class":103,"line":32634},[101,114900,2387],{"emptyLinePlaceholder":27},[101,114902,114903,114905,114907,114909,114911],{"class":103,"line":32640},[101,114904,31936],{"class":107},[101,114906,1960],{"class":1950},[101,114908,101378],{"class":111},[101,114910,95666],{"class":160},[101,114912,3726],{"class":111},[101,114914,114915,114918,114920],{"class":103,"line":32646},[101,114916,114917],{"class":111},"    env ",[101,114919,157],{"class":107},[101,114921,114922],{"class":111}," ReacherEnv()\n",[101,114924,114925,114928,114930,114933,114935,114937,114939],{"class":103,"line":32657},[101,114926,114927],{"class":111},"    obs, info ",[101,114929,157],{"class":107},[101,114931,114932],{"class":111}," env.reset(",[101,114934,114546],{"class":5204},[101,114936,157],{"class":107},[101,114938,303],{"class":160},[101,114940,118],{"class":111},[101,114942,114943,114945,114947,114950],{"class":103,"line":32663},[101,114944,31288],{"class":160},[101,114946,112],{"class":111},[101,114948,114949],{"class":216},"\"initial obs shape:\"",[101,114951,114952],{"class":111},", obs.shape)\n",[101,114954,114955,114957,114959,114962],{"class":103,"line":32683},[101,114956,31288],{"class":160},[101,114958,112],{"class":111},[101,114960,114961],{"class":216},"\"initial info:\"",[101,114963,114964],{"class":111},", info)\n",[101,114966,114967],{"class":103,"line":32689},[101,114968,2387],{"emptyLinePlaceholder":27},[101,114970,114971,114973,114975],{"class":103,"line":32700},[101,114972,110133],{"class":111},[101,114974,157],{"class":107},[101,114976,104741],{"class":160},[101,114978,114979,114981,114983,114985,114987,114989,114991],{"class":103,"line":32706},[101,114980,3188],{"class":107},[101,114982,31605],{"class":111},[101,114984,26032],{"class":107},[101,114986,32432],{"class":160},[101,114988,112],{"class":111},[101,114990,811],{"class":160},[101,114992,30775],{"class":111},[101,114994,114995,114997,114999],{"class":103,"line":32712},[101,114996,110202],{"class":111},[101,114998,157],{"class":107},[101,115000,115001],{"class":111}," env.action_space.sample()\n",[101,115003,115004,115007,115009],{"class":103,"line":32718},[101,115005,115006],{"class":111},"        obs, reward, terminated, truncated, info ",[101,115008,157],{"class":107},[101,115010,113395],{"class":111},[101,115012,115013,115015,115017],{"class":103,"line":32724},[101,115014,110277],{"class":111},[101,115016,9465],{"class":107},[101,115018,110282],{"class":111},[101,115020,115021,115023,115025,115027,115029,115032,115034,115036,115039,115041,115043,115046,115048,115050,115053,115055,115057,115059],{"class":103,"line":32730},[101,115022,32440],{"class":160},[101,115024,112],{"class":111},[101,115026,110311],{"class":216},[101,115028,110314],{"class":111},[101,115030,115031],{"class":216},"\"reward:\"",[101,115033,12423],{"class":111},[101,115035,32007],{"class":160},[101,115037,115038],{"class":111},"(reward, ",[101,115040,183],{"class":160},[101,115042,110325],{"class":111},[101,115044,115045],{"class":216},"\"distance:\"",[101,115047,12423],{"class":111},[101,115049,32007],{"class":160},[101,115051,115052],{"class":111},"(info[",[101,115054,114882],{"class":216},[101,115056,112182],{"class":111},[101,115058,183],{"class":160},[101,115060,30486],{"class":111},[101,115062,115063,115065,115068,115071],{"class":103,"line":32736},[101,115064,2484],{"class":107},[101,115066,115067],{"class":111}," terminated ",[101,115069,115070],{"class":107},"or",[101,115072,115073],{"class":111}," truncated:\n",[101,115075,115076],{"class":103,"line":32742},[101,115077,115078],{"class":107},"            break\n",[101,115080,115081],{"class":103,"line":32762},[101,115082,2387],{"emptyLinePlaceholder":27},[101,115084,115085,115087,115089,115091,115093,115095,115097,115099],{"class":103,"line":32768},[101,115086,31288],{"class":160},[101,115088,112],{"class":111},[101,115090,110356],{"class":216},[101,115092,12423],{"class":111},[101,115094,32007],{"class":160},[101,115096,110363],{"class":111},[101,115098,183],{"class":160},[101,115100,30486],{"class":111},[101,115102,115103],{"class":103,"line":32784},[101,115104,2387],{"emptyLinePlaceholder":27},[101,115106,115107],{"class":103,"line":32790},[101,115108,2387],{"emptyLinePlaceholder":27},[101,115110,115111,115113,115115,115117,115119],{"class":103,"line":32804},[101,115112,1518],{"class":107},[101,115114,31209],{"class":160},[101,115116,101539],{"class":107},[101,115118,101542],{"class":216},[101,115120,3726],{"class":111},[101,115122,115123],{"class":103,"line":32810},[101,115124,101549],{"class":111},[10,115126,103550],{},[92,115128,115130],{"className":23811,"code":115129,"language":23813,"meta":20,"style":20},"touch ch8_gym_env.py\n",[98,115131,115132],{"__ignoreMap":20},[101,115133,115134,115136],{"class":103,"line":104},[101,115135,101263],{"class":1950},[101,115137,115138],{"class":216}," ch8_gym_env.py\n",[10,115140,110424],{},[92,115142,115144],{"className":23811,"code":115143,"language":23813,"meta":20,"style":20},"python ch8_gym_env.py\n",[98,115145,115146],{"__ignoreMap":20},[101,115147,115148,115150],{"class":103,"line":104},[101,115149,30369],{"class":1950},[101,115151,115138],{"class":216},[72,115153,101552],{"id":101552},[10,115155,115156],{},"继承 Gymnasium 环境：",[92,115158,115160],{"className":30367,"code":115159,"language":30369,"meta":20,"style":20},"class ReacherEnv(gym.Env):\n",[98,115161,115162],{"__ignoreMap":20},[101,115163,115164,115166,115168,115170,115172,115174,115176],{"class":103,"line":104},[101,115165,14682],{"class":107},[101,115167,114037],{"class":1950},[101,115169,112],{"class":111},[101,115171,113520],{"class":1950},[101,115173,669],{"class":111},[101,115175,114046],{"class":1950},[101,115177,30775],{"class":111},[10,115179,115180],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[10,115182,115183],{},"初始化模型：",[92,115185,115187],{"className":30367,"code":115186,"language":30369,"meta":20,"style":20},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[98,115188,115189,115203],{"__ignoreMap":20},[101,115190,115191,115193,115195,115197,115199,115201],{"class":103,"line":104},[101,115192,30812],{"class":160},[101,115194,114097],{"class":111},[101,115196,157],{"class":107},[101,115198,101392],{"class":111},[101,115200,101294],{"class":160},[101,115202,118],{"class":111},[101,115204,115205,115207,115209,115211,115213,115215],{"class":103,"line":21},[101,115206,30812],{"class":160},[101,115208,114112],{"class":111},[101,115210,157],{"class":107},[101,115212,114117],{"class":111},[101,115214,30812],{"class":160},[101,115216,114122],{"class":111},[10,115218,115219,115220,115222],{},"这和前面章节一样，只是现在放到了类的 ",[98,115221,30818],{}," 里。",[10,115224,115225],{},"缓存 site ID：",[92,115227,115229],{"className":30367,"code":115228,"language":30369,"meta":20,"style":20},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[98,115230,115231,115245],{"__ignoreMap":20},[101,115232,115233,115235,115237,115239,115241,115243],{"class":103,"line":104},[101,115234,30812],{"class":160},[101,115236,114133],{"class":111},[101,115238,157],{"class":107},[101,115240,114138],{"class":111},[101,115242,89543],{"class":160},[101,115244,118],{"class":111},[101,115246,115247,115249,115251,115253,115255,115257],{"class":103,"line":21},[101,115248,30812],{"class":160},[101,115250,114154],{"class":111},[101,115252,157],{"class":107},[101,115254,114138],{"class":111},[101,115256,89543],{"class":160},[101,115258,118],{"class":111},[10,115260,115261],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[10,115263,115264],{},"reset：",[92,115266,115268],{"className":30367,"code":115267,"language":30369,"meta":20,"style":20},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[98,115269,115270],{"__ignoreMap":20},[101,115271,115272,115274,115276,115278,115280,115282,115284,115286,115288,115290,115292,115294,115296,115298,115300,115302,115304],{"class":103,"line":104},[101,115273,31936],{"class":107},[101,115275,114502],{"class":1950},[101,115277,114505],{"class":111},[101,115279,566],{"class":107},[101,115281,114510],{"class":111},[101,115283,115],{"class":160},[101,115285,25098],{"class":107},[101,115287,38922],{"class":160},[101,115289,13552],{"class":107},[101,115291,38922],{"class":160},[101,115293,114523],{"class":111},[101,115295,114526],{"class":160},[101,115297,25098],{"class":107},[101,115299,38922],{"class":160},[101,115301,13552],{"class":107},[101,115303,38922],{"class":160},[101,115305,30775],{"class":111},[10,115307,115308,115310],{},[98,115309,70045],{}," 做四件事：",[55,115312,115313,115316,115319,115322],{},[58,115314,115315],{},"设置随机种子。",[58,115317,115318],{},"重置 MuJoCo data。",[58,115320,115321],{},"随机初始化关节角。",[58,115323,115324],{},"返回初始观测和 info。",[10,115326,115327],{},"step：",[92,115329,115331],{"className":30367,"code":115330,"language":30369,"meta":20,"style":20},"def step(self, action):\n",[98,115332,115333],{"__ignoreMap":20},[101,115334,115335,115337,115339],{"class":103,"line":104},[101,115336,31936],{"class":107},[101,115338,114667],{"class":1950},[101,115340,114670],{"class":111},[10,115342,115343,115345],{},[98,115344,107114],{}," 做六件事：",[55,115347,115348,115351,115357,115360,115363,115366],{},[58,115349,115350],{},"检查并裁剪 action。",[58,115352,115353,115354,28374],{},"写入 ",[98,115355,115356],{},"self.data.ctrl",[58,115358,115359],{},"连续推进若干个 MuJoCo 物理步。",[58,115361,115362],{},"计算新观测。",[58,115364,115365],{},"计算奖励和结束条件。",[58,115367,115368],{},"返回 Gymnasium 标准五元组。",[72,115370,101688],{"id":101688},[92,115372,115374],{"className":30367,"code":115373,"language":30369,"meta":20,"style":20},"import gymnasium as gym\n",[98,115375,115376],{"__ignoreMap":20},[101,115377,115378,115380,115382,115384],{"class":103,"line":104},[101,115379,30381],{"class":107},[101,115381,113875],{"class":111},[101,115383,31372],{"class":107},[101,115385,113880],{"class":111},[10,115387,115388,115389,115391,115392,115395],{},"导入 Gymnasium，并起别名 ",[98,115390,113520],{},"。后面写 ",[98,115393,115394],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[92,115397,115399],{"className":30367,"code":115398,"language":30369,"meta":20,"style":20},"from gymnasium import spaces\n",[98,115400,115401],{"__ignoreMap":20},[101,115402,115403,115405,115407,115409],{"class":103,"line":104},[101,115404,30726],{"class":107},[101,115406,113875],{"class":111},[101,115408,30381],{"class":107},[101,115410,113907],{"class":111},[10,115412,115413,115414,115417],{},"导入空间定义工具。",[98,115415,115416],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[92,115419,115420],{"className":30367,"code":115159,"language":30369,"meta":20,"style":20},[98,115421,115422],{"__ignoreMap":20},[101,115423,115424,115426,115428,115430,115432,115434,115436],{"class":103,"line":104},[101,115425,14682],{"class":107},[101,115427,114037],{"class":1950},[101,115429,112],{"class":111},[101,115431,113520],{"class":1950},[101,115433,669],{"class":111},[101,115435,114046],{"class":1950},[101,115437,30775],{"class":111},[10,115439,115440,115441,115444,115445,115447,115448,100998,115450,115452],{},"定义一个类，名字叫 ",[98,115442,115443],{},"ReacherEnv","。括号里的 ",[98,115446,115394],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[98,115449,70045],{},[98,115451,107114],{}," 这两个核心方法。",[92,115454,115456],{"className":30367,"code":115455,"language":30369,"meta":20,"style":20},"metadata = {\"render_modes\": []}\n",[98,115457,115458],{"__ignoreMap":20},[101,115459,115460,115463,115465,115467,115469],{"class":103,"line":104},[101,115461,115462],{"class":111},"metadata ",[101,115464,157],{"class":107},[101,115466,4435],{"class":111},[101,115468,114060],{"class":216},[101,115470,114063],{"class":111},[10,115472,115473],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[92,115475,115477],{"className":30367,"code":115476,"language":30369,"meta":20,"style":20},"def __init__(self) -> None:\n",[98,115478,115479],{"__ignoreMap":20},[101,115480,115481,115483,115485,115487,115489],{"class":103,"line":104},[101,115482,31936],{"class":107},[101,115484,30793],{"class":160},[101,115486,114076],{"class":111},[101,115488,95666],{"class":160},[101,115490,3726],{"class":111},[10,115492,115493,115495,115496,28374],{},[98,115494,30818],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[98,115497,115498],{},"env = ReacherEnv()",[92,115500,115502],{"className":30367,"code":115501,"language":30369,"meta":20,"style":20},"super().__init__()\n",[98,115503,115504],{"__ignoreMap":20},[101,115505,115506,115509,115511,115513],{"class":103,"line":104},[101,115507,115508],{"class":160},"super",[101,115510,17249],{"class":111},[101,115512,30818],{"class":160},[101,115514,1963],{"class":111},[10,115516,115517,115518,115520],{},"调用父类 ",[98,115519,115394],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[92,115522,115523],{"className":30367,"code":115186,"language":30369,"meta":20,"style":20},[98,115524,115525,115539],{"__ignoreMap":20},[101,115526,115527,115529,115531,115533,115535,115537],{"class":103,"line":104},[101,115528,30812],{"class":160},[101,115530,114097],{"class":111},[101,115532,157],{"class":107},[101,115534,101392],{"class":111},[101,115536,101294],{"class":160},[101,115538,118],{"class":111},[101,115540,115541,115543,115545,115547,115549,115551],{"class":103,"line":21},[101,115542,30812],{"class":160},[101,115544,114112],{"class":111},[101,115546,157],{"class":107},[101,115548,114117],{"class":111},[101,115550,30812],{"class":160},[101,115552,114122],{"class":111},[10,115554,115555,115556,115558,115559,100998,115562,115565],{},"把 MuJoCo 模型和状态保存到 ",[98,115557,30812],{}," 上。",[98,115560,115561],{},"self.model",[98,115563,115564],{},"self.data"," 表示这个环境对象自己的模型和状态。",[92,115567,115568],{"className":30367,"code":115228,"language":30369,"meta":20,"style":20},[98,115569,115570,115584],{"__ignoreMap":20},[101,115571,115572,115574,115576,115578,115580,115582],{"class":103,"line":104},[101,115573,30812],{"class":160},[101,115575,114133],{"class":111},[101,115577,157],{"class":107},[101,115579,114138],{"class":111},[101,115581,89543],{"class":160},[101,115583,118],{"class":111},[101,115585,115586,115588,115590,115592,115594,115596],{"class":103,"line":21},[101,115587,30812],{"class":160},[101,115589,114154],{"class":111},[101,115591,157],{"class":107},[101,115593,114138],{"class":111},[101,115595,89543],{"class":160},[101,115597,118],{"class":111},[10,115599,115600,115601,100998,115604,115607],{},"提前查好 tip 和 target 的 site ID。这样 ",[98,115602,115603],{},"_get_obs",[98,115605,115606],{},"_get_reward"," 里就不用每次按名字查找。",[92,115609,115611],{"className":30367,"code":115610,"language":30369,"meta":20,"style":20},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[98,115612,115613,115623,115633],{"__ignoreMap":20},[101,115614,115615,115617,115619,115621],{"class":103,"line":104},[101,115616,30812],{"class":160},[101,115618,113847],{"class":111},[101,115620,157],{"class":107},[101,115622,54416],{"class":160},[101,115624,115625,115627,115629,115631],{"class":103,"line":21},[101,115626,30812],{"class":160},[101,115628,114226],{"class":111},[101,115630,157],{"class":107},[101,115632,114231],{"class":160},[101,115634,115635,115637,115639,115641],{"class":103,"line":1166},[101,115636,30812],{"class":160},[101,115638,113686],{"class":111},[101,115640,157],{"class":107},[101,115642,47322],{"class":160},[10,115644,115645,115648,115649,115652,115653,115656],{},[98,115646,115647],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[98,115650,115651],{},"max_steps"," 是一个 episode 最多运行多少步。",[98,115654,115655],{},"steps"," 记录当前 episode 已经走了多少步。",[92,115658,115659],{"className":30367,"code":113725,"language":30369,"meta":20,"style":20},[98,115660,115661],{"__ignoreMap":20},[101,115662,115663,115665,115667,115669,115671,115673,115675,115677,115679,115681,115683,115685,115687,115689,115691,115693,115695,115697,115699,115701],{"class":103,"line":104},[101,115664,30812],{"class":160},[101,115666,113734],{"class":111},[101,115668,157],{"class":107},[101,115670,113739],{"class":111},[101,115672,113742],{"class":5204},[101,115674,113745],{"class":107},[101,115676,102383],{"class":160},[101,115678,12423],{"class":111},[101,115680,113752],{"class":5204},[101,115682,157],{"class":107},[101,115684,102383],{"class":160},[101,115686,12423],{"class":111},[101,115688,95943],{"class":5204},[101,115690,157],{"class":107},[101,115692,112],{"class":111},[101,115694,189],{"class":160},[101,115696,113769],{"class":111},[101,115698,93480],{"class":5204},[101,115700,157],{"class":107},[101,115702,113776],{"class":111},[10,115704,115705,115706,115709,115710,100998,115713,115716],{},"定义动作空间。",[98,115707,115708],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[98,115711,115712],{},"low=-1.0",[98,115714,115715],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[92,115718,115719],{"className":30367,"code":113786,"language":30369,"meta":20,"style":20},[98,115720,115721],{"__ignoreMap":20},[101,115722,115723,115725,115727,115729,115731,115733,115735,115737,115739,115741,115743,115745,115747,115749,115751,115753,115755,115757],{"class":103,"line":104},[101,115724,30812],{"class":160},[101,115726,113795],{"class":111},[101,115728,157],{"class":107},[101,115730,113739],{"class":111},[101,115732,113742],{"class":5204},[101,115734,113745],{"class":107},[101,115736,113806],{"class":111},[101,115738,113752],{"class":5204},[101,115740,157],{"class":107},[101,115742,113806],{"class":111},[101,115744,95943],{"class":5204},[101,115746,157],{"class":107},[101,115748,112],{"class":111},[101,115750,557],{"class":160},[101,115752,113769],{"class":111},[101,115754,93480],{"class":5204},[101,115756,157],{"class":107},[101,115758,113776],{"class":111},[10,115760,115761,115762,115765,115766,115769],{},"定义观测空间。",[98,115763,115764],{},"shape=(10,)"," 表示观测是 10 个数。",[98,115767,115768],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[92,115771,115773],{"className":30367,"code":115772,"language":30369,"meta":20,"style":20},"def _get_obs(self) -> np.ndarray:\n",[98,115774,115775],{"__ignoreMap":20},[101,115776,115777,115779,115781],{"class":103,"line":104},[101,115778,31936],{"class":107},[101,115780,114336],{"class":1950},[101,115782,114339],{"class":111},[10,115784,115785,115786,115788],{},"定义内部函数，用来生成观测。函数名前面的 ",[98,115787,1103],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[92,115790,115792],{"className":30367,"code":115791,"language":30369,"meta":20,"style":20},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[98,115793,115794,115808],{"__ignoreMap":20},[101,115795,115796,115798,115800,115802,115804,115806],{"class":103,"line":104},[101,115797,111548],{"class":111},[101,115799,157],{"class":107},[101,115801,38862],{"class":160},[101,115803,114350],{"class":111},[101,115805,30812],{"class":160},[101,115807,114355],{"class":111},[101,115809,115810,115812,115814,115816,115818,115820],{"class":103,"line":21},[101,115811,111558],{"class":111},[101,115813,157],{"class":107},[101,115815,38862],{"class":160},[101,115817,114350],{"class":111},[101,115819,30812],{"class":160},[101,115821,114370],{"class":111},[10,115823,115824],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[92,115826,115828],{"className":30367,"code":115827,"language":30369,"meta":20,"style":20},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[98,115829,115830,115846],{"__ignoreMap":20},[101,115831,115832,115834,115836,115838,115840,115842,115844],{"class":103,"line":104},[101,115833,110834],{"class":111},[101,115835,157],{"class":107},[101,115837,114379],{"class":111},[101,115839,30812],{"class":160},[101,115841,114384],{"class":111},[101,115843,30812],{"class":160},[101,115845,114389],{"class":111},[101,115847,115848,115850],{"class":103,"line":21},[101,115849,17034],{"class":107},[101,115851,114396],{"class":111},[10,115853,115854,115855,115858,115859,115861],{},"拼接观测，并转换成 ",[98,115856,115857],{},"float32","。很多强化学习库默认使用 ",[98,115860,115857],{},"，所以这里主动转换。",[92,115863,115864],{"className":30367,"code":115267,"language":30369,"meta":20,"style":20},[98,115865,115866],{"__ignoreMap":20},[101,115867,115868,115870,115872,115874,115876,115878,115880,115882,115884,115886,115888,115890,115892,115894,115896,115898,115900],{"class":103,"line":104},[101,115869,31936],{"class":107},[101,115871,114502],{"class":1950},[101,115873,114505],{"class":111},[101,115875,566],{"class":107},[101,115877,114510],{"class":111},[101,115879,115],{"class":160},[101,115881,25098],{"class":107},[101,115883,38922],{"class":160},[101,115885,13552],{"class":107},[101,115887,38922],{"class":160},[101,115889,114523],{"class":111},[101,115891,114526],{"class":160},[101,115893,25098],{"class":107},[101,115895,38922],{"class":160},[101,115897,13552],{"class":107},[101,115899,38922],{"class":160},[101,115901,30775],{"class":111},[10,115903,115904,115905,115907,115908,115911],{},"定义 reset。",[98,115906,114546],{}," 用来控制随机数，保证实验可以复现。",[98,115909,115910],{},"options"," 用来接收额外配置，本章暂时不用。",[92,115913,115915],{"className":30367,"code":115914,"language":30369,"meta":20,"style":20},"super().reset(seed=seed)\n",[98,115916,115917],{"__ignoreMap":20},[101,115918,115919,115921,115923,115925,115927],{"class":103,"line":104},[101,115920,115508],{"class":160},[101,115922,114543],{"class":111},[101,115924,114546],{"class":5204},[101,115926,157],{"class":107},[101,115928,114551],{"class":111},[10,115930,115931,115932,115935],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[98,115933,115934],{},"self.np_random"," 生成可复现的随机数。",[92,115937,115939],{"className":30367,"code":115938,"language":30369,"meta":20,"style":20},"mujoco.mj_resetData(self.model, self.data)\n",[98,115940,115941],{"__ignoreMap":20},[101,115942,115943,115946,115948,115950,115952],{"class":103,"line":104},[101,115944,115945],{"class":111},"mujoco.mj_resetData(",[101,115947,30812],{"class":160},[101,115949,114561],{"class":111},[101,115951,30812],{"class":160},[101,115953,114566],{"class":111},[10,115955,115956],{},"把 MuJoCo 状态重置到默认状态。",[92,115958,115960],{"className":30367,"code":115959,"language":30369,"meta":20,"style":20},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[98,115961,115962],{"__ignoreMap":20},[101,115963,115964,115966,115968,115970,115972,115974,115976,115978,115980,115982,115984,115986,115988,115990,115992,115994,115996],{"class":103,"line":104},[101,115965,30812],{"class":160},[101,115967,114577],{"class":111},[101,115969,157],{"class":107},[101,115971,38862],{"class":160},[101,115973,114584],{"class":111},[101,115975,113742],{"class":5204},[101,115977,113745],{"class":107},[101,115979,86199],{"class":160},[101,115981,12423],{"class":111},[101,115983,113752],{"class":5204},[101,115985,157],{"class":107},[101,115987,86199],{"class":160},[101,115989,12423],{"class":111},[101,115991,31485],{"class":5204},[101,115993,157],{"class":107},[101,115995,30812],{"class":160},[101,115997,114609],{"class":111},[10,115999,115321,116000,116003,116004,116007,116008,116010],{},[98,116001,116002],{},"[:]"," 表示修改整个数组。",[98,116005,116006],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[98,116009,102130],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[92,116012,116014],{"className":30367,"code":116013,"language":30369,"meta":20,"style":20},"self.data.qvel[:] = 0.0\n",[98,116015,116016],{"__ignoreMap":20},[101,116017,116018,116020,116022,116024],{"class":103,"line":104},[101,116019,30812],{"class":160},[101,116021,114616],{"class":111},[101,116023,157],{"class":107},[101,116025,104741],{"class":160},[10,116027,116028],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[92,116030,116032],{"className":30367,"code":116031,"language":30369,"meta":20,"style":20},"self.steps = 0\nreturn self._get_obs(), {}\n",[98,116033,116034,116044],{"__ignoreMap":20},[101,116035,116036,116038,116040,116042],{"class":103,"line":104},[101,116037,30812],{"class":160},[101,116039,113686],{"class":111},[101,116041,157],{"class":107},[101,116043,47322],{"class":160},[101,116045,116046,116048,116050],{"class":103,"line":21},[101,116047,17034],{"class":107},[101,116049,38862],{"class":160},[101,116051,114656],{"class":111},[10,116053,116054],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[92,116056,116057],{"className":30367,"code":115330,"language":30369,"meta":20,"style":20},[98,116058,116059],{"__ignoreMap":20},[101,116060,116061,116063,116065],{"class":103,"line":104},[101,116062,31936],{"class":107},[101,116064,114667],{"class":1950},[101,116066,114670],{"class":111},[10,116068,116069],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[92,116071,116073],{"className":30367,"code":116072,"language":30369,"meta":20,"style":20},"action = np.asarray(action, dtype=np.float32)\n",[98,116074,116075],{"__ignoreMap":20},[101,116076,116077,116079,116081,116083,116085,116087],{"class":103,"line":104},[101,116078,107422],{"class":111},[101,116080,157],{"class":107},[101,116082,114679],{"class":111},[101,116084,93480],{"class":5204},[101,116086,157],{"class":107},[101,116088,113776],{"class":111},[10,116090,116091,116092,28374],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[98,116093,115857],{},[92,116095,116097],{"className":30367,"code":116096,"language":30369,"meta":20,"style":20},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[98,116098,116099],{"__ignoreMap":20},[101,116100,116101,116103,116105,116107,116109,116111,116113],{"class":103,"line":104},[101,116102,107422],{"class":111},[101,116104,157],{"class":107},[101,116106,107427],{"class":111},[101,116108,30812],{"class":160},[101,116110,114698],{"class":111},[101,116112,30812],{"class":160},[101,116114,114703],{"class":111},[10,116116,116117],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[92,116119,116121],{"className":30367,"code":116120,"language":30369,"meta":20,"style":20},"self.data.ctrl[:] = action\n",[98,116122,116123],{"__ignoreMap":20},[101,116124,116125,116127,116129,116131],{"class":103,"line":104},[101,116126,30812],{"class":160},[101,116128,114714],{"class":111},[101,116130,157],{"class":107},[101,116132,107450],{"class":111},[10,116134,116135],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[92,116137,116139],{"className":30367,"code":116138,"language":30369,"meta":20,"style":20},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[98,116140,116141,116157],{"__ignoreMap":20},[101,116142,116143,116145,116147,116149,116151,116153,116155],{"class":103,"line":104},[101,116144,3012],{"class":107},[101,116146,101481],{"class":111},[101,116148,26032],{"class":107},[101,116150,32432],{"class":160},[101,116152,112],{"class":111},[101,116154,30812],{"class":160},[101,116156,114735],{"class":111},[101,116158,116159,116162,116164,116166,116168],{"class":103,"line":21},[101,116160,116161],{"class":111},"    mujoco.mj_step(",[101,116163,30812],{"class":160},[101,116165,114561],{"class":111},[101,116167,30812],{"class":160},[101,116169,114566],{"class":111},[10,116171,116172,116173,116176,116177,116179,116180,28374],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[98,116174,116175],{},"frame_skip=5","，所以外部调用一次 ",[98,116178,113857],{},"，内部实际执行 5 次 ",[98,116181,101195],{},[92,116183,116185],{"className":30367,"code":116184,"language":30369,"meta":20,"style":20},"self.steps += 1\n",[98,116186,116187],{"__ignoreMap":20},[101,116188,116189,116191,116193,116195],{"class":103,"line":104},[101,116190,30812],{"class":160},[101,116192,113686],{"class":111},[101,116194,9465],{"class":107},[101,116196,55688],{"class":160},[10,116198,116199],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[92,116201,116203],{"className":30367,"code":116202,"language":30369,"meta":20,"style":20},"obs = self._get_obs()\nreward = self._get_reward()\n",[98,116204,116205,116215],{"__ignoreMap":20},[101,116206,116207,116209,116211,116213],{"class":103,"line":104},[101,116208,110834],{"class":111},[101,116210,157],{"class":107},[101,116212,38862],{"class":160},[101,116214,114777],{"class":111},[101,116216,116217,116219,116221,116223],{"class":103,"line":21},[101,116218,110985],{"class":111},[101,116220,157],{"class":107},[101,116222,38862],{"class":160},[101,116224,114788],{"class":111},[10,116226,116227],{},"计算新的观测和奖励。",[92,116229,116231],{"className":30367,"code":116230,"language":30369,"meta":20,"style":20},"dist = float(np.linalg.norm(tip - target))\n",[98,116232,116233],{"__ignoreMap":20},[101,116234,116235,116237,116239,116241,116243,116245],{"class":103,"line":104},[101,116236,111576],{"class":111},[101,116238,157],{"class":107},[101,116240,109777],{"class":160},[101,116242,114831],{"class":111},[101,116244,643],{"class":107},[101,116246,114836],{"class":111},[10,116248,116249],{},"计算末端到目标的距离，并转换成 Python float。",[92,116251,116252],{"className":30367,"code":113657,"language":30369,"meta":20,"style":20},[98,116253,116254,116266],{"__ignoreMap":20},[101,116255,116256,116258,116260,116262,116264],{"class":103,"line":104},[101,116257,113664],{"class":111},[101,116259,157],{"class":107},[101,116261,113669],{"class":111},[101,116263,1021],{"class":107},[101,116265,113674],{"class":160},[101,116267,116268,116270,116272,116274,116276,116278,116280],{"class":103,"line":21},[101,116269,113679],{"class":111},[101,116271,157],{"class":107},[101,116273,38862],{"class":160},[101,116275,113686],{"class":111},[101,116277,1697],{"class":107},[101,116279,38862],{"class":160},[101,116281,113693],{"class":111},[10,116283,116284],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[92,116286,116288],{"className":30367,"code":116287,"language":30369,"meta":20,"style":20},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[98,116289,116290,116303],{"__ignoreMap":20},[101,116291,116292,116295,116297,116299,116301],{"class":103,"line":104},[101,116293,116294],{"class":111},"info ",[101,116296,157],{"class":107},[101,116298,4435],{"class":111},[101,116300,114882],{"class":216},[101,116302,114885],{"class":111},[101,116304,116305,116307],{"class":103,"line":21},[101,116306,17034],{"class":107},[101,116308,114892],{"class":111},[10,116310,116311,116314],{},[98,116312,116313],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[92,116316,116318],{"className":30367,"code":116317,"language":30369,"meta":20,"style":20},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[98,116319,116320,116329],{"__ignoreMap":20},[101,116321,116322,116325,116327],{"class":103,"line":104},[101,116323,116324],{"class":111},"env ",[101,116326,157],{"class":107},[101,116328,114922],{"class":111},[101,116330,116331,116333,116335,116337,116339,116341,116343],{"class":103,"line":21},[101,116332,113380],{"class":111},[101,116334,157],{"class":107},[101,116336,114932],{"class":111},[101,116338,114546],{"class":5204},[101,116340,157],{"class":107},[101,116342,303],{"class":160},[101,116344,118],{"class":111},[10,116346,116347,116348,116351],{},"创建环境并重置。",[98,116349,116350],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[92,116353,116355],{"className":30367,"code":116354,"language":30369,"meta":20,"style":20},"action = env.action_space.sample()\n",[98,116356,116357],{"__ignoreMap":20},[101,116358,116359,116361,116363],{"class":103,"line":104},[101,116360,107422],{"class":111},[101,116362,157],{"class":107},[101,116364,115001],{"class":111},[10,116366,116367],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[43,116369,102296],{"id":102295},[10,116371,105464],{},[92,116373,116376],{"className":116374,"code":116375,"language":5175,"meta":20},[5173],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[98,116377,116375],{"__ignoreMap":20},[10,116379,116380],{},"这个环境已经具备强化学习环境的基本结构。",[10,116382,116383],{},"主函数里使用随机动作：",[92,116385,116386],{"className":30367,"code":116354,"language":30369,"meta":20,"style":20},[98,116387,116388],{"__ignoreMap":20},[101,116389,116390,116392,116394],{"class":103,"line":104},[101,116391,107422],{"class":111},[101,116393,157],{"class":107},[101,116395,115001],{"class":111},[10,116397,116398],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[43,116400,102328],{"id":102327},[55,116402,116403,116406,116412,116421,116430,116439,116445],{},[58,116404,116405],{},"运行程序。",[58,116407,116408,116409,28374],{},"确认 ",[98,116410,116411],{},"obs.shape == (10,)",[58,116413,111161,116414,116417,116418,28374],{},[98,116415,116416],{},"env.action_space","，应类似 ",[98,116419,116420],{},"Box(-1.0, 1.0, (2,), float32)",[58,116422,105565,116423,116426,116427,28374],{},[98,116424,116425],{},"self.max_steps = 10","，确认环境会更快 ",[98,116428,116429],{},"truncated=True",[58,116431,102391,116432,102394,116435,116438],{},[98,116433,116434],{},"terminated = dist \u003C 0.05",[98,116436,116437],{},"dist \u003C 0.2","，观察是否更容易结束。",[58,116440,102391,116441,116444],{},[98,116442,116443],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[58,116446,116447,116448,116450,116451,116454],{},"在 ",[98,116449,116313],{}," 里加入 ",[98,116452,116453],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[43,116456,102433],{"id":102432},[72,116458,116460],{"id":116459},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[10,116462,116463,116464,116466],{},"Gymnasium 的 ",[98,116465,107114],{}," 返回 5 个值:",[92,116468,116470],{"className":30367,"code":116469,"language":30369,"meta":20,"style":20},"obs, reward, terminated, truncated, info\n",[98,116471,116472],{"__ignoreMap":20},[101,116473,116474],{"class":103,"line":104},[101,116475,116469],{"class":111},[10,116477,116478],{},"不是旧 Gym 的 4 个值。",[72,116480,116482,116485],{"id":116481},"datactrl-action-维度错误",[98,116483,116484],{},"data.ctrl[:] = action"," 维度错误",[10,116487,102503],{},[92,116489,116491],{"className":30367,"code":116490,"language":30369,"meta":20,"style":20},"print(self.model.nu)\nprint(action.shape)\n",[98,116492,116493,116504],{"__ignoreMap":20},[101,116494,116495,116497,116499,116501],{"class":103,"line":104},[101,116496,30404],{"class":160},[101,116498,112],{"class":111},[101,116500,30812],{"class":160},[101,116502,116503],{"class":111},".model.nu)\n",[101,116505,116506,116508],{"class":103,"line":21},[101,116507,30404],{"class":160},[101,116509,116510],{"class":111},"(action.shape)\n",[10,116512,116513],{},"两者必须匹配。",[72,116515,116517],{"id":116516},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[10,116519,102442],{},[92,116521,116523],{"className":30367,"code":116522,"language":30369,"meta":20,"style":20},"mujoco.mj_forward(self.model, self.data)\n",[98,116524,116525],{"__ignoreMap":20},[101,116526,116527,116530,116532,116534,116536],{"class":103,"line":104},[101,116528,116529],{"class":111},"mujoco.mj_forward(",[101,116531,30812],{"class":160},[101,116533,114561],{"class":111},[101,116535,30812],{"class":160},[101,116537,114566],{"class":111},[72,116539,116541,116543],{"id":116540},"observation_space-维度和-obs-不一致",[98,116542,113580],{}," 维度和 obs 不一致",[10,116545,102555],{},[92,116547,116549],{"className":30367,"code":116548,"language":30369,"meta":20,"style":20},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[98,116550,116551,116561,116568],{"__ignoreMap":20},[101,116552,116553,116555,116557,116559],{"class":103,"line":104},[101,116554,110834],{"class":111},[101,116556,157],{"class":107},[101,116558,38862],{"class":160},[101,116560,114777],{"class":111},[101,116562,116563,116565],{"class":103,"line":21},[101,116564,30404],{"class":160},[101,116566,116567],{"class":111},"(obs.shape)\n",[101,116569,116570,116572,116574,116576],{"class":103,"line":1166},[101,116571,30404],{"class":160},[101,116573,112],{"class":111},[101,116575,30812],{"class":160},[101,116577,116578],{"class":111},".observation_space.shape)\n",[10,116580,116581],{},"两者必须一致。本章观测是：",[92,116583,116586],{"className":116584,"code":116585,"language":5175,"meta":20},[5173],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[98,116587,116585],{"__ignoreMap":20},[72,116589,116591],{"id":116590},"action-超过范围","action 超过范围",[10,116593,116594],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[92,116596,116597],{"className":30367,"code":116096,"language":30369,"meta":20,"style":20},[98,116598,116599],{"__ignoreMap":20},[101,116600,116601,116603,116605,116607,116609,116611,116613],{"class":103,"line":104},[101,116602,107422],{"class":111},[101,116604,157],{"class":107},[101,116606,107427],{"class":111},[101,116608,30812],{"class":160},[101,116610,114698],{"class":111},[101,116612,30812],{"class":160},[101,116614,114703],{"class":111},[10,116616,116617,116618,28374],{},"这能避免无效动作直接写入 ",[98,116619,101056],{},[72,116621,116623],{"id":116622},"忘记返回-info","忘记返回 info",[10,116625,116463,116626,100998,116628,116630],{},[98,116627,70045],{},[98,116629,107114],{}," 都会返回 info：",[92,116632,116633],{"className":30367,"code":113373,"language":30369,"meta":20,"style":20},[98,116634,116635,116643],{"__ignoreMap":20},[101,116636,116637,116639,116641],{"class":103,"line":104},[101,116638,113380],{"class":111},[101,116640,157],{"class":107},[101,116642,113385],{"class":111},[101,116644,116645,116647,116649],{"class":103,"line":21},[101,116646,113390],{"class":111},[101,116648,157],{"class":107},[101,116650,113395],{"class":111},[10,116652,116653,116654,28374],{},"即使暂时没有额外信息，也返回 ",[98,116655,32448],{},[43,116657,116659],{"id":116658},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[10,116661,116662],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[55,116664,116665,116668,116671,116674,116677,116680],{},[58,116666,116667],{},"更稳定的 reward。",[58,116669,116670],{},"合理的 episode 长度。",[58,116672,116673],{},"可重复的随机目标采样。",[58,116675,116676],{},"render 接口。",[58,116678,116679],{},"环境注册代码。",[58,116681,116682],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[10,116684,116685],{},"如果只是自己写训练循环，最小形式是：",[92,116687,116689],{"className":30367,"code":116688,"language":30369,"meta":20,"style":20},"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",[98,116690,116691,116699,116715,116719,116735,116744,116753,116763],{"__ignoreMap":20},[101,116692,116693,116695,116697],{"class":103,"line":104},[101,116694,116324],{"class":111},[101,116696,157],{"class":107},[101,116698,114922],{"class":111},[101,116700,116701,116703,116705,116707,116709,116711,116713],{"class":103,"line":21},[101,116702,113380],{"class":111},[101,116704,157],{"class":107},[101,116706,114932],{"class":111},[101,116708,114546],{"class":5204},[101,116710,157],{"class":107},[101,116712,303],{"class":160},[101,116714,118],{"class":111},[101,116716,116717],{"class":103,"line":1166},[101,116718,2387],{"emptyLinePlaceholder":27},[101,116720,116721,116723,116725,116727,116729,116731,116733],{"class":103,"line":1181},[101,116722,3012],{"class":107},[101,116724,101481],{"class":111},[101,116726,26032],{"class":107},[101,116728,32432],{"class":160},[101,116730,112],{"class":111},[101,116732,6398],{"class":160},[101,116734,30775],{"class":111},[101,116736,116737,116740,116742],{"class":103,"line":1187},[101,116738,116739],{"class":111},"    action ",[101,116741,157],{"class":107},[101,116743,115001],{"class":111},[101,116745,116746,116749,116751],{"class":103,"line":1201},[101,116747,116748],{"class":111},"    obs, reward, terminated, truncated, info ",[101,116750,157],{"class":107},[101,116752,113395],{"class":111},[101,116754,116755,116757,116759,116761],{"class":103,"line":1207},[101,116756,3088],{"class":107},[101,116758,115067],{"class":111},[101,116760,115070],{"class":107},[101,116762,115073],{"class":111},[101,116764,116765,116768,116770],{"class":103,"line":1298},[101,116766,116767],{"class":111},"        obs, info ",[101,116769,157],{"class":107},[101,116771,113385],{"class":111},[43,116773,116775],{"id":116774},"_9本章小结","9.本章小结",[10,116777,116778],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[92,116780,116783],{"className":116781,"code":116782,"language":5175,"meta":20},[5173],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[98,116784,116782],{"__ignoreMap":20},[10,116786,116787],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5114,116789,116790],{},"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":20,"searchDepth":21,"depth":21,"links":116792},[116793,116794,116795,116802,116806,116807,116808,116818,116819],{"id":100626,"depth":21,"text":100627},{"id":100749,"depth":21,"text":100750},{"id":101024,"depth":21,"text":101025,"children":116796},[116797,116799,116801],{"id":113604,"depth":1166,"text":116798},"terminated 和 truncated 的区别",{"id":113707,"depth":1166,"text":116800},"observation_space 和 action_space",{"id":113834,"depth":1166,"text":113835},{"id":101232,"depth":21,"text":101233,"children":116803},[116804,116805],{"id":101552,"depth":1166,"text":101552},{"id":101688,"depth":1166,"text":101688},{"id":102295,"depth":21,"text":102296},{"id":102327,"depth":21,"text":102328},{"id":102432,"depth":21,"text":102433,"children":116809},[116810,116811,116813,116814,116816,116817],{"id":116459,"depth":1166,"text":116460},{"id":116481,"depth":1166,"text":116812},"data.ctrl[:] = action 维度错误",{"id":116516,"depth":1166,"text":116517},{"id":116540,"depth":1166,"text":116815},"observation_space 维度和 obs 不一致",{"id":116590,"depth":1166,"text":116591},{"id":116622,"depth":1166,"text":116623},{"id":116658,"depth":21,"text":116659},{"id":116774,"depth":21,"text":116775},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113357,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116826,"title":116827,"body":116828,"description":117251,"extension":24,"meta":117252,"navigation":27,"path":117253,"seo":117254,"stem":117255,"__hash__":117256},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116829,"toc":117241},[116830,116834,116837,116840,116860,116866,116872,116882,116885,116888,116908,116911,116915,116918,116924,116927,116941,116944,116947,117021,117024,117030,117033,117056,117059,117109,117112,117118,117121,117124,117127,117146,117149,117155,117158,117161,117164,117184,117187,117190,117193,117238],[39,116831,116833],{"id":116832},"mujoco-学习","MuJoCo 学习",[10,116835,116836],{},"初版",[10,116838,116839],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[55,116841,116842,116845,116848,116857],{},[58,116843,116844],{},"MuJoCo 模型文件在描述什么。",[58,116846,116847],{},"Python 代码怎样读取和推进仿真。",[58,116849,116850,324,116852,324,116854,116856],{},[98,116851,104010],{},[98,116853,104340],{},[98,116855,104343],{}," 这些数组为什么重要。",[58,116858,116859],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[10,116861,116862,116863,116865],{},"默认环境为 Fedora 44、Python >= 3.10、",[98,116864,101007],{}," 官方 Python bindings。",[10,116867,116868,116869,116871],{},"注意：本文禁止使用 ",[98,116870,100992],{},"。所有示例均使用：",[92,116873,116874],{"className":30367,"code":101558,"language":30369,"meta":20,"style":20},[98,116875,116876],{"__ignoreMap":20},[101,116877,116878,116880],{"class":103,"line":104},[101,116879,30381],{"class":107},[101,116881,101281],{"class":111},[43,116883,116884],{"id":116884},"适合谁阅读",[10,116886,116887],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[55,116889,116890,116893,116896,116899],{},[58,116891,116892],{},"没学过 MuJoCo，只会一点 Python。",[58,116894,116895],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[58,116897,116898],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[58,116900,116901,116902,116904,116905,116907],{},"以前接触过 ",[98,116903,100992],{},"，现在想迁移到官方 ",[98,116906,101001],{}," Python bindings。",[10,116909,116910],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[43,116912,116914],{"id":116913},"mujoco-到底是什么","MuJoCo 到底是什么",[10,116916,116917],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[92,116919,116922],{"className":116920,"code":116921,"language":5175,"meta":20},[5173],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[98,116923,116921],{"__ignoreMap":20},[10,116925,116926],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[55,116928,116929,116932,116935,116938],{},[58,116930,116931],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[58,116933,116934],{},"快速测试控制算法，不必一开始就上真实机器人。",[58,116936,116937],{},"生成强化学习环境。",[58,116939,116940],{},"采集状态、动作、图像、奖励等训练数据。",[43,116942,116943],{"id":116943},"学习前的心智模型",[10,116945,116946],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[249,116948,116949,116961],{},[252,116950,116951],{},[255,116952,116953,116956,116959],{},[258,116954,116955],{"align":23725},"部分",[258,116957,116958],{"align":23725},"负责什么",[258,116960,21175],{"align":23725},[296,116962,116963,116974,116986,116998,117010],{},[255,116964,116965,116968,116971],{},[301,116966,116967],{"align":23725},"MJCF XML",[301,116969,116970],{"align":23725},"定义世界和机器人结构",[301,116972,116973],{"align":23725},"地面、盒子、关节、电机、摄像头",[255,116975,116976,116980,116983],{},[301,116977,116978],{"align":23725},[98,116979,100689],{},[301,116981,116982],{"align":23725},"编译后的静态模型",[301,116984,116985],{"align":23725},"有几个关节、有几个电机、时间步长是多少",[255,116987,116988,116992,116995],{},[301,116989,116990],{"align":23725},[98,116991,100699],{},[301,116993,116994],{"align":23725},"运行中的动态状态",[301,116996,116997],{"align":23725},"当前时间、位置、速度、电机输入",[255,116999,117000,117004,117007],{},[301,117001,117002],{"align":23725},[98,117003,101195],{},[301,117005,117006],{"align":23725},"推进一步物理仿真",[301,117008,117009],{"align":23725},"根据重力、力、碰撞更新状态",[255,117011,117012,117015,117018],{},[301,117013,117014],{"align":23725},"Viewer \u002F Renderer",[301,117016,117017],{"align":23725},"把仿真显示出来",[301,117019,117020],{"align":23725},"打开窗口或保存图片",[10,117022,117023],{},"一句话总结：",[92,117025,117028],{"className":117026,"code":117027,"language":5175,"meta":20},[5173],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[98,117029,117027],{"__ignoreMap":20},[10,117031,117032],{},"参考来源：",[1118,117034,117035,117042,117049],{},[58,117036,117037,117038],{},"MuJoCo Python 官方文档：",[14,117039,117040],{"href":117040,"rel":117041},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[18],[58,117043,117044,117045],{},"MuJoCo XML Reference：",[14,117046,117047],{"href":117047,"rel":117048},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[18],[58,117050,117051,117052],{},"MuJoCo Overview：",[14,117053,117054],{"href":117054,"rel":117055},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[18],[43,117057,117058],{"id":117058},"章节目录",[55,117060,117061,117067,117073,117079,117085,117091,117097,117103],{},[58,117062,117063],{},[14,117064,117066],{"href":117065},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[58,117068,117069],{},[14,117070,117072],{"href":117071},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[58,117074,117075],{},[14,117076,117078],{"href":117077},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[58,117080,117081],{},[14,117082,117084],{"href":117083},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[58,117086,117087],{},[14,117088,117090],{"href":117089},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[58,117092,117093],{},[14,117094,117096],{"href":117095},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[58,117098,117099],{},[14,117100,117102],{"href":117101},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[58,117104,117105],{},[14,117106,117108],{"href":117107},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[43,117110,117111],{"id":117111},"推荐学习路线",[92,117113,117116],{"className":117114,"code":117115,"language":5175,"meta":20},[5173],"环境安装\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",[98,117117,117115],{"__ignoreMap":20},[10,117119,117120],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[43,117122,117123],{"id":117123},"建议的目录结构",[10,117125,117126],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[92,117128,117130],{"className":23811,"code":117129,"language":23813,"meta":20,"style":20},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[98,117131,117132,117140],{"__ignoreMap":20},[101,117133,117134,117136,117138],{"class":103,"line":104},[101,117135,101246],{"class":1950},[101,117137,29205],{"class":160},[101,117139,101251],{"class":216},[101,117141,117142,117144],{"class":103,"line":21},[101,117143,101256],{"class":160},[101,117145,101251],{"class":216},[10,117147,117148],{},"每一章的代码都单独保存：",[92,117150,117153],{"className":117151,"code":117152,"language":5175,"meta":20},[5173],"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",[98,117154,117152],{"__ignoreMap":20},[10,117156,117157],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[43,117159,117160],{"id":117160},"学习方法",[10,117162,117163],{},"每章建议按这个顺序操作：",[55,117165,117166,117169,117172,117175,117178,117181],{},[58,117167,117168],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[58,117170,117171],{},"复制最小可运行代码，保存成指定文件。",[58,117173,117174],{},"运行代码，确认没有报错。",[58,117176,117177],{},"对照“运行结果说明”理解输出。",[58,117179,117180],{},"做“验证步骤”，主动改一两个参数。",[58,117182,117183],{},"遇到报错先看“常见错误与解决方案”。",[10,117185,117186],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[43,117188,117189],{"id":117189},"全局排错顺序",[10,117191,117192],{},"遇到问题时，按下面顺序查：",[55,117194,117195,117201,117207,117212,117215,117218,117225,117235],{},[58,117196,117197,117198],{},"Python 环境是否激活：",[98,117199,117200],{},"which python",[58,117202,117203,117204],{},"MuJoCo 是否能导入：",[98,117205,117206],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[58,117208,117209,117210],{},"是否误装了 ",[98,117211,100992],{},[58,117213,117214],{},"XML 标签是否闭合、属性是否拼写正确",[58,117216,117217],{},"actuator 引用的 joint 名字是否存在",[58,117219,117220,117222,117223],{},[98,117221,101056],{}," 的长度是否等于 ",[98,117224,102138],{},[58,117226,105565,117227,82528,117229,117231,117232],{},[98,117228,104010],{},[98,117230,104340],{}," 后是否调用了 ",[98,117233,117234],{},"mujoco.mj_forward",[58,117236,117237],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5114,117239,117240],{},"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":20,"searchDepth":21,"depth":21,"links":117242},[117243,117244,117245,117246,117247,117248,117249,117250],{"id":116884,"depth":21,"text":116884},{"id":116913,"depth":21,"text":116914},{"id":116943,"depth":21,"text":116943},{"id":117058,"depth":21,"text":117058},{"id":117111,"depth":21,"text":117111},{"id":117123,"depth":21,"text":117123},{"id":117160,"depth":21,"text":117160},{"id":117189,"depth":21,"text":117189},"仿真搭建。",{"category":23367},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116827,"description":117251},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117258,"title":117259,"body":117260,"description":23365,"extension":24,"meta":117715,"navigation":27,"path":117716,"seo":117717,"stem":117718,"__hash__":117719},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117261,"toc":117713},[117262,117265,117268,117274,117710],[39,117263,117259],{"id":117264},"_1-最常用的基本操作更新",[10,117266,117267],{},"装linux系统教程：",[10,117269,117270],{},[14,117271,117272],{"href":117272,"rel":117273},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[18],[92,117275,117279],{"className":117276,"code":117277,"language":117278,"meta":20,"style":20},"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",[98,117280,117281,117286,117291,117300,117305,117314,117319,117339,117344,117355,117360,117369,117374,117402,117407,117426,117431,117450,117454,117459,117475,117479,117484,117514,117518,117523,117539,117543,117548,117563,117567,117572,117588,117592,117597,117609,117621,117625,117630,117647,117651,117656,117674,117678,117683,117692,117696,117701],{"__ignoreMap":20},[101,117282,117283],{"class":103,"line":104},[101,117284,117285],{"class":170},"#更新相关的知识\n",[101,117287,117288],{"class":103,"line":21},[101,117289,117290],{"class":170},"# 更新软件包列表（从服务器获取最新软件信息）\n",[101,117292,117293,117295,117298],{"class":103,"line":1166},[101,117294,24565],{"class":1950},[101,117296,117297],{"class":216}," apt",[101,117299,26231],{"class":216},[101,117301,117302],{"class":103,"line":1181},[101,117303,117304],{"class":170},"# 升级所有可更新的软件包（不删除旧包）\n",[101,117306,117307,117309,117311],{"class":103,"line":1187},[101,117308,24565],{"class":1950},[101,117310,117297],{"class":216},[101,117312,117313],{"class":216}," upgrade\n",[101,117315,117316],{"class":103,"line":1201},[101,117317,117318],{"class":170},"#更新和升级软件包\n",[101,117320,117321,117323,117325,117328,117330,117332,117334,117337],{"class":103,"line":1207},[101,117322,24565],{"class":1950},[101,117324,117297],{"class":216},[101,117326,117327],{"class":216}," update",[101,117329,26179],{"class":111},[101,117331,24565],{"class":1950},[101,117333,117297],{"class":216},[101,117335,117336],{"class":216}," upgrade",[101,117338,100961],{"class":160},[101,117340,117341],{"class":103,"line":1298},[101,117342,117343],{"class":170},"#列出可更新的软件包及版本信息\n",[101,117345,117346,117349,117352],{"class":103,"line":1304},[101,117347,117348],{"class":1950},"apt",[101,117350,117351],{"class":216}," list",[101,117353,117354],{"class":160}," --upgradable\n",[101,117356,117357],{"class":103,"line":1316},[101,117358,117359],{"class":170},"#彻底升级（处理依赖关系，可能删除旧包）\n",[101,117361,117362,117364,117366],{"class":103,"line":1599},[101,117363,24565],{"class":1950},[101,117365,117297],{"class":216},[101,117367,117368],{"class":216}," full-upgrade\n",[101,117370,117371],{"class":103,"line":1604},[101,117372,117373],{"class":170},"#设置指定版本\n",[101,117375,117376,117378,117380,117382,117384,117387,117389,117391,117393,117395,117398,117400],{"class":103,"line":1610},[101,117377,24565],{"class":1950},[101,117379,117297],{"class":216},[101,117381,23823],{"class":216},[101,117383,28891],{"class":107},[101,117385,117386],{"class":216},"package_nam",[101,117388,186],{"class":111},[101,117390,1071],{"class":107},[101,117392,157],{"class":216},[101,117394,1021],{"class":107},[101,117396,117397],{"class":216},"version_numbe",[101,117399,781],{"class":111},[101,117401,51296],{"class":107},[101,117403,117404],{"class":103,"line":1615},[101,117405,117406],{"class":170},"#只安装软件包不升级\n",[101,117408,117409,117411,117413,117415,117417,117419,117421,117423],{"class":103,"line":1629},[101,117410,24565],{"class":1950},[101,117412,117297],{"class":216},[101,117414,23823],{"class":216},[101,117416,28891],{"class":107},[101,117418,117386],{"class":216},[101,117420,186],{"class":111},[101,117422,1071],{"class":107},[101,117424,117425],{"class":160}," --no-upgrade\n",[101,117427,117428],{"class":103,"line":1634},[101,117429,117430],{"class":170},"#只升级，不存在就不安装\n",[101,117432,117433,117435,117437,117439,117441,117443,117445,117447],{"class":103,"line":1640},[101,117434,24565],{"class":1950},[101,117436,117297],{"class":216},[101,117438,23823],{"class":216},[101,117440,28891],{"class":107},[101,117442,117386],{"class":216},[101,117444,186],{"class":111},[101,117446,1071],{"class":107},[101,117448,117449],{"class":160}," --only-upgrade\n",[101,117451,117452],{"class":103,"line":1661},[101,117453,2387],{"emptyLinePlaceholder":27},[101,117455,117456],{"class":103,"line":1666},[101,117457,117458],{"class":170},"#安装指定的软件命令\n",[101,117460,117461,117463,117465,117467,117469,117471,117473],{"class":103,"line":1680},[101,117462,24565],{"class":1950},[101,117464,117297],{"class":216},[101,117466,23823],{"class":216},[101,117468,28891],{"class":107},[101,117470,117386],{"class":216},[101,117472,186],{"class":111},[101,117474,51296],{"class":107},[101,117476,117477],{"class":103,"line":1685},[101,117478,2387],{"emptyLinePlaceholder":27},[101,117480,117481],{"class":103,"line":1714},[101,117482,117483],{"class":170},"#安装多个软件包\n",[101,117485,117486,117488,117490,117492,117494,117497,117500,117502,117504,117507,117509,117511],{"class":103,"line":1719},[101,117487,24565],{"class":1950},[101,117489,117297],{"class":216},[101,117491,23823],{"class":216},[101,117493,28891],{"class":107},[101,117495,117496],{"class":216},"package_",[101,117498,117499],{"class":107},"1>",[101,117501,28891],{"class":107},[101,117503,117496],{"class":216},[101,117505,117506],{"class":107},"2>",[101,117508,28891],{"class":107},[101,117510,117496],{"class":216},[101,117512,117513],{"class":107},"3>\n",[101,117515,117516],{"class":103,"line":1736},[101,117517,2387],{"emptyLinePlaceholder":27},[101,117519,117520],{"class":103,"line":1741},[101,117521,117522],{"class":170},"#更新指定的软件命令\n",[101,117524,117525,117527,117529,117531,117533,117535,117537],{"class":103,"line":1746},[101,117526,24565],{"class":1950},[101,117528,117297],{"class":216},[101,117530,117327],{"class":216},[101,117532,28891],{"class":107},[101,117534,117386],{"class":216},[101,117536,186],{"class":111},[101,117538,51296],{"class":107},[101,117540,117541],{"class":103,"line":1751},[101,117542,2387],{"emptyLinePlaceholder":27},[101,117544,117545],{"class":103,"line":1765},[101,117546,117547],{"class":170},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[101,117549,117550,117552,117555,117557,117559,117561],{"class":103,"line":1770},[101,117551,117348],{"class":1950},[101,117553,117554],{"class":216}," show",[101,117556,28891],{"class":107},[101,117558,117386],{"class":216},[101,117560,186],{"class":111},[101,117562,51296],{"class":107},[101,117564,117565],{"class":103,"line":2564},[101,117566,2387],{"emptyLinePlaceholder":27},[101,117568,117569],{"class":103,"line":2578},[101,117570,117571],{"class":170},"#删除软件包命令\n",[101,117573,117574,117576,117578,117580,117582,117584,117586],{"class":103,"line":2586},[101,117575,24565],{"class":1950},[101,117577,117297],{"class":216},[101,117579,26068],{"class":216},[101,117581,28891],{"class":107},[101,117583,117386],{"class":216},[101,117585,186],{"class":111},[101,117587,51296],{"class":107},[101,117589,117590],{"class":103,"line":2591},[101,117591,2387],{"emptyLinePlaceholder":27},[101,117593,117594],{"class":103,"line":2597},[101,117595,117596],{"class":170},"# 清理旧版本和缓存（释放磁盘空间）\n",[101,117598,117599,117601,117603,117606],{"class":103,"line":2603},[101,117600,24565],{"class":1950},[101,117602,117297],{"class":216},[101,117604,117605],{"class":216}," autoremove",[101,117607,117608],{"class":170},"  # 删除不再需要的依赖和库文件\n",[101,117610,117611,117613,117615,117618],{"class":103,"line":2608},[101,117612,24565],{"class":1950},[101,117614,117297],{"class":216},[101,117616,117617],{"class":216}," clean",[101,117619,117620],{"class":170},"       # 清理下载的缓存包\n",[101,117622,117623],{"class":103,"line":7936},[101,117624,2387],{"emptyLinePlaceholder":27},[101,117626,117627],{"class":103,"line":7960},[101,117628,117629],{"class":170},"#移除软件包及配置文件\n",[101,117631,117632,117634,117636,117639,117641,117643,117645],{"class":103,"line":7965},[101,117633,24565],{"class":1950},[101,117635,117297],{"class":216},[101,117637,117638],{"class":216}," purge",[101,117640,28891],{"class":107},[101,117642,117386],{"class":216},[101,117644,186],{"class":111},[101,117646,51296],{"class":107},[101,117648,117649],{"class":103,"line":7971},[101,117650,2387],{"emptyLinePlaceholder":27},[101,117652,117653],{"class":103,"line":7998},[101,117654,117655],{"class":170},"#查找软件包命令\n",[101,117657,117658,117660,117662,117665,117667,117670,117672],{"class":103,"line":8003},[101,117659,24565],{"class":1950},[101,117661,117297],{"class":216},[101,117663,117664],{"class":216}," search",[101,117666,28891],{"class":107},[101,117668,117669],{"class":216},"keywor",[101,117671,425],{"class":111},[101,117673,51296],{"class":107},[101,117675,117676],{"class":103,"line":8009},[101,117677,2387],{"emptyLinePlaceholder":27},[101,117679,117680],{"class":103,"line":8021},[101,117681,117682],{"class":170},"#列出所有已安装的包\n",[101,117684,117685,117687,117689],{"class":103,"line":8033},[101,117686,117348],{"class":1950},[101,117688,117351],{"class":216},[101,117690,117691],{"class":160}," --installed\n",[101,117693,117694],{"class":103,"line":8045},[101,117695,2387],{"emptyLinePlaceholder":27},[101,117697,117698],{"class":103,"line":9704},[101,117699,117700],{"class":170},"#列出所有已安装的包的版本信息\n",[101,117702,117703,117705,117707],{"class":103,"line":9729},[101,117704,117348],{"class":1950},[101,117706,117351],{"class":216},[101,117708,117709],{"class":160}," --all-versions\n",[5114,117711,117712],{},"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":20,"searchDepth":21,"depth":21,"links":117714},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117259,"description":23365},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117721,"title":117722,"body":117723,"description":23365,"extension":24,"meta":118464,"navigation":27,"path":118465,"seo":118466,"stem":118467,"__hash__":118468},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117724,"toc":118451},[117725,117728,117732,117735,117741,117745,117749,117755,117760,117765,117770,117775,117780,117783,117786,117789,117792,117796,117799,117804,117807,117812,117815,117820,117827,117830,117833,117836,117839,117842,117853,117857,117861,117866,117871,117875,117880,117884,117889,117893,117897,117902,117905,117950,117955,117959,117963,117968,117974,117979,117989,117994,118004,118009,118014,118041,118045,118048,118053,118056,118081,118085,118090,118093,118098,118103,118123,118128,118131,118146,118150,118203,118206,118211,118215,118218,118233,118236,118239,118244,118248,118252,118255,118259,118263,118266,118271,118276,118280,118287,118295,118298,118305,118310,118315,118318,118323,118330,118335,118342,118346,118348,118353,118357,118360,118363,118368,118371,118376,118379,118384,118389,118394,118398,118403,118407,118448],[39,117726,117722],{"id":117727},"_2-linux装机教程",[43,117729,117731],{"id":117730},"_21-实体机","2.1 实体机",[10,117733,117734],{},"使用清华源：（Ubuntu24.04）",[10,117736,117737],{},[14,117738,117739],{"href":117739,"rel":117740},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[18],[43,117742,117744],{"id":117743},"_22-普通虚拟机","2.2 普通虚拟机",[72,117746,117748],{"id":117747},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[10,117750,117751],{},[14,117752,117753],{"href":117753,"rel":117754},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[18],[10,117756,117757],{},[1449,117758],{"alt":20,"src":117759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[10,117761,117762],{},[1449,117763],{"alt":20,"src":117764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[10,117766,117767],{},[1449,117768],{"alt":20,"src":117769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[10,117771,117772],{},[1449,117773],{"alt":20,"src":117774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[10,117776,117777],{},[1449,117778],{"alt":20,"src":117779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[10,117781,117782],{},"内存4G（4096MB）；",[10,117784,117785],{},"CPU给4个核；",[10,117787,117788],{},"硬盘动态分配60G；",[10,117790,117791],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[72,117793,117795],{"id":117794},"_222-安装ubuntu","2.2.2 安装Ubuntu",[10,117797,117798],{},"按照1.1的步骤下载Ubuntu",[10,117800,117801],{},[1449,117802],{"alt":20,"src":117803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[10,117805,117806],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[10,117808,117809],{},[1449,117810],{"alt":20,"src":117811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[10,117813,117814],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[10,117816,117817],{},[1449,117818],{"alt":20,"src":117819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[10,117821,117822,117823,117826],{},"选择“正常安装”(找不到都用Alt+F7)， ",[261,117824,117825],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[10,117828,117829],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[10,117831,117832],{},"将改动写入磁盘吗 继续",[10,117834,117835],{},"选择东八区（shanghai，大致在地图上点一下），继续",[10,117837,117838],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[10,117840,117841],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[10,117843,117844,117845,117848,117849,117852],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[261,117846,117847],{},"除了"," 选不发送系统信息与不升级之外， ",[261,117850,117851],{},"其它"," 都跳过或前进）",[72,117854,117856],{"id":117855},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21986,117858,117860],{"id":117859},"_2231-全屏","2.2.3.1 全屏",[10,117862,117863],{},[1449,117864],{"alt":20,"src":117865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[10,117867,117868],{},[1449,117869],{"alt":20,"src":117870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[21986,117872,117874],{"id":117873},"_2232-文件交换","2.2.3.2 文件交换",[10,117876,117877],{},[1449,117878],{"alt":20,"src":117879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[21986,117881,117883],{"id":117882},"_2233-新建文本文档","2.2.3.3 新建文本文档",[10,117885,117886],{},[1449,117887],{"alt":20,"src":117888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[43,117890,117892],{"id":117891},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[72,117894,117896],{"id":117895},"_231-简介与优缺点","2.3.1 简介与优缺点",[55,117898,117899],{},[58,117900,117901],{},"什么情况下推荐？",[10,117903,117904],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[55,117906,117907],{"start":21},[58,117908,117909,117910],{},"优缺点：",[55,117911,117912,117942],{},[58,117913,117914,117915],{},"优点：",[55,117916,117917,117920,117927,117930,117933,117936,117939],{},[58,117918,117919],{},"WSL2是最好的Linux发行版;(bushi)",[58,117921,117922,117923,117926],{},"性能损耗极低。且比在Windows上跑深度性能 ",[261,117924,117925],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[58,117928,117929],{},"非常方便调用USB设备，可以USB直通;",[58,117931,117932],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[58,117934,117935],{},"非常方便Win与WSL2互相传文件等协同操作;",[58,117937,117938],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[58,117940,117941],{},"非常方便使用Windows的VScode远程开发;",[58,117943,117944,117945],{},"缺点：",[55,117946,117947],{},[58,117948,117949],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[10,117951,117952],{},[1449,117953],{"alt":20,"src":117954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[72,117956,117958],{"id":117957},"_232-安装教程","2.3.2 安装教程",[21986,117960,117962],{"id":117961},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[55,117964,117965],{},[58,117966,117967],{},"方法一(图形界面)",[10,117969,117970,117971,24607],{},"用Win+R输入",[98,117972,117973],{},"appwiz.cpl",[10,117975,117976],{},[1449,117977],{"alt":20,"src":117978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[10,117980,117981,117982,117985,117986,26462],{},"点击OK进入 ",[261,117983,117984],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[261,117987,117988],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[10,117990,117991],{},[1449,117992],{"alt":20,"src":117993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[10,117995,117996,117997,100998,118000,118003],{},"选择 ",[261,117998,117999],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[261,118001,118002],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[10,118005,118006],{},[1449,118007],{"alt":20,"src":118008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[55,118010,118011],{"start":21},[58,118012,118013],{},"方法二(命令行)",[92,118015,118019],{"className":118016,"code":118017,"language":118018,"meta":20,"style":20},"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",[98,118020,118021,118026,118031,118036],{"__ignoreMap":20},[101,118022,118023],{"class":103,"line":104},[101,118024,118025],{},"# 开启 Linux 子系统\n",[101,118027,118028],{"class":103,"line":21},[101,118029,118030],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[101,118032,118033],{"class":103,"line":1166},[101,118034,118035],{},"# 开启虚拟机平台\n",[101,118037,118038],{"class":103,"line":1181},[101,118039,118040],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21986,118042,118044],{"id":118043},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[10,118046,118047],{},"用管理员权限打开powershell",[10,118049,118050],{},[1449,118051],{"alt":20,"src":118052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[10,118054,118055],{},"升级WSL并设置默认版本为WSL2",[92,118057,118059],{"className":118016,"code":118058,"language":118018,"meta":20,"style":20},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[98,118060,118061,118066,118071,118076],{"__ignoreMap":20},[101,118062,118063],{"class":103,"line":104},[101,118064,118065],{},"# 更新 wsl\n",[101,118067,118068],{"class":103,"line":21},[101,118069,118070],{},"wsl --update\n",[101,118072,118073],{"class":103,"line":1166},[101,118074,118075],{},"# 将 wsl 版本设置为 wsl2\n",[101,118077,118078],{"class":103,"line":1181},[101,118079,118080],{},"wsl --set-default-version 2\n",[21986,118082,118084],{"id":118083},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[55,118086,118087],{},[58,118088,118089],{},"方式一(商店下载)",[10,118091,118092],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[10,118094,118095],{},[1449,118096],{"alt":20,"src":118097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[55,118099,118100],{"start":21},[58,118101,118102],{},"方式二(命令行安装)",[92,118104,118106],{"className":118016,"code":118105,"language":118018,"meta":20,"style":20},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[98,118107,118108,118113,118118],{"__ignoreMap":20},[101,118109,118110],{"class":103,"line":104},[101,118111,118112],{},"# 列出可安装的 Linux 版本\n",[101,118114,118115],{"class":103,"line":21},[101,118116,118117],{},"#（需要科学手段）\n",[101,118119,118120],{"class":103,"line":1166},[101,118121,118122],{},"wsl --list --online\n",[10,118124,118125],{},[1449,118126],{"alt":20,"src":118127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[10,118129,118130],{},"选择对应发行版并安装",[92,118132,118134],{"className":118016,"code":118133,"language":118018,"meta":20,"style":20},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[98,118135,118136,118141],{"__ignoreMap":20},[101,118137,118138],{"class":103,"line":104},[101,118139,118140],{},"# Ubuntu安装完毕后需要重启系统\n",[101,118142,118143],{"class":103,"line":21},[101,118144,118145],{},"wsl --install -d Ubuntu-24.04\n",[21986,118147,118149],{"id":118148},"_2324-查看系统状态","2.3.2.4 查看系统状态",[92,118151,118153],{"className":118016,"code":118152,"language":118018,"meta":20,"style":20},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[98,118154,118155,118160,118165,118170,118175,118179,118183,118188,118193,118198],{"__ignoreMap":20},[101,118156,118157],{"class":103,"line":104},[101,118158,118159],{},"# 查看 wsl\n",[101,118161,118162],{"class":103,"line":21},[101,118163,118164],{},"wsl -l\n",[101,118166,118167],{"class":103,"line":1166},[101,118168,118169],{},"# 查看 wsl 运行版本或模式\n",[101,118171,118172],{"class":103,"line":1181},[101,118173,118174],{},"wsl -l -v\n",[101,118176,118177],{"class":103,"line":1187},[101,118178,2387],{"emptyLinePlaceholder":27},[101,118180,118181],{"class":103,"line":1201},[101,118182,2387],{"emptyLinePlaceholder":27},[101,118184,118185],{"class":103,"line":1207},[101,118186,118187],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[101,118189,118190],{"class":103,"line":1298},[101,118191,118192],{},"wsl --set-version \u003Cdistro> 2\n",[101,118194,118195],{"class":103,"line":1304},[101,118196,118197],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[101,118199,118200],{"class":103,"line":1316},[101,118201,118202],{},"wsl --unregister \u003Cdistro>\n",[10,118204,118205],{},"输出Version为2即正常",[10,118207,118208],{},[1449,118209],{"alt":20,"src":118210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[21986,118212,118214],{"id":118213},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[10,118216,118217],{},"直接在Powershell里输入wsl命令进入子系统",[92,118219,118221],{"className":118016,"code":118220,"language":118018,"meta":20,"style":20},"# 进入子系统\nwsl\n",[98,118222,118223,118228],{"__ignoreMap":20},[101,118224,118225],{"class":103,"line":104},[101,118226,118227],{},"# 进入子系统\n",[101,118229,118230],{"class":103,"line":21},[101,118231,118232],{},"wsl\n",[10,118234,118235],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[10,118237,118238],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[10,118240,118241],{},[1449,118242],{"alt":20,"src":118243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[72,118245,118247],{"id":118246},"_233-配置各种环境","2.3.3 配置各种环境",[21986,118249,118251],{"id":118250},"_2331-换源","2.3.3.1 换源",[10,118253,118254],{},"(同实体机LINUX，往下找教程)",[21986,118256,118258],{"id":118257},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22898,118260,118262],{"id":118261},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[10,118264,118265],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[10,118267,118268],{},[1449,118269],{"alt":20,"src":118270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[10,118272,118273],{},[1449,118274],{"alt":20,"src":118275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22898,118277,118279],{"id":118278},"_23322-cuda","2.3.3.2.2 CUDA",[10,118281,118282,118283],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[14,118284,118285],{"href":118285,"rel":118286},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[18],[10,118288,118289,118292],{},[1449,118290],{"alt":20,"src":118291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1449,118293],{"alt":20,"src":118294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[10,118296,118297],{},"在下方的网站，选择合适的版本。",[10,118299,118300,118301],{},"WSL2 专属 CUDA 指南：",[14,118302,118303],{"href":118303,"rel":118304},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[18],[10,118306,118307],{},[261,118308,118309],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[10,118311,118312],{},[1449,118313],{"alt":20,"src":118314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[10,118316,118317],{},"挨行敲一遍",[10,118319,118320],{},[1449,118321],{"alt":20,"src":118322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[10,118324,118325,118326,118329],{},"敲完后，输入",[98,118327,118328],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[10,118331,118332],{},[1449,118333],{"alt":20,"src":118334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[10,118336,118337,118338,118341],{},"（请详看下方教程的",[261,118339,118340],{},"安装CUDA的配置环境来看","如何配置环境）",[22898,118343,118345],{"id":118344},"_23323-cudnn","2.3.3.2.3 cuDNN",[10,118347,118254],{},[10,118349,118350],{},[1449,118351],{"alt":20,"src":118352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[21986,118354,118356],{"id":118355},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[10,118358,118359],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[10,118361,118362],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[10,118364,118365],{},[1449,118366],{"alt":20,"src":118367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[10,118369,118370],{},"连接WSL2",[10,118372,118373],{},[1449,118374],{"alt":20,"src":118375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[10,118377,118378],{},"远程开发成功。",[10,118380,118381],{},[1449,118382],{"alt":20,"src":118383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[10,118385,118386],{},[1449,118387],{"alt":20,"src":118388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[10,118390,118391],{},[1449,118392],{"alt":20,"src":118393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[21986,118395,118397],{"id":118396},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[10,118399,118400],{},[1449,118401],{"alt":20,"src":118402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[21986,118404,118406],{"id":118405},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[92,118408,118410],{"className":117276,"code":118409,"language":117278,"meta":20,"style":20},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[98,118411,118412,118420,118428,118439,118443],{"__ignoreMap":20},[101,118413,118414,118416,118418],{"class":103,"line":104},[101,118415,24565],{"class":1950},[101,118417,117297],{"class":216},[101,118419,26231],{"class":216},[101,118421,118422,118424,118426],{"class":103,"line":21},[101,118423,24565],{"class":1950},[101,118425,117297],{"class":216},[101,118427,117313],{"class":216},[101,118429,118430,118432,118434,118436],{"class":103,"line":1166},[101,118431,24565],{"class":1950},[101,118433,117297],{"class":216},[101,118435,23823],{"class":216},[101,118437,118438],{"class":216}," mesa-utils\n",[101,118440,118441],{"class":103,"line":1181},[101,118442,2387],{"emptyLinePlaceholder":27},[101,118444,118445],{"class":103,"line":1187},[101,118446,118447],{"class":170},"#然后重启wsl2即可\n",[5114,118449,118450],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":20,"searchDepth":21,"depth":21,"links":118452},[118453,118454,118459],{"id":117730,"depth":21,"text":117731},{"id":117743,"depth":21,"text":117744,"children":118455},[118456,118457,118458],{"id":117747,"depth":1166,"text":117748},{"id":117794,"depth":1166,"text":117795},{"id":117855,"depth":1166,"text":117856},{"id":117891,"depth":21,"text":117892,"children":118460},[118461,118462,118463],{"id":117895,"depth":1166,"text":117896},{"id":117957,"depth":1166,"text":117958},{"id":118246,"depth":1166,"text":118247},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117722,"description":23365},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118470,"title":118471,"body":118472,"description":23365,"extension":24,"meta":121408,"navigation":27,"path":121409,"seo":121410,"stem":121411,"__hash__":121412},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118473,"toc":121380},[118474,118477,118481,118487,118491,118497,118501,118689,118692,118697,118701,118705,118708,118711,118717,118722,118725,118728,118733,118766,118771,118775,118852,118855,118860,118864,118867,118906,118909,118918,118936,118941,118948,119065,119070,119073,119100,119105,119109,119118,119168,119175,119179,119182,119196,119203,119237,119242,119246,119269,119272,119277,119281,119284,119287,119290,119332,119336,119339,119342,119383,119387,119391,119394,119399,119404,119407,119430,119433,119441,119446,119449,119454,119459,119462,119467,119471,119476,119499,119504,119566,119574,119579,119584,119587,119592,119595,119600,119605,119623,119628,119634,119639,119653,119657,119660,119663,119666,119709,119712,119717,119818,119821,119826,119830,119834,119871,119875,119879,119883,119929,119933,119978,119982,119989,119997,120052,120055,120132,120135,120158,120162,120165,120170,120175,120183,120186,120191,120196,120201,120204,120209,120218,120221,120226,120229,120300,120305,120308,120313,120316,120321,120324,120329,120332,120337,120342,120345,120420,120423,120436,120441,120444,120458,120461,120490,120495,120524,120527,120532,120536,120541,120550,120553,120558,120561,120566,120569,120572,120577,120580,120585,120590,120593,120598,120601,120726,120731,120761,120764,120769,120774,120791,120794,120837,120840,120867,120872,120885,121028,121032,121037,121051,121054,121105,121108,121138,121141,121157,121162,121176,121179,121246,121251,121260,121265,121268,121280,121285,121292,121316,121319,121324,121327,121346,121351,121358,121370,121377],[39,118475,118471],{"id":118476},"_3-安装必备配置",[43,118478,118480],{"id":118479},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[92,118482,118485],{"className":118483,"code":118484,"language":5175},[5173],"  打开下方网站（注意，该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",[98,118486,118484],{"__ignoreMap":20},[72,118488,118490],{"id":118489},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[92,118492,118495],{"className":118493,"code":118494,"language":5175},[5173],"  输入以下命令\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",[98,118496,118494],{"__ignoreMap":20},[72,118498,118500],{"id":118499},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[92,118502,118506],{"className":118503,"code":118504,"language":118505,"meta":20,"style":20},"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",[98,118507,118508,118516,118527,118539,118553,118557,118567,118572,118576,118580,118585,118589,118601,118605,118610,118614,118625,118629,118645,118649,118660,118664,118669,118673,118681],{"__ignoreMap":20},[101,118509,118510,118512,118514],{"class":103,"line":104},[101,118511,24565],{"class":1950},[101,118513,117297],{"class":216},[101,118515,26231],{"class":216},[101,118517,118518,118520,118522,118524],{"class":103,"line":21},[101,118519,24565],{"class":1950},[101,118521,117297],{"class":216},[101,118523,23823],{"class":216},[101,118525,118526],{"class":216}," vim\n",[101,118528,118529,118531,118534,118536],{"class":103,"line":1166},[101,118530,24565],{"class":1950},[101,118532,118533],{"class":216}," rm",[101,118535,25314],{"class":160},[101,118537,118538],{"class":216}," \u002Fetc\u002Fapt\u002Fsources.list\n",[101,118540,118541,118543,118545,118547,118550],{"class":103,"line":1181},[101,118542,24565],{"class":1950},[101,118544,118533],{"class":216},[101,118546,25314],{"class":160},[101,118548,118549],{"class":216}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[101,118551,118552],{"class":160},"**\n",[101,118554,118555],{"class":103,"line":1187},[101,118556,2387],{"emptyLinePlaceholder":27},[101,118558,118559,118561,118564],{"class":103,"line":1201},[101,118560,24565],{"class":1950},[101,118562,118563],{"class":216}," vim",[101,118565,118566],{"class":216}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[101,118568,118569],{"class":103,"line":1207},[101,118570,118571],{"class":216},"```\n",[101,118573,118574],{"class":103,"line":1298},[101,118575,2387],{"emptyLinePlaceholder":27},[101,118577,118578],{"class":103,"line":1304},[101,118579,2387],{"emptyLinePlaceholder":27},[101,118581,118582],{"class":103,"line":1316},[101,118583,118584],{"class":1950},"选择好Ubuntu版本后，复制下方的内容。\n",[101,118586,118587],{"class":103,"line":1599},[101,118588,2387],{"emptyLinePlaceholder":27},[101,118590,118591,118593,118596,118599],{"class":103,"line":1604},[101,118592,338],{"class":107},[101,118594,118595],{"class":216},"[](",[101,118597,118598],{"class":1950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[101,118600,118],{"class":216},[101,118602,118603],{"class":103,"line":1610},[101,118604,2387],{"emptyLinePlaceholder":27},[101,118606,118607],{"class":103,"line":1615},[101,118608,118609],{"class":1950},"粘贴进去\n",[101,118611,118612],{"class":103,"line":1629},[101,118613,2387],{"emptyLinePlaceholder":27},[101,118615,118616,118618,118620,118623],{"class":103,"line":1634},[101,118617,338],{"class":107},[101,118619,118595],{"class":216},[101,118621,118622],{"class":1950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[101,118624,118],{"class":216},[101,118626,118627],{"class":103,"line":1640},[101,118628,2387],{"emptyLinePlaceholder":27},[101,118630,118631,118634,118637,118640,118642],{"class":103,"line":1661},[101,118632,118633],{"class":1950},"按一下ESC，然后英文冒号，输入",[101,118635,118636],{"class":216}," `",[101,118638,118639],{"class":1950},":wq!",[101,118641,1083],{"class":216},[101,118643,118644],{"class":1950},"然后回车\n",[101,118646,118647],{"class":103,"line":1666},[101,118648,2387],{"emptyLinePlaceholder":27},[101,118650,118651,118653,118655,118658],{"class":103,"line":1680},[101,118652,338],{"class":107},[101,118654,118595],{"class":216},[101,118656,118657],{"class":1950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[101,118659,118],{"class":216},[101,118661,118662],{"class":103,"line":1685},[101,118663,2387],{"emptyLinePlaceholder":27},[101,118665,118666],{"class":103,"line":1714},[101,118667,118668],{"class":1950},"输入以下命令\n",[101,118670,118671],{"class":103,"line":1719},[101,118672,2387],{"emptyLinePlaceholder":27},[101,118674,118675,118678],{"class":103,"line":1736},[101,118676,118677],{"class":216},"```",[101,118679,118680],{"class":1950},"Bash\n",[101,118682,118683,118685,118687],{"class":103,"line":1741},[101,118684,24565],{"class":1950},[101,118686,117297],{"class":216},[101,118688,26231],{"class":216},[10,118690,118691],{},"这里被替换成对应学校则成功",[10,118693,118694],{},[1449,118695],{"alt":20,"src":118696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[43,118698,118700],{"id":118699},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[72,118702,118704],{"id":118703},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[10,118706,118707],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[10,118709,118710],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[10,118712,118713],{},[14,118714,118715],{"href":118715,"rel":118716},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[18],[10,118718,118719],{},[1449,118720],{"alt":20,"src":118721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[10,118723,118724],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[10,118726,118727],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[10,118729,118730],{},[1449,118731],{"alt":20,"src":118732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[92,118734,118736],{"className":117276,"code":118735,"language":117278,"meta":20,"style":20},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[98,118737,118738,118743,118750,118755],{"__ignoreMap":20},[101,118739,118740],{"class":103,"line":104},[101,118741,118742],{"class":170},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[101,118744,118745,118747],{"class":103,"line":21},[101,118746,101256],{"class":160},[101,118748,118749],{"class":216}," ~\u002FDownloads\n",[101,118751,118752],{"class":103,"line":1166},[101,118753,118754],{"class":170},"#下方chrome安装包名不一定是这个，根据名字来看\n",[101,118756,118757,118759,118761,118763],{"class":103,"line":1181},[101,118758,24565],{"class":1950},[101,118760,117297],{"class":216},[101,118762,23823],{"class":216},[101,118764,118765],{"class":216}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[10,118767,118768],{},[1449,118769],{"alt":20,"src":118770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[72,118772,118774],{"id":118773},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[92,118776,118778],{"className":117276,"code":118777,"language":117278,"meta":20,"style":20},"# 老版\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",[98,118779,118780,118785,118793,118804,118809,118813,118818,118828,118836,118847],{"__ignoreMap":20},[101,118781,118782],{"class":103,"line":104},[101,118783,118784],{"class":170},"# 老版\n",[101,118786,118787,118789,118791],{"class":103,"line":21},[101,118788,24565],{"class":1950},[101,118790,117297],{"class":216},[101,118792,26231],{"class":216},[101,118794,118795,118797,118799,118801],{"class":103,"line":1166},[101,118796,24565],{"class":1950},[101,118798,117297],{"class":216},[101,118800,23823],{"class":216},[101,118802,118803],{"class":216}," neofetch\n",[101,118805,118806],{"class":103,"line":1181},[101,118807,118808],{"class":1950},"neofetch\n",[101,118810,118811],{"class":103,"line":1187},[101,118812,2387],{"emptyLinePlaceholder":27},[101,118814,118815],{"class":103,"line":1201},[101,118816,118817],{"class":170},"# 新版\n",[101,118819,118820,118822,118825],{"class":103,"line":1207},[101,118821,24565],{"class":1950},[101,118823,118824],{"class":216}," add-apt-repository",[101,118826,118827],{"class":216}," ppa:zhangsongcui3371\u002Ffastfetch\n",[101,118829,118830,118832,118834],{"class":103,"line":1298},[101,118831,24565],{"class":1950},[101,118833,117297],{"class":216},[101,118835,26231],{"class":216},[101,118837,118838,118840,118842,118844],{"class":103,"line":1304},[101,118839,24565],{"class":1950},[101,118841,117297],{"class":216},[101,118843,23823],{"class":216},[101,118845,118846],{"class":216}," fastfetch\n",[101,118848,118849],{"class":103,"line":1316},[101,118850,118851],{"class":1950},"fastfetch\n",[10,118853,118854],{},"这里显示，一共有3162个debian的程序，7个snap程序",[10,118856,118857],{},[1449,118858],{"alt":20,"src":118859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[72,118861,118863],{"id":118862},"_323-移除snap应用","3.2.3 移除snap应用",[10,118865,118866],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[92,118868,118870],{"className":117276,"code":118869,"language":117278,"meta":20,"style":20},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[98,118871,118872,118884,118895],{"__ignoreMap":20},[101,118873,118874,118876,118878,118881],{"class":103,"line":104},[101,118875,24565],{"class":1950},[101,118877,26502],{"class":216},[101,118879,118880],{"class":216}," disable",[101,118882,118883],{"class":216}," snapd.service\n",[101,118885,118886,118888,118890,118892],{"class":103,"line":21},[101,118887,24565],{"class":1950},[101,118889,26502],{"class":216},[101,118891,118880],{"class":216},[101,118893,118894],{"class":216}," snapd.socket\n",[101,118896,118897,118899,118901,118903],{"class":103,"line":1166},[101,118898,24565],{"class":1950},[101,118900,26502],{"class":216},[101,118902,118880],{"class":216},[101,118904,118905],{"class":216}," snapd.seeded.service\n",[10,118907,118908],{},"然后查看snap应用列表",[10,118910,118911,118912,118917],{},"根据你安装的选择不同（最小安装或普通安装），有",[14,118913,118916],{"href":118914,"rel":118915},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[18],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[92,118919,118921],{"className":117276,"code":118920,"language":117278,"meta":20,"style":20},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[98,118922,118923,118928],{"__ignoreMap":20},[101,118924,118925],{"class":103,"line":104},[101,118926,118927],{"class":170},"# 查询当前系统上snap安装了哪些app\n",[101,118929,118930,118933],{"class":103,"line":21},[101,118931,118932],{"class":1950},"snap",[101,118934,118935],{"class":216}," list\n",[10,118937,118938],{},[1449,118939],{"alt":20,"src":118940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[10,118942,118943,118944,118947],{},"卸载掉图中所有应用，按照 ",[261,118945,118946],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[92,118949,118951],{"className":117276,"code":118950,"language":117278,"meta":20,"style":20},"#移除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",[98,118952,118953,118958,118970,118975,118986,118991,119002,119007,119018,119023,119027,119032,119043,119054],{"__ignoreMap":20},[101,118954,118955],{"class":103,"line":104},[101,118956,118957],{"class":170},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[101,118959,118960,118962,118965,118967],{"class":103,"line":21},[101,118961,24565],{"class":1950},[101,118963,118964],{"class":216}," snap",[101,118966,26068],{"class":216},[101,118968,118969],{"class":216}," snap-store\n",[101,118971,118972],{"class":103,"line":1166},[101,118973,118974],{"class":170},"#移除firefox浏览器\n",[101,118976,118977,118979,118981,118983],{"class":103,"line":1181},[101,118978,24565],{"class":1950},[101,118980,118964],{"class":216},[101,118982,26068],{"class":216},[101,118984,118985],{"class":216}," firefox\n",[101,118987,118988],{"class":103,"line":1187},[101,118989,118990],{"class":170},"#移除gnome-42-2204\n",[101,118992,118993,118995,118997,118999],{"class":103,"line":1201},[101,118994,24565],{"class":1950},[101,118996,118964],{"class":216},[101,118998,26068],{"class":216},[101,119000,119001],{"class":216}," gnome-42-2204\n",[101,119003,119004],{"class":103,"line":1207},[101,119005,119006],{"class":170},"#移除gtk-common-themes\n",[101,119008,119009,119011,119013,119015],{"class":103,"line":1298},[101,119010,24565],{"class":1950},[101,119012,118964],{"class":216},[101,119014,26068],{"class":216},[101,119016,119017],{"class":216}," gtk-common-themes\n",[101,119019,119020],{"class":103,"line":1304},[101,119021,119022],{"class":170},"#移除其它...\n",[101,119024,119025],{"class":103,"line":1316},[101,119026,2661],{"class":111},[101,119028,119029],{"class":103,"line":1599},[101,119030,119031],{"class":170},"#移除core22,bare以及snapd\n",[101,119033,119034,119036,119038,119040],{"class":103,"line":1604},[101,119035,24565],{"class":1950},[101,119037,118964],{"class":216},[101,119039,26068],{"class":216},[101,119041,119042],{"class":216}," core22\n",[101,119044,119045,119047,119049,119051],{"class":103,"line":1610},[101,119046,24565],{"class":1950},[101,119048,118964],{"class":216},[101,119050,26068],{"class":216},[101,119052,119053],{"class":216}," bare\n",[101,119055,119056,119058,119060,119062],{"class":103,"line":1615},[101,119057,24565],{"class":1950},[101,119059,118964],{"class":216},[101,119061,26068],{"class":216},[101,119063,119064],{"class":216}," snapd\n",[10,119066,119067],{},[1449,119068],{"alt":20,"src":119069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[10,119071,119072],{},"输入以下命令查看是否还有snap包",[92,119074,119076],{"className":117276,"code":119075,"language":117278,"meta":20,"style":20},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[98,119077,119078,119084,119088,119092,119096],{"__ignoreMap":20},[101,119079,119080,119082],{"class":103,"line":104},[101,119081,118932],{"class":1950},[101,119083,118935],{"class":216},[101,119085,119086],{"class":103,"line":21},[101,119087,118784],{"class":170},[101,119089,119090],{"class":103,"line":1166},[101,119091,118808],{"class":1950},[101,119093,119094],{"class":103,"line":1181},[101,119095,118817],{"class":170},[101,119097,119098],{"class":103,"line":1187},[101,119099,118851],{"class":1950},[10,119101,119102],{},[1449,119103],{"alt":20,"src":119104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[72,119106,119108],{"id":119107},"_324-移除snap","3.2.4 移除snap",[10,119110,119111,119112,119117],{},"在删除掉",[14,119113,119116],{"href":119114,"rel":119115},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[18],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[92,119119,119121],{"className":117276,"code":119120,"language":117278,"meta":20,"style":20}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[98,119122,119123,119128,119141,119146,119157],{"__ignoreMap":20},[101,119124,119125],{"class":103,"line":104},[101,119126,119127],{"class":170}," #使用apt移除掉snap\n",[101,119129,119130,119132,119134,119136,119139],{"class":103,"line":21},[101,119131,24565],{"class":1950},[101,119133,117297],{"class":216},[101,119135,117605],{"class":216},[101,119137,119138],{"class":160}," --purge",[101,119140,119064],{"class":216},[101,119142,119143],{"class":103,"line":1166},[101,119144,119145],{"class":170},"#移除snapd的一些目录\n",[101,119147,119148,119150,119152,119154],{"class":103,"line":1181},[101,119149,24565],{"class":1950},[101,119151,118533],{"class":216},[101,119153,25314],{"class":160},[101,119155,119156],{"class":216}," \u002Fvar\u002Fcache\u002Fsnapd\n",[101,119158,119159,119161,119163,119165],{"class":103,"line":1187},[101,119160,24565],{"class":1950},[101,119162,118533],{"class":216},[101,119164,25314],{"class":160},[101,119166,119167],{"class":216}," ~\u002Fsnap\n",[10,119169,119170,119171,119174],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[98,119172,119173],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[72,119176,119178],{"id":119177},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[10,119180,119181],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[92,119183,119185],{"className":117276,"code":119184,"language":117278,"meta":20,"style":20},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[98,119186,119187],{"__ignoreMap":20},[101,119188,119189,119191,119193],{"class":103,"line":104},[101,119190,24565],{"class":1950},[101,119192,118563],{"class":216},[101,119194,119195],{"class":216}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[10,119197,119198,119199,119202],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[98,119200,119201],{},":wq"," 回车",[92,119204,119206],{"className":117276,"code":119205,"language":117278,"meta":20,"style":20},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[98,119207,119208,119215,119229],{"__ignoreMap":20},[101,119209,119210,119213],{"class":103,"line":104},[101,119211,119212],{"class":1950},"Package:",[101,119214,119064],{"class":216},[101,119216,119217,119220,119223,119226],{"class":103,"line":21},[101,119218,119219],{"class":1950},"Pin:",[101,119221,119222],{"class":216}," release",[101,119224,119225],{"class":216}," a=",[101,119227,119228],{"class":160},"*\n",[101,119230,119231,119234],{"class":103,"line":1166},[101,119232,119233],{"class":1950},"Pin-Priority:",[101,119235,119236],{"class":160}," -10\n",[10,119238,119239],{},[1449,119240],{"alt":20,"src":119241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[72,119243,119245],{"id":119244},"_326-测试是否成功","3.2.6 测试是否成功",[92,119247,119249],{"className":117276,"code":119248,"language":117278,"meta":20,"style":20},"sudo apt update\nsudo apt install firefox\n",[98,119250,119251,119259],{"__ignoreMap":20},[101,119252,119253,119255,119257],{"class":103,"line":104},[101,119254,24565],{"class":1950},[101,119256,117297],{"class":216},[101,119258,26231],{"class":216},[101,119260,119261,119263,119265,119267],{"class":103,"line":21},[101,119262,24565],{"class":1950},[101,119264,117297],{"class":216},[101,119266,23823],{"class":216},[101,119268,118985],{"class":216},[10,119270,119271],{},"这里提示snapd无法被安装，就证明成功了",[10,119273,119274],{},[1449,119275],{"alt":20,"src":119276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[72,119278,119280],{"id":119279},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[10,119282,119283],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[10,119285,119286],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[10,119288,119289],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[92,119291,119293],{"className":117276,"code":119292,"language":117278,"meta":20,"style":20},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[98,119294,119295,119300,119309,119314,119322],{"__ignoreMap":20},[101,119296,119297],{"class":103,"line":104},[101,119298,119299],{"class":170},"# 添加Mozilla提供的源\n",[101,119301,119302,119304,119306],{"class":103,"line":21},[101,119303,24565],{"class":1950},[101,119305,118824],{"class":216},[101,119307,119308],{"class":216}," ppa:mozillateam\u002Fppa\n",[101,119310,119311],{"class":103,"line":1166},[101,119312,119313],{"class":170},"# 安装Firefox\n",[101,119315,119316,119318,119320],{"class":103,"line":1181},[101,119317,24565],{"class":1950},[101,119319,117297],{"class":216},[101,119321,26231],{"class":216},[101,119323,119324,119326,119328,119330],{"class":103,"line":1187},[101,119325,24565],{"class":1950},[101,119327,117297],{"class":216},[101,119329,23823],{"class":216},[101,119331,118985],{"class":216},[72,119333,119335],{"id":119334},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[10,119337,119338],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[10,119340,119341],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[92,119343,119345],{"className":117276,"code":119344,"language":117278,"meta":20,"style":20},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[98,119346,119347,119352,119362,119370,119374],{"__ignoreMap":20},[101,119348,119349],{"class":103,"line":104},[101,119350,119351],{"class":170},"#删掉禁止安装snap的配置文件\n",[101,119353,119354,119356,119358,119360],{"class":103,"line":21},[101,119355,24565],{"class":1950},[101,119357,118533],{"class":216},[101,119359,25314],{"class":160},[101,119361,119195],{"class":216},[101,119363,119364,119366,119368],{"class":103,"line":1166},[101,119365,24565],{"class":1950},[101,119367,117297],{"class":216},[101,119369,26231],{"class":216},[101,119371,119372],{"class":103,"line":1181},[101,119373,2387],{"emptyLinePlaceholder":27},[101,119375,119376,119378,119380],{"class":103,"line":1187},[101,119377,24565],{"class":1950},[101,119379,117297],{"class":216},[101,119381,119382],{"class":216}," dist-update\n",[43,119384,119386],{"id":119385},"_33-中文输入法","3.3 中文输入法",[72,119388,119390],{"id":119389},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[10,119392,119393],{},"官网下载搜狗输入法",[10,119395,119396],{},[1449,119397],{"alt":20,"src":119398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[10,119400,119401],{},[1449,119402],{"alt":20,"src":119403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[10,119405,119406],{},"打开终端输入如下",[92,119408,119410],{"className":117276,"code":119409,"language":117278,"meta":20,"style":20},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[98,119411,119412,119419],{"__ignoreMap":20},[101,119413,119414,119416],{"class":103,"line":104},[101,119415,101256],{"class":160},[101,119417,119418],{"class":216}," ~\u002FDownloads\u002F\n",[101,119420,119421,119423,119425,119427],{"class":103,"line":21},[101,119422,24565],{"class":1950},[101,119424,117297],{"class":216},[101,119426,23823],{"class":216},[101,119428,119429],{"class":216}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[10,119431,119432],{},"打开Fcitx",[10,119434,119435,119438],{},[1449,119436],{"alt":20,"src":119437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1449,119439],{"alt":20,"src":119440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[10,119442,119443],{},[1449,119444],{"alt":20,"src":119445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[10,119447,119448],{},"添加搜狗输入法",[10,119450,119451],{},[1449,119452],{"alt":20,"src":119453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[10,119455,119456],{},[1449,119457],{"alt":20,"src":119458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[10,119460,119461],{},"将搜狗输入法设置为唯一输入法",[10,119463,119464],{},[1449,119465],{"alt":20,"src":119466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[72,119468,119470],{"id":119469},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[55,119472,119473],{},[58,119474,119475],{},"卸载旧输入法",[92,119477,119479],{"className":118503,"code":119478,"language":118505,"meta":20,"style":20},"sudo apt purge fcitx* ibus*\n",[98,119480,119481],{"__ignoreMap":20},[101,119482,119483,119485,119487,119489,119492,119494,119497],{"class":103,"line":104},[101,119484,24565],{"class":1950},[101,119486,117297],{"class":216},[101,119488,117638],{"class":216},[101,119490,119491],{"class":216}," fcitx",[101,119493,566],{"class":160},[101,119495,119496],{"class":216}," ibus",[101,119498,119228],{"class":160},[55,119500,119501],{"start":21},[58,119502,119503],{},"安装Fcitx5",[92,119505,119507],{"className":117276,"code":119506,"language":117278,"meta":20,"style":20},"# 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",[98,119508,119509,119514,119528,119532,119537,119546,119554],{"__ignoreMap":20},[101,119510,119511],{"class":103,"line":104},[101,119512,119513],{"class":170},"# Ubuntu22.04及以上、Debian12及以上\n",[101,119515,119516,119518,119520,119522,119525],{"class":103,"line":21},[101,119517,24565],{"class":1950},[101,119519,117297],{"class":216},[101,119521,23823],{"class":216},[101,119523,119524],{"class":216}," fcitx5",[101,119526,119527],{"class":216}," fcitx5-chinese-addons\n",[101,119529,119530],{"class":103,"line":1166},[101,119531,2387],{"emptyLinePlaceholder":27},[101,119533,119534],{"class":103,"line":1181},[101,119535,119536],{"class":170},"# Ubuntu20.04\n",[101,119538,119539,119541,119543],{"class":103,"line":1187},[101,119540,24565],{"class":1950},[101,119542,118824],{"class":216},[101,119544,119545],{"class":216}," ppa:zhsj\u002Ffcitx5\n",[101,119547,119548,119550,119552],{"class":103,"line":1201},[101,119549,24565],{"class":1950},[101,119551,117297],{"class":216},[101,119553,26231],{"class":216},[101,119555,119556,119558,119560,119562,119564],{"class":103,"line":1207},[101,119557,24565],{"class":1950},[101,119559,117297],{"class":216},[101,119561,23823],{"class":216},[101,119563,119524],{"class":216},[101,119565,119527],{"class":216},[55,119567,119568,119571],{"start":1166},[58,119569,119570],{},"Reboot System",[58,119572,119573],{},"启动Fcitx5",[10,119575,119576],{},[1449,119577],{"alt":20,"src":119578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[55,119580,119581],{"start":1187},[58,119582,119583],{},"修改一些设置",[10,119585,119586],{},"将Pinyin和Keyboard - English US加入到左边。",[10,119588,119589],{},[1449,119590],{"alt":20,"src":119591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[10,119593,119594],{},"添加快捷键以便于更好切换中英文",[10,119596,119597],{},[1449,119598],{"alt":20,"src":119599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[55,119601,119602],{"start":1201},[58,119603,119604],{},"重启",[92,119606,119608],{"className":118503,"code":119607,"language":118505,"meta":20,"style":20},"sudo shutdown -r now\n",[98,119609,119610],{"__ignoreMap":20},[101,119611,119612,119614,119617,119620],{"class":103,"line":104},[101,119613,24565],{"class":1950},[101,119615,119616],{"class":216}," shutdown",[101,119618,119619],{"class":160}," -r",[101,119621,119622],{"class":216}," now\n",[55,119624,119625],{"start":1207},[58,119626,119627],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[10,119629,119630],{},[14,119631,119632],{"href":119632,"rel":119633},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[18],[55,119635,119636],{"start":1298},[58,119637,119638],{},"再重启",[92,119640,119641],{"className":118503,"code":119607,"language":118505,"meta":20,"style":20},[98,119642,119643],{"__ignoreMap":20},[101,119644,119645,119647,119649,119651],{"class":103,"line":104},[101,119646,24565],{"class":1950},[101,119648,119616],{"class":216},[101,119650,119619],{"class":160},[101,119652,119622],{"class":216},[43,119654,119656],{"id":119655},"_34-pip3源替换","3.4 pip3源替换",[10,119658,119659],{},"非Debian系发行版需要做。",[10,119661,119662],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[10,119664,119665],{},"使用dnf的系统也可能不用做。",[92,119667,119669],{"className":117276,"code":119668,"language":117278,"meta":20,"style":20},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[98,119670,119671,119676,119683,119688,119693],{"__ignoreMap":20},[101,119672,119673],{"class":103,"line":104},[101,119674,119675],{"class":170},"# 检查是否已安装 pip\n",[101,119677,119678,119681],{"class":103,"line":21},[101,119679,119680],{"class":1950},"pip3",[101,119682,26282],{"class":160},[101,119684,119685],{"class":103,"line":1166},[101,119686,119687],{"class":170},"# 如果未安装，先安装 pip3（见下方）\n",[101,119689,119690],{"class":103,"line":1181},[101,119691,119692],{"class":170},"# 配置 pip 使用清华源\n",[101,119694,119695,119697,119700,119703,119706],{"class":103,"line":1187},[101,119696,119680],{"class":1950},[101,119698,119699],{"class":216}," config",[101,119701,119702],{"class":216}," set",[101,119704,119705],{"class":216}," global.index-url",[101,119707,119708],{"class":216}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[10,119710,119711],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[10,119713,119714],{},[1449,119715],{"alt":20,"src":119716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[92,119718,119720],{"className":117276,"code":119719,"language":117278,"meta":20,"style":20},"#安装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",[98,119721,119722,119727,119735,119746,119750,119755,119774,119778,119783,119795,119799,119804],{"__ignoreMap":20},[101,119723,119724],{"class":103,"line":104},[101,119725,119726],{"class":170},"#安装pip3\n",[101,119728,119729,119731,119733],{"class":103,"line":21},[101,119730,24565],{"class":1950},[101,119732,117297],{"class":216},[101,119734,26231],{"class":216},[101,119736,119737,119739,119741,119743],{"class":103,"line":1166},[101,119738,24565],{"class":1950},[101,119740,26065],{"class":216},[101,119742,23823],{"class":216},[101,119744,119745],{"class":216}," python3-pip\n",[101,119747,119748],{"class":103,"line":1181},[101,119749,2387],{"emptyLinePlaceholder":27},[101,119751,119752],{"class":103,"line":1187},[101,119753,119754],{"class":170},"#更新pip3\n",[101,119756,119757,119759,119761,119763,119765,119767,119770,119772],{"class":103,"line":1201},[101,119758,100859],{"class":1950},[101,119760,100862],{"class":160},[101,119762,100885],{"class":216},[101,119764,23823],{"class":216},[101,119766,26419],{"class":160},[101,119768,119769],{"class":216}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[101,119771,100890],{"class":160},[101,119773,100893],{"class":216},[101,119775,119776],{"class":103,"line":1207},[101,119777,2387],{"emptyLinePlaceholder":27},[101,119779,119780],{"class":103,"line":1298},[101,119781,119782],{"class":170},"#设置pip源为清华源\n",[101,119784,119785,119787,119789,119791,119793],{"class":103,"line":1304},[101,119786,119680],{"class":1950},[101,119788,119699],{"class":216},[101,119790,119702],{"class":216},[101,119792,119705],{"class":216},[101,119794,119708],{"class":216},[101,119796,119797],{"class":103,"line":1316},[101,119798,2387],{"emptyLinePlaceholder":27},[101,119800,119801],{"class":103,"line":1599},[101,119802,119803],{"class":170},"#测试\n",[101,119805,119806,119808,119810,119812,119814,119816],{"class":103,"line":1604},[101,119807,100859],{"class":1950},[101,119809,100862],{"class":160},[101,119811,100885],{"class":216},[101,119813,23823],{"class":216},[101,119815,100890],{"class":160},[101,119817,100893],{"class":216},[10,119819,119820],{},"成功的话，会看到Looking后面是tsinghua字样。",[10,119822,119823],{},[1449,119824],{"alt":20,"src":119825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[43,119827,119829],{"id":119828},"_35-显卡驱动安装","3.5 显卡驱动安装",[72,119831,119833],{"id":119832},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[92,119835,119837],{"className":118503,"code":119836,"language":118505,"meta":20,"style":20},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[98,119838,119839,119844,119859,119864],{"__ignoreMap":20},[101,119840,119841],{"class":103,"line":104},[101,119842,119843],{"class":170},"# 如果是使用apt安装的驱动\n",[101,119845,119846,119848,119850,119852,119854,119857],{"class":103,"line":21},[101,119847,24565],{"class":1950},[101,119849,26065],{"class":216},[101,119851,26068],{"class":216},[101,119853,119138],{"class":160},[101,119855,119856],{"class":216}," nvidia",[101,119858,119228],{"class":160},[101,119860,119861],{"class":103,"line":1166},[101,119862,119863],{"class":170},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[101,119865,119866,119868],{"class":103,"line":1181},[101,119867,24565],{"class":1950},[101,119869,119870],{"class":216}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[72,119872,119874],{"id":119873},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21986,119876,119878],{"id":119877},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22898,119880,119882],{"id":119881},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[92,119884,119886],{"className":118503,"code":119885,"language":118505,"meta":20,"style":20},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[98,119887,119888,119893,119904,119909,119919,119924],{"__ignoreMap":20},[101,119889,119890],{"class":103,"line":104},[101,119891,119892],{"class":170},"# 安装英伟达驱动\n",[101,119894,119895,119897,119899,119901],{"class":103,"line":21},[101,119896,24565],{"class":1950},[101,119898,117297],{"class":216},[101,119900,23823],{"class":216},[101,119902,119903],{"class":216}," nvidia-driver-版本号\n",[101,119905,119906],{"class":103,"line":1166},[101,119907,119908],{"class":170},"# 重启 \n",[101,119910,119911,119913,119915,119917],{"class":103,"line":1181},[101,119912,24565],{"class":1950},[101,119914,119616],{"class":216},[101,119916,119619],{"class":160},[101,119918,119622],{"class":216},[101,119920,119921],{"class":103,"line":1187},[101,119922,119923],{"class":170},"# 检查驱动是否安装成功\n",[101,119925,119926],{"class":103,"line":1201},[101,119927,119928],{"class":1950},"nvidia-smi\n",[22898,119930,119932],{"id":119931},"_35212-debian","3.5.2.1.2 Debian",[92,119934,119936],{"className":118503,"code":119935,"language":118505,"meta":20,"style":20},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[98,119937,119938,119942,119956,119960,119970,119974],{"__ignoreMap":20},[101,119939,119940],{"class":103,"line":104},[101,119941,119892],{"class":170},[101,119943,119944,119946,119948,119950,119953],{"class":103,"line":21},[101,119945,24565],{"class":1950},[101,119947,117297],{"class":216},[101,119949,23823],{"class":216},[101,119951,119952],{"class":216}," nvidia-driver",[101,119954,119955],{"class":216}," nvidia-settings\n",[101,119957,119958],{"class":103,"line":1166},[101,119959,119908],{"class":170},[101,119961,119962,119964,119966,119968],{"class":103,"line":1181},[101,119963,24565],{"class":1950},[101,119965,119616],{"class":216},[101,119967,119619],{"class":160},[101,119969,119622],{"class":216},[101,119971,119972],{"class":103,"line":1187},[101,119973,119923],{"class":170},[101,119975,119976],{"class":103,"line":1201},[101,119977,119928],{"class":1950},[21986,119979,119981],{"id":119980},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[10,119983,119984,119985,119988],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[261,119986,119987],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[10,119990,119991,119992],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23542,119993,119994],{},[261,119995,119996],{},"（也可以不禁用桌面环境，直接进行下一步。）",[92,119998,120000],{"className":118503,"code":119999,"language":118505,"meta":20,"style":20},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[98,120001,120002,120007,120017,120022,120035,120040],{"__ignoreMap":20},[101,120003,120004],{"class":103,"line":104},[101,120005,120006],{"class":170},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[101,120008,120009,120011,120014],{"class":103,"line":21},[101,120010,24565],{"class":1950},[101,120012,120013],{"class":216}," telinit",[101,120015,120016],{"class":160}," 3\n",[101,120018,120019],{"class":103,"line":1166},[101,120020,120021],{"class":170},"# ubuntu 使用下方命令\n",[101,120023,120024,120026,120029,120032],{"class":103,"line":1181},[101,120025,24565],{"class":1950},[101,120027,120028],{"class":216}," service",[101,120030,120031],{"class":216}," lightdm",[101,120033,120034],{"class":216}," stop\n",[101,120036,120037],{"class":103,"line":1187},[101,120038,120039],{"class":170},"# Fedora 使用下方命令\n",[101,120041,120042,120044,120046,120049],{"class":103,"line":1201},[101,120043,24565],{"class":1950},[101,120045,26502],{"class":216},[101,120047,120048],{"class":216}," isolate",[101,120050,120051],{"class":216}," multi-user.target\n",[10,120053,120054],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[92,120056,120058],{"className":118503,"code":120057,"language":118505,"meta":20,"style":20},"# 编译环境+准备工作\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",[98,120059,120060,120065,120076,120081,120088,120093,120105,120110,120117,120122],{"__ignoreMap":20},[101,120061,120062],{"class":103,"line":104},[101,120063,120064],{"class":170},"# 编译环境+准备工作\n",[101,120066,120067,120069,120071,120073],{"class":103,"line":21},[101,120068,24565],{"class":1950},[101,120070,117297],{"class":216},[101,120072,23823],{"class":216},[101,120074,120075],{"class":216}," build-essential\n",[101,120077,120078],{"class":103,"line":1166},[101,120079,120080],{"class":170},"# 进入到.run目录中\n",[101,120082,120083,120085],{"class":103,"line":1181},[101,120084,101256],{"class":160},[101,120086,120087],{"class":216}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[101,120089,120090],{"class":103,"line":1187},[101,120091,120092],{"class":170},"# 给驱动文件增加可执行权限：\n",[101,120094,120095,120097,120099,120102],{"class":103,"line":1201},[101,120096,24565],{"class":1950},[101,120098,24568],{"class":216},[101,120100,120101],{"class":216}," a+x",[101,120103,120104],{"class":216}," NVIDIA-Linux-x86_64-550.107.02.run\n",[101,120106,120107],{"class":103,"line":1207},[101,120108,120109],{"class":170},"# 然后执行安装：\n",[101,120111,120112,120114],{"class":103,"line":1298},[101,120113,24565],{"class":1950},[101,120115,120116],{"class":216}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[101,120118,120119],{"class":103,"line":1304},[101,120120,120121],{"class":170},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[101,120123,120124,120126,120129],{"class":103,"line":1316},[101,120125,24565],{"class":1950},[101,120127,120128],{"class":216}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[101,120130,120131],{"class":160},"  --no-opengl-files\n",[10,120133,120134],{},"安装完毕重启即可",[92,120136,120138],{"className":118503,"code":120137,"language":118505,"meta":20,"style":20},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[98,120139,120140,120144,120150,120154],{"__ignoreMap":20},[101,120141,120142],{"class":103,"line":104},[101,120143,119908],{"class":170},[101,120145,120146,120148],{"class":103,"line":21},[101,120147,24565],{"class":1950},[101,120149,26636],{"class":216},[101,120151,120152],{"class":103,"line":1166},[101,120153,119923],{"class":170},[101,120155,120156],{"class":103,"line":1181},[101,120157,119928],{"class":1950},[72,120159,120161],{"id":120160},"_353-安装cuda","3.5.3 安装CUDA",[10,120163,120164],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[10,120166,120167],{},[1449,120168],{"alt":20,"src":120169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[55,120171,120172],{},[58,120173,120174],{},"先查看显卡驱动所支持的最高CUDA版本",[92,120176,120177],{"className":118503,"code":119928,"language":118505,"meta":20,"style":20},[98,120178,120179],{"__ignoreMap":20},[101,120180,120181],{"class":103,"line":104},[101,120182,119928],{"class":1950},[10,120184,120185],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[10,120187,120188],{},[1449,120189],{"alt":20,"src":120190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[55,120192,120193],{"start":21},[58,120194,120195],{},"下载CUDA并安装CUDA",[10,120197,118282,120198],{},[14,120199,118285],{"href":118285,"rel":120200},[18],[10,120202,120203],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[10,120205,120206],{},[1449,120207],{"alt":20,"src":120208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[10,120210,120211,120212,120217],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[14,120213,120216],{"href":120214,"rel":120215},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[18],"Vinci机器人队单片机教程","）",[10,120219,120220],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[10,120222,120223],{},[1449,120224],{"alt":20,"src":120225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[10,120227,120228],{},"将最下方框框里的命令敲入终端",[92,120230,120232],{"className":118503,"code":120231,"language":118505,"meta":20,"style":20},"# 在当前文件夹下创建一个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",[98,120233,120234,120239,120248,120253,120260,120265,120273,120278,120289,120294],{"__ignoreMap":20},[101,120235,120236],{"class":103,"line":104},[101,120237,120238],{"class":170},"# 在当前文件夹下创建一个ttt的子文件夹\n",[101,120240,120241,120243,120245],{"class":103,"line":21},[101,120242,101246],{"class":1950},[101,120244,29205],{"class":160},[101,120246,120247],{"class":216}," .\u002Fttt\n",[101,120249,120250],{"class":103,"line":1166},[101,120251,120252],{"class":170},"# 进入ttt文件夹\n",[101,120254,120255,120257],{"class":103,"line":1181},[101,120256,101256],{"class":160},[101,120258,120259],{"class":216}," ttt\n",[101,120261,120262],{"class":103,"line":1187},[101,120263,120264],{"class":170},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[101,120266,120267,120270],{"class":103,"line":1201},[101,120268,120269],{"class":1950},"wget",[101,120271,120272],{"class":216}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[101,120274,120275],{"class":103,"line":1207},[101,120276,120277],{"class":170},"# 给予权限\n",[101,120279,120280,120282,120284,120286],{"class":103,"line":1298},[101,120281,24565],{"class":1950},[101,120283,24568],{"class":216},[101,120285,120101],{"class":216},[101,120287,120288],{"class":216}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[101,120290,120291],{"class":103,"line":1304},[101,120292,120293],{"class":170},"# 运行脚本\n",[101,120295,120296,120298],{"class":103,"line":1316},[101,120297,24565],{"class":1950},[101,120299,120288],{"class":216},[10,120301,120302],{},[1449,120303],{"alt":20,"src":120304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[10,120306,120307],{},"正在安装中：",[10,120309,120310],{},[1449,120311],{"alt":20,"src":120312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[10,120314,120315],{},"输入accept接受即可",[10,120317,120318],{},[1449,120319],{"alt":20,"src":120320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[10,120322,120323],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[10,120325,120326],{},[1449,120327],{"alt":20,"src":120328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[10,120330,120331],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[10,120333,120334],{},[1449,120335],{"alt":20,"src":120336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[55,120338,120339],{"start":1166},[58,120340,120341],{},"配置环境",[10,120343,120344],{},"根据上方确认一下路径，比如我上面红色框起来的为",[92,120346,120348],{"className":118503,"code":120347,"language":118505,"meta":20,"style":20},"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",[98,120349,120350,120366,120381],{"__ignoreMap":20},[101,120351,120352,120355,120358,120361,120364],{"class":103,"line":104},[101,120353,120354],{"class":1950},"Please",[101,120356,120357],{"class":216}," make",[101,120359,120360],{"class":216}," sure",[101,120362,120363],{"class":216}," that",[101,120365,2661],{"class":111},[101,120367,120368,120370,120373,120376,120379],{"class":103,"line":21},[101,120369,52260],{"class":1950},[101,120371,120372],{"class":216},"   PATH",[101,120374,120375],{"class":216}," includes",[101,120377,120378],{"class":216}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[101,120380,2661],{"class":111},[101,120382,120383,120385,120388,120390,120393,120396,120398,120401,120404,120407,120410,120412,120415,120417],{"class":103,"line":1166},[101,120384,52260],{"class":1950},[101,120386,120387],{"class":216},"   LD_LIBRARY_PATH",[101,120389,120375],{"class":216},[101,120391,120392],{"class":216}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[101,120394,120395],{"class":216}," or,",[101,120397,5197],{"class":216},[101,120399,120400],{"class":216}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[101,120402,120403],{"class":216}," to",[101,120405,120406],{"class":216}," \u002Fetc\u002Fld.so.conf",[101,120408,120409],{"class":216}," and",[101,120411,27219],{"class":216},[101,120413,120414],{"class":216}," ldconfig",[101,120416,64593],{"class":216},[101,120418,120419],{"class":216}," root\n",[10,120421,120422],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[92,120424,120426],{"className":118503,"code":120425,"language":118505,"meta":20,"style":20},"which nvcc\n",[98,120427,120428],{"__ignoreMap":20},[101,120429,120430,120433],{"class":103,"line":104},[101,120431,120432],{"class":160},"which",[101,120434,120435],{"class":216}," nvcc\n",[10,120437,120438],{},[1449,120439],{"alt":20,"src":120440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[10,120442,120443],{},"所以我进行以下操作：",[92,120445,120447],{"className":118503,"code":120446,"language":118505,"meta":20,"style":20},"sudo vim ~\u002F.bashrc\n",[98,120448,120449],{"__ignoreMap":20},[101,120450,120451,120453,120455],{"class":103,"line":104},[101,120452,24565],{"class":1950},[101,120454,118563],{"class":216},[101,120456,120457],{"class":216}," ~\u002F.bashrc\n",[10,120459,120460],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[92,120462,120464],{"className":118503,"code":120463,"language":118505,"meta":20,"style":20},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[98,120465,120466,120478],{"__ignoreMap":20},[101,120467,120468,120470,120473,120475],{"class":103,"line":104},[101,120469,25031],{"class":107},[101,120471,120472],{"class":111}," PATH",[101,120474,157],{"class":107},[101,120476,120477],{"class":111},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[101,120479,120480,120482,120485,120487],{"class":103,"line":21},[101,120481,25031],{"class":107},[101,120483,120484],{"class":111}," LD_LIBRARY_PATH",[101,120486,157],{"class":107},[101,120488,120489],{"class":111},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[10,120491,120492],{},[1449,120493],{"alt":20,"src":120494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[92,120496,120498],{"className":118503,"code":120497,"language":118505,"meta":20,"style":20},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[98,120499,120500,120505,120511,120516],{"__ignoreMap":20},[101,120501,120502],{"class":103,"line":104},[101,120503,120504],{"class":170},"# 刷新当前终端的环境变量\n",[101,120506,120507,120509],{"class":103,"line":21},[101,120508,100873],{"class":160},[101,120510,120457],{"class":216},[101,120512,120513],{"class":103,"line":1166},[101,120514,120515],{"class":170},"# 验证CUDA是否安装成功\n",[101,120517,120518,120521],{"class":103,"line":1181},[101,120519,120520],{"class":1950},"nvcc",[101,120522,120523],{"class":160}," -V\n",[10,120525,120526],{},"出现下图这种则安装成功。",[10,120528,120529],{},[1449,120530],{"alt":20,"src":120531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[72,120533,120535],{"id":120534},"_354-安装cudnn","3.5.4 安装cuDNN",[55,120537,120538],{},[58,120539,120540],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[10,120542,120543,120544,120549],{},"前往 NVIDIA cuDNN 下载页面：",[14,120545,120548],{"href":120546,"rel":120547},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[18],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[10,120551,120552],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[10,120554,120555],{},[1449,120556],{"alt":20,"src":120557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[10,120559,120560],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[10,120562,120563],{},[1449,120564],{"alt":20,"src":120565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[10,120567,120568],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[10,120570,120571],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[10,120573,120574],{},[261,120575,120576],{},"我这里选择所有Linux X86_64最通用的办法：",[10,120578,120579],{},"下载好的：",[10,120581,120582],{},[1449,120583],{"alt":20,"src":120584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[55,120586,120587],{"start":21},[58,120588,120589],{},"安装cuDNN",[10,120591,120592],{},"找到该文件所在目录，并打开终端，cd到该目录。",[10,120594,120595],{},[1449,120596],{"alt":20,"src":120597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[10,120599,120600],{},"解压文件，并复制到对应位置完成安装",[92,120602,120604],{"className":118503,"code":120603,"language":118505,"meta":20,"style":20},"# 解压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",[98,120605,120606,120611,120622,120627,120634,120639,120655,120669,120674,120685,120694,120698,120714],{"__ignoreMap":20},[101,120607,120608],{"class":103,"line":104},[101,120609,120610],{"class":170},"# 解压cuDNN文件\n",[101,120612,120613,120616,120619],{"class":103,"line":21},[101,120614,120615],{"class":1950},"tar",[101,120617,120618],{"class":160}," -xvf",[101,120620,120621],{"class":216}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[101,120623,120624],{"class":103,"line":1166},[101,120625,120626],{"class":170},"# cd进文件夹\n",[101,120628,120629,120631],{"class":103,"line":1181},[101,120630,101256],{"class":160},[101,120632,120633],{"class":216}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[101,120635,120636],{"class":103,"line":1187},[101,120637,120638],{"class":170},"# 复制cuDNN文件到CUDA目录\n",[101,120640,120641,120643,120645,120648,120650,120653],{"class":103,"line":1201},[101,120642,24565],{"class":1950},[101,120644,27850],{"class":216},[101,120646,120647],{"class":216}," include\u002Fcudnn",[101,120649,566],{"class":160},[101,120651,120652],{"class":216},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[101,120654,2661],{"class":111},[101,120656,120657,120659,120661,120664,120666],{"class":103,"line":1207},[101,120658,24565],{"class":1950},[101,120660,27850],{"class":216},[101,120662,120663],{"class":216}," lib\u002Flibcudnn",[101,120665,566],{"class":160},[101,120667,120668],{"class":216},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[101,120670,120671],{"class":103,"line":1298},[101,120672,120673],{"class":170},"# 对比一下有没有缺文件\n",[101,120675,120676,120678,120681,120683],{"class":103,"line":1304},[101,120677,26750],{"class":1950},[101,120679,120680],{"class":216}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[101,120682,566],{"class":160},[101,120684,2661],{"class":111},[101,120686,120687,120689,120692],{"class":103,"line":1316},[101,120688,26750],{"class":1950},[101,120690,120691],{"class":216}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[101,120693,119228],{"class":160},[101,120695,120696],{"class":103,"line":1599},[101,120697,120277],{"class":170},[101,120699,120700,120702,120704,120707,120709,120711],{"class":103,"line":1604},[101,120701,24565],{"class":1950},[101,120703,24568],{"class":216},[101,120705,120706],{"class":216}," a+r",[101,120708,120680],{"class":216},[101,120710,566],{"class":160},[101,120712,120713],{"class":111},"   \n",[101,120715,120716,120718,120720,120722,120724],{"class":103,"line":1610},[101,120717,24565],{"class":1950},[101,120719,24568],{"class":216},[101,120721,120706],{"class":216},[101,120723,120691],{"class":216},[101,120725,119228],{"class":160},[55,120727,120728],{"start":1166},[58,120729,120730],{},"检查是否安装成功",[92,120732,120734],{"className":118503,"code":120733,"language":118505,"meta":20,"style":20},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[98,120735,120736,120741],{"__ignoreMap":20},[101,120737,120738],{"class":103,"line":104},[101,120739,120740],{"class":170},"# 检查cuDNN版本命令\n",[101,120742,120743,120746,120749,120751,120753,120756,120759],{"class":103,"line":21},[101,120744,120745],{"class":1950},"cat",[101,120747,120748],{"class":216}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[101,120750,25098],{"class":107},[101,120752,30225],{"class":1950},[101,120754,120755],{"class":216}," CUDNN_MAJOR",[101,120757,120758],{"class":160}," -A",[101,120760,47712],{"class":160},[10,120762,120763],{},"出现下图这样的就是安装成功了",[10,120765,120766],{},[1449,120767],{"alt":20,"src":120768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[55,120770,120771],{"start":1181},[58,120772,120773],{},"软链接(一般不需要)",[92,120775,120777],{"className":118503,"code":120776,"language":118505,"meta":20,"style":20},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[98,120778,120779,120784],{"__ignoreMap":20},[101,120780,120781],{"class":103,"line":104},[101,120782,120783],{"class":170},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[101,120785,120786,120788],{"class":103,"line":21},[101,120787,24565],{"class":1950},[101,120789,120790],{"class":216}," ldconfig\n",[10,120792,120793],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[92,120795,120800],{"className":120796,"code":120797,"language":120798,"meta":120799,"style":20},"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",[98,120801,120802,120807,120812,120817,120822,120827,120832],{"__ignoreMap":20},[101,120803,120804],{"class":103,"line":104},[101,120805,120806],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[101,120808,120809],{"class":103,"line":21},[101,120810,120811],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[101,120813,120814],{"class":103,"line":1166},[101,120815,120816],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[101,120818,120819],{"class":103,"line":1181},[101,120820,120821],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[101,120823,120824],{"class":103,"line":1187},[101,120825,120826],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[101,120828,120829],{"class":103,"line":1201},[101,120830,120831],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[101,120833,120834],{"class":103,"line":1207},[101,120835,120836],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[10,120838,120839],{},"运行下方的命令",[92,120841,120843],{"className":118503,"code":120842,"language":118505,"meta":20,"style":20},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[98,120844,120845,120850,120857,120862],{"__ignoreMap":20},[101,120846,120847],{"class":103,"line":104},[101,120848,120849],{"class":170},"# cd进入CUDA路径\n",[101,120851,120852,120854],{"class":103,"line":21},[101,120853,101256],{"class":160},[101,120855,120856],{"class":216}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[101,120858,120859],{"class":103,"line":1166},[101,120860,120861],{"class":170}," # 查看本路径下的需要软链接的文件名\n",[101,120863,120864],{"class":103,"line":1181},[101,120865,120866],{"class":1950}," ls\n",[10,120868,120869],{},[1449,120870],{"alt":20,"src":120871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[10,120873,120874,120875,18398,120878,18398,120881,120884],{},"如上图，我需要将",[98,120876,120877],{},"libcudnn_xxx_xxxxx.so.8.9.7",[98,120879,120880],{},"libcudnn_xxx_xxxxx.so.8",[98,120882,120883],{},"libcudnn_xxx_xxxxx.so","软链接",[92,120886,120888],{"className":118503,"code":120887,"language":118505,"meta":20,"style":20},"# 创建符号链接。对于每个 .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",[98,120889,120890,120895,120911,120925,120939,120953,120967,120981,120995,121000,121006,121011],{"__ignoreMap":20},[101,120891,120892],{"class":103,"line":104},[101,120893,120894],{"class":170},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[101,120896,120897,120899,120902,120905,120908],{"class":103,"line":21},[101,120898,24565],{"class":1950},[101,120900,120901],{"class":216}," ln",[101,120903,120904],{"class":160}," -sf",[101,120906,120907],{"class":216}," libcudnn_cnn_train.so.8.9.7",[101,120909,120910],{"class":216}," libcudnn_cnn_train.so.8\n",[101,120912,120913,120915,120917,120919,120922],{"class":103,"line":1166},[101,120914,24565],{"class":1950},[101,120916,120901],{"class":216},[101,120918,120904],{"class":160},[101,120920,120921],{"class":216}," libcudnn_adv_infer.so.8.9.7",[101,120923,120924],{"class":216}," libcudnn_adv_infer.so.8\n",[101,120926,120927,120929,120931,120933,120936],{"class":103,"line":1181},[101,120928,24565],{"class":1950},[101,120930,120901],{"class":216},[101,120932,120904],{"class":160},[101,120934,120935],{"class":216}," libcudnn_adv_train.so.8.9.7",[101,120937,120938],{"class":216}," libcudnn_adv_train.so.8\n",[101,120940,120941,120943,120945,120947,120950],{"class":103,"line":1187},[101,120942,24565],{"class":1950},[101,120944,120901],{"class":216},[101,120946,120904],{"class":160},[101,120948,120949],{"class":216}," libcudnn_cnn_infer.so.8.9.7",[101,120951,120952],{"class":216}," libcudnn_cnn_infer.so.8\n",[101,120954,120955,120957,120959,120961,120964],{"class":103,"line":1201},[101,120956,24565],{"class":1950},[101,120958,120901],{"class":216},[101,120960,120904],{"class":160},[101,120962,120963],{"class":216}," libcudnn.so.8.9.7",[101,120965,120966],{"class":216}," libcudnn.so.8\n",[101,120968,120969,120971,120973,120975,120978],{"class":103,"line":1207},[101,120970,24565],{"class":1950},[101,120972,120901],{"class":216},[101,120974,120904],{"class":160},[101,120976,120977],{"class":216}," libcudnn_ops_infer.so.8.9.7",[101,120979,120980],{"class":216}," libcudnn_ops_infer.so.8\n",[101,120982,120983,120985,120987,120989,120992],{"class":103,"line":1298},[101,120984,24565],{"class":1950},[101,120986,120901],{"class":216},[101,120988,120904],{"class":160},[101,120990,120991],{"class":216}," libcudnn_ops_train.so.8.9.7",[101,120993,120994],{"class":216}," libcudnn_ops_train.so.8\n",[101,120996,120997],{"class":103,"line":1304},[101,120998,120999],{"class":170},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[101,121001,121002,121004],{"class":103,"line":1316},[101,121003,24565],{"class":1950},[101,121005,120790],{"class":216},[101,121007,121008],{"class":103,"line":1599},[101,121009,121010],{"class":170},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[101,121012,121013,121015,121018,121021,121023,121026],{"class":103,"line":1604},[101,121014,26750],{"class":1950},[101,121016,121017],{"class":160}," -l",[101,121019,121020],{"class":216}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[101,121022,566],{"class":160},[101,121024,121025],{"class":216},".so",[101,121027,119228],{"class":160},[72,121029,121031],{"id":121030},"_355-常见问题","3.5.5 常见问题",[55,121033,121034],{},[58,121035,121036],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[92,121038,121040],{"className":118503,"code":121039,"language":118505,"meta":20,"style":20},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[98,121041,121042],{"__ignoreMap":20},[101,121043,121044,121046,121048],{"class":103,"line":104},[101,121045,24565],{"class":1950},[101,121047,118563],{"class":216},[101,121049,121050],{"class":216}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[10,121052,121053],{},"blacklist-nouveau.conf文件内容如下：",[92,121055,121057],{"className":118503,"code":121056,"language":118505,"meta":20,"style":20},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[98,121058,121059,121067,121074,121086,121096],{"__ignoreMap":20},[101,121060,121061,121064],{"class":103,"line":104},[101,121062,121063],{"class":1950},"blacklist",[101,121065,121066],{"class":216}," nouveau\n",[101,121068,121069,121071],{"class":103,"line":21},[101,121070,121063],{"class":1950},[101,121072,121073],{"class":216}," lbm-nouveau\n",[101,121075,121076,121078,121081,121084],{"class":103,"line":1166},[101,121077,115910],{"class":1950},[101,121079,121080],{"class":216}," nouveau",[101,121082,121083],{"class":216}," modeset=",[101,121085,3072],{"class":160},[101,121087,121088,121091,121093],{"class":103,"line":1181},[101,121089,121090],{"class":160},"alias",[101,121092,121080],{"class":216},[101,121094,121095],{"class":216}," off\n",[101,121097,121098,121100,121103],{"class":103,"line":1187},[101,121099,121090],{"class":160},[101,121101,121102],{"class":216}," lbm-nouveau",[101,121104,121095],{"class":216},[10,121106,121107],{},"接着运行下方命令",[92,121109,121111],{"className":118503,"code":121110,"language":118505,"meta":20,"style":20},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[98,121112,121113,121123,121128],{"__ignoreMap":20},[101,121114,121115,121117,121120],{"class":103,"line":104},[101,121116,24565],{"class":1950},[101,121118,121119],{"class":216}," update-initramfs",[101,121121,121122],{"class":160}," -u\n",[101,121124,121125],{"class":103,"line":21},[101,121126,121127],{"class":1950},"或者\n",[101,121129,121130,121132,121135],{"class":103,"line":1166},[101,121131,24565],{"class":1950},[101,121133,121134],{"class":216}," dracut",[101,121136,121137],{"class":160}," --force\n",[10,121139,121140],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[92,121142,121144],{"className":118503,"code":121143,"language":118505,"meta":20,"style":20},"lsmod | grep nouveau\n",[98,121145,121146],{"__ignoreMap":20},[101,121147,121148,121151,121153,121155],{"class":103,"line":104},[101,121149,121150],{"class":1950},"lsmod",[101,121152,25098],{"class":107},[101,121154,30225],{"class":1950},[101,121156,121066],{"class":216},[55,121158,121159],{"start":21},[58,121160,121161],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[92,121163,121165],{"className":118503,"code":121164,"language":118505,"meta":20,"style":20},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[98,121166,121167],{"__ignoreMap":20},[101,121168,121169,121171,121173],{"class":103,"line":104},[101,121170,24565],{"class":1950},[101,121172,118563],{"class":216},[101,121174,121175],{"class":216}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[10,121177,121178],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[92,121180,121182],{"className":118503,"code":121181,"language":118505,"meta":20,"style":20},"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",[98,121183,121184,121192,121200,121208,121215,121223,121233,121241],{"__ignoreMap":20},[101,121185,121186,121189],{"class":103,"line":104},[101,121187,121188],{"class":1950},"Section",[101,121190,121191],{"class":216}," \"OutputClass\"\n",[101,121193,121194,121197],{"class":103,"line":21},[101,121195,121196],{"class":1950},"   Identifier",[101,121198,121199],{"class":216}," \"nvidia\"\n",[101,121201,121202,121205],{"class":103,"line":1166},[101,121203,121204],{"class":1950},"   MatchDriver",[101,121206,121207],{"class":216}," \"nvidia-drm\"\n",[101,121209,121210,121213],{"class":103,"line":1181},[101,121211,121212],{"class":1950},"   Driver",[101,121214,121199],{"class":216},[101,121216,121217,121220],{"class":103,"line":1187},[101,121218,121219],{"class":1950},"   Option",[101,121221,121222],{"class":216}," \"AllowEmptyInitialConfiguration\"\n",[101,121224,121225,121227,121230],{"class":103,"line":1201},[101,121226,121219],{"class":1950},[101,121228,121229],{"class":216}," \"PrimaryGPU\"",[101,121231,121232],{"class":216}," \"yes\"\n",[101,121234,121235,121238],{"class":103,"line":1207},[101,121236,121237],{"class":1950},"   ModulePath",[101,121239,121240],{"class":216}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[101,121242,121243],{"class":103,"line":1298},[101,121244,121245],{"class":1950},"EndSection\n",[55,121247,121248],{"start":1166},[58,121249,121250],{},"安装N卡驱动提示错误",[92,121252,121254],{"className":120796,"code":121253,"language":120798,"meta":120799,"style":20},"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",[98,121255,121256],{"__ignoreMap":20},[101,121257,121258],{"class":103,"line":104},[101,121259,121253],{},[55,121261,121262],{},[58,121263,121264],{},"检查当前运行的内核版本：",[10,121266,121267],{},"运行以下命令以查看你当前正在使用的内核版本：",[92,121269,121271],{"className":117276,"code":121270,"language":117278,"meta":20,"style":20},"uname -r\n",[98,121272,121273],{"__ignoreMap":20},[101,121274,121275,121277],{"class":103,"line":104},[101,121276,70193],{"class":1950},[101,121278,121279],{"class":160}," -r\n",[55,121281,121282],{"start":21},[58,121283,121284],{},"安装内核开发文件：",[10,121286,121287,121288,121291],{},"确保你已经安装了与当前内核版本相匹配的 ",[98,121289,121290],{},"kernel-devel"," 包。运行以下命令来安装：",[92,121293,121295],{"className":117276,"code":121294,"language":117278,"meta":20,"style":20},"sudo dnf install kernel-devel-$(uname -r)\n",[98,121296,121297],{"__ignoreMap":20},[101,121298,121299,121301,121303,121305,121308,121310,121312,121314],{"class":103,"line":104},[101,121300,24565],{"class":1950},[101,121302,26304],{"class":216},[101,121304,23823],{"class":216},[101,121306,121307],{"class":216}," kernel-devel-",[101,121309,25088],{"class":111},[101,121311,70193],{"class":1950},[101,121313,119619],{"class":160},[101,121315,118],{"class":111},[10,121317,121318],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[55,121320,121321],{"start":1166},[58,121322,121323],{},"安装内核源代码（如果需要）：",[10,121325,121326],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[92,121328,121330],{"className":117276,"code":121329,"language":117278,"meta":20,"style":20},"sudo dnf install kernel-headers kernel-source\n",[98,121331,121332],{"__ignoreMap":20},[101,121333,121334,121336,121338,121340,121343],{"class":103,"line":104},[101,121335,24565],{"class":1950},[101,121337,26304],{"class":216},[101,121339,23823],{"class":216},[101,121341,121342],{"class":216}," kernel-headers",[101,121344,121345],{"class":216}," kernel-source\n",[55,121347,121348],{"start":1181},[58,121349,121350],{},"检查安装：",[10,121352,121353,121354,121357],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[98,121355,121356],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[92,121359,121361],{"className":117276,"code":121360,"language":117278,"meta":20,"style":20},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[98,121362,121363],{"__ignoreMap":20},[101,121364,121365,121367],{"class":103,"line":104},[101,121366,26750],{"class":1950},[101,121368,121369],{"class":216}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[10,121371,121372,121373,121376],{},"如果仍然遇到问题，可以通过 ",[98,121374,121375],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5114,121378,121379],{},"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":20,"searchDepth":21,"depth":21,"links":121381},[121382,121386,121396,121400,121401],{"id":118479,"depth":21,"text":118480,"children":121383},[121384,121385],{"id":118489,"depth":1166,"text":118490},{"id":118499,"depth":1166,"text":118500},{"id":118699,"depth":21,"text":118700,"children":121387},[121388,121389,121390,121391,121392,121393,121394,121395],{"id":118703,"depth":1166,"text":118704},{"id":118773,"depth":1166,"text":118774},{"id":118862,"depth":1166,"text":118863},{"id":119107,"depth":1166,"text":119108},{"id":119177,"depth":1166,"text":119178},{"id":119244,"depth":1166,"text":119245},{"id":119279,"depth":1166,"text":119280},{"id":119334,"depth":1166,"text":119335},{"id":119385,"depth":21,"text":119386,"children":121397},[121398,121399],{"id":119389,"depth":1166,"text":119390},{"id":119469,"depth":1166,"text":119470},{"id":119655,"depth":21,"text":119656},{"id":119828,"depth":21,"text":119829,"children":121402},[121403,121404,121405,121406,121407],{"id":119832,"depth":1166,"text":119833},{"id":119873,"depth":1166,"text":119874},{"id":120160,"depth":1166,"text":120161},{"id":120534,"depth":1166,"text":120535},{"id":121030,"depth":1166,"text":121031},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118471,"description":23365},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121414,"title":121415,"body":121416,"description":23365,"extension":24,"meta":121756,"navigation":27,"path":121757,"seo":121758,"stem":121759,"__hash__":121760},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121417,"toc":121754},[121418,121421,121426,121429,121675,121680,121683,121719,121722,121751],[39,121419,121415],{"id":121420},"_4-命令教程长期积累",[55,121422,121423],{},[58,121424,121425],{},"大多数命令",[10,121427,121428],{},"常用 Linux 命令速查：",[92,121430,121432],{"className":117276,"code":121431,"language":117278,"meta":20,"style":20},"# 文件与目录\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",[98,121433,121434,121439,121446,121453,121461,121468,121475,121483,121491,121498,121505,121513,121517,121522,121529,121537,121544,121548,121553,121560,121568,121576,121584,121592,121596,121601,121609,121616,121623,121631,121639,121643,121648,121657,121666],{"__ignoreMap":20},[101,121435,121436],{"class":103,"line":104},[101,121437,121438],{"class":170},"# 文件与目录\n",[101,121440,121441,121443],{"class":103,"line":21},[101,121442,26750],{"class":1950},[101,121444,121445],{"class":170},"        # 列出目录内容\n",[101,121447,121448,121450],{"class":103,"line":1166},[101,121449,101256],{"class":160},[101,121451,121452],{"class":170},"        # 切换目录\n",[101,121454,121455,121458],{"class":103,"line":1181},[101,121456,121457],{"class":160},"pwd",[101,121459,121460],{"class":170},"       # 显示当前路径\n",[101,121462,121463,121465],{"class":103,"line":1187},[101,121464,101246],{"class":1950},[101,121466,121467],{"class":170},"     # 创建目录\n",[101,121469,121470,121472],{"class":103,"line":1201},[101,121471,25311],{"class":1950},[101,121473,121474],{"class":170},"        # 删除文件或目录\n",[101,121476,121477,121480],{"class":103,"line":1207},[101,121478,121479],{"class":1950},"cp",[101,121481,121482],{"class":170},"        # 复制文件或目录\n",[101,121484,121485,121488],{"class":103,"line":1298},[101,121486,121487],{"class":1950},"mv",[101,121489,121490],{"class":170},"        # 移动\u002F重命名文件或目录\n",[101,121492,121493,121495],{"class":103,"line":1304},[101,121494,101263],{"class":1950},[101,121496,121497],{"class":170},"     # 创建空文件\n",[101,121499,121500,121502],{"class":103,"line":1316},[101,121501,120745],{"class":1950},[101,121503,121504],{"class":170},"       # 查看文件内容\n",[101,121506,121507,121510],{"class":103,"line":1599},[101,121508,121509],{"class":1950},"head\u002Ftail",[101,121511,121512],{"class":170}," # 查看文件头部\u002F尾部\n",[101,121514,121515],{"class":103,"line":1604},[101,121516,2387],{"emptyLinePlaceholder":27},[101,121518,121519],{"class":103,"line":1610},[101,121520,121521],{"class":170},"# 权限管理\n",[101,121523,121524,121526],{"class":103,"line":1615},[101,121525,24600],{"class":1950},[101,121527,121528],{"class":170},"     # 修改文件权限\n",[101,121530,121531,121534],{"class":103,"line":1629},[101,121532,121533],{"class":1950},"chown",[101,121535,121536],{"class":170},"     # 修改文件所有者\n",[101,121538,121539,121541],{"class":103,"line":1634},[101,121540,24565],{"class":1950},[101,121542,121543],{"class":170},"      # 以管理员身份执行\n",[101,121545,121546],{"class":103,"line":1640},[101,121547,2387],{"emptyLinePlaceholder":27},[101,121549,121550],{"class":103,"line":1661},[101,121551,121552],{"class":170},"# 系统信息\n",[101,121554,121555,121557],{"class":103,"line":1666},[101,121556,70193],{"class":1950},[101,121558,121559],{"class":170},"     # 系统信息\n",[101,121561,121562,121565],{"class":103,"line":1680},[101,121563,121564],{"class":1950},"df",[101,121566,121567],{"class":170},"        # 磁盘使用情况\n",[101,121569,121570,121573],{"class":103,"line":1685},[101,121571,121572],{"class":1950},"free",[101,121574,121575],{"class":170},"      # 内存使用情况\n",[101,121577,121578,121581],{"class":103,"line":1714},[101,121579,121580],{"class":1950},"top\u002Fhtop",[101,121582,121583],{"class":170},"  # 进程监控\n",[101,121585,121586,121589],{"class":103,"line":1719},[101,121587,121588],{"class":1950},"ps",[101,121590,121591],{"class":170},"        # 查看进程\n",[101,121593,121594],{"class":103,"line":1736},[101,121595,2387],{"emptyLinePlaceholder":27},[101,121597,121598],{"class":103,"line":1741},[101,121599,121600],{"class":170},"# 网络\n",[101,121602,121603,121606],{"class":103,"line":1746},[101,121604,121605],{"class":1950},"ping",[101,121607,121608],{"class":170},"      # 测试网络连通性\n",[101,121610,121611,121613],{"class":103,"line":1751},[101,121612,26838],{"class":1950},[101,121614,121615],{"class":170},"      # 发送 HTTP 请求\n",[101,121617,121618,121620],{"class":103,"line":1765},[101,121619,120269],{"class":1950},[101,121621,121622],{"class":170},"      # 下载文件\n",[101,121624,121625,121628],{"class":103,"line":1770},[101,121626,121627],{"class":1950},"ssh",[101,121629,121630],{"class":170},"       # 远程登录\n",[101,121632,121633,121636],{"class":103,"line":2564},[101,121634,121635],{"class":1950},"scp",[101,121637,121638],{"class":170},"       # 远程文件传输\n",[101,121640,121641],{"class":103,"line":2578},[101,121642,2387],{"emptyLinePlaceholder":27},[101,121644,121645],{"class":103,"line":2586},[101,121646,121647],{"class":170},"# 包管理（Debian\u002FUbuntu）\n",[101,121649,121650,121652,121654],{"class":103,"line":2591},[101,121651,117348],{"class":1950},[101,121653,117327],{"class":216},[101,121655,121656],{"class":170},"   # 更新软件源\n",[101,121658,121659,121661,121663],{"class":103,"line":2597},[101,121660,117348],{"class":1950},[101,121662,23823],{"class":216},[101,121664,121665],{"class":170},"  # 安装软件包\n",[101,121667,121668,121670,121672],{"class":103,"line":2603},[101,121669,117348],{"class":1950},[101,121671,26068],{"class":216},[101,121673,121674],{"class":170},"   # 卸载软件包\n",[55,121676,121677],{"start":21},[58,121678,121679],{},"KDE Dolphin 以root打开",[10,121681,121682],{},"kde5",[92,121684,121686],{"className":117276,"code":121685,"language":117278,"meta":20,"style":20},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[98,121687,121688],{"__ignoreMap":20},[101,121689,121690,121693,121696,121699,121701,121703,121706,121709,121711,121714,121716],{"class":103,"line":104},[101,121691,121692],{"class":1950},"pkexec",[101,121694,121695],{"class":216}," env",[101,121697,121698],{"class":216}," DISPLAY=",[101,121700,28132],{"class":111},[101,121702,28190],{"class":216},[101,121704,121705],{"class":111},"$XAUTHORITY ",[101,121707,121708],{"class":216},"KDE_SESSION_VERSION=",[101,121710,430],{"class":160},[101,121712,121713],{"class":216}," KDE_FULL_SESSION=",[101,121715,1349],{"class":160},[101,121717,121718],{"class":216}," dolphin\n",[10,121720,121721],{},"kde6",[92,121723,121725],{"className":117276,"code":121724,"language":117278,"meta":20,"style":20},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[98,121726,121727],{"__ignoreMap":20},[101,121728,121729,121731,121733,121735,121737,121739,121741,121743,121745,121747,121749],{"class":103,"line":104},[101,121730,121692],{"class":1950},[101,121732,121695],{"class":216},[101,121734,121698],{"class":216},[101,121736,28132],{"class":111},[101,121738,28190],{"class":216},[101,121740,121705],{"class":111},[101,121742,121708],{"class":216},[101,121744,455],{"class":160},[101,121746,121713],{"class":216},[101,121748,1349],{"class":160},[101,121750,121718],{"class":216},[5114,121752,121753],{},"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":20,"searchDepth":21,"depth":21,"links":121755},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121415,"description":23365},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121762,"title":121763,"body":121764,"description":23365,"extension":24,"meta":121778,"navigation":27,"path":121779,"seo":121780,"stem":121781,"__hash__":121782},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121765,"toc":121776},[121766,121769],[39,121767,121763],{"id":121768},"_5-各种环境配置",[10,121770,121771],{},[14,121772,121775],{"href":121773,"rel":121774},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[18],"电控组环境搭建大全",{"title":20,"searchDepth":21,"depth":21,"links":121777},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121763,"description":23365},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121784,"title":121785,"body":121786,"description":23365,"extension":24,"meta":122134,"navigation":27,"path":122135,"seo":122136,"stem":122137,"__hash__":122138},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121787,"toc":122126},[121788,121791,121795,121799,121803,121808,121815,121819,122112,122116,122123],[39,121789,121785],{"id":121790},"_6-拓展功能",[43,121792,121794],{"id":121793},"_61-wine","6.1 Wine",[43,121796,121798],{"id":121797},"_62-android","6.2 Android",[72,121800,121802],{"id":121801},"_621-i卡a卡","6.2.1 I卡、A卡",[55,121804,121805],{},[58,121806,121807],{},"Wayland-Waydroid(体验超级好)",[10,121809,121810,121811],{},"Waydroid 官网与安装指南：",[14,121812,121813],{"href":121813,"rel":121814},"https:\u002F\u002Fwaydro.id\u002F",[18],[72,121816,121818],{"id":121817},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[55,121820,121821],{},[58,121822,121823,121824,121826,121827,121831,121833,121836,121841,122038],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53705,121825],{},"BlissOS 官网下载：",[14,121828,121829],{"href":121829,"rel":121830},"https:\u002F\u002Fblissos.org\u002F",[18],[53705,121832],{},[1449,121834],{"alt":20,"src":121835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[55,121837,121838],{"start":1166},[58,121839,121840],{},"比较推荐的配置",[92,121842,121844],{"className":117276,"code":121843,"language":117278,"meta":20,"style":20},"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",[98,121845,121846,121853,121863,121873,121883,121895,121905,121912,121922,121931,121940,121950,121960,121969,121979,121989,122001,122011,122020,122030],{"__ignoreMap":20},[101,121847,121848,121851],{"class":103,"line":104},[101,121849,121850],{"class":1950},"qemu-system-x86_64",[101,121852,24667],{"class":160},[101,121854,121855,121858,121861],{"class":103,"line":21},[101,121856,121857],{"class":160},"        -M",[101,121859,121860],{"class":216}," q35,vmport=off",[101,121862,24667],{"class":160},[101,121864,121865,121868,121871],{"class":103,"line":1166},[101,121866,121867],{"class":160},"        -accel",[101,121869,121870],{"class":216}," kvm",[101,121872,24667],{"class":160},[101,121874,121875,121878,121881],{"class":103,"line":1181},[101,121876,121877],{"class":160},"        -cpu",[101,121879,121880],{"class":216}," qemu64,+sse3,+sse4.2",[101,121882,24667],{"class":160},[101,121884,121885,121888,121891,121893],{"class":103,"line":1187},[101,121886,121887],{"class":160},"        -smp",[101,121889,121890],{"class":216}," 8,cores=",[101,121892,404],{"class":160},[101,121894,24667],{"class":160},[101,121896,121897,121900,121903],{"class":103,"line":1201},[101,121898,121899],{"class":160},"        -m",[101,121901,121902],{"class":216}," 6G",[101,121904,24667],{"class":160},[101,121906,121907,121910],{"class":103,"line":1207},[101,121908,121909],{"class":160},"        -usb",[101,121911,24667],{"class":160},[101,121913,121914,121917,121920],{"class":103,"line":1298},[101,121915,121916],{"class":160},"        -device",[101,121918,121919],{"class":216}," virtio-tablet",[101,121921,24667],{"class":160},[101,121923,121924,121926,121929],{"class":103,"line":1304},[101,121925,121916],{"class":160},[101,121927,121928],{"class":216}," virtio-keyboard",[101,121930,24667],{"class":160},[101,121932,121933,121935,121938],{"class":103,"line":1316},[101,121934,121916],{"class":160},[101,121936,121937],{"class":216}," usb-tablet",[101,121939,24667],{"class":160},[101,121941,121942,121945,121948],{"class":103,"line":1599},[101,121943,121944],{"class":160},"        -bios",[101,121946,121947],{"class":216}," OVMF-pure-efi64.fd",[101,121949,24667],{"class":160},[101,121951,121952,121955,121958],{"class":103,"line":1604},[101,121953,121954],{"class":160},"        -net",[101,121956,121957],{"class":216}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[101,121959,24667],{"class":160},[101,121961,121962,121964,121967],{"class":103,"line":1610},[101,121963,121954],{"class":160},[101,121965,121966],{"class":216}," nic,model=virtio",[101,121968,24667],{"class":160},[101,121970,121971,121974,121977],{"class":103,"line":1615},[101,121972,121973],{"class":160},"        -audio",[101,121975,121976],{"class":216}," sdl,model=hda",[101,121978,24667],{"class":160},[101,121980,121981,121984,121987],{"class":103,"line":1629},[101,121982,121983],{"class":160},"        -display",[101,121985,121986],{"class":216}," sdl,gl=on,show-cursor=on",[101,121988,24667],{"class":160},[101,121990,121991,121993,121996,121999],{"class":103,"line":1634},[101,121992,121916],{"class":160},[101,121994,121995],{"class":216}," virtio-vga-gl,xres=1920,yres=",[101,121997,121998],{"class":160},"1080",[101,122000,24667],{"class":160},[101,122002,122003,122006,122009],{"class":103,"line":1640},[101,122004,122005],{"class":160},"        -drive",[101,122007,122008],{"class":216}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[101,122010,24667],{"class":160},[101,122012,122013,122015,122018],{"class":103,"line":1661},[101,122014,122005],{"class":160},[101,122016,122017],{"class":216}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[101,122019,24667],{"class":160},[101,122021,122022,122025,122028],{"class":103,"line":1666},[101,122023,122024],{"class":160},"        -monitor",[101,122026,122027],{"class":216}," stdio",[101,122029,24667],{"class":160},[101,122031,122032,122035],{"class":103,"line":1680},[101,122033,122034],{"class":160},"        -serial",[101,122036,122037],{"class":216}," none\n",[55,122039,122040],{"start":1187},[58,122041,122042,122043],{},"常用操作：",[55,122044,122045,122048,122104],{},[58,122046,122047],{},"全屏：Ctrl+Alt+F",[58,122049,122050,122051,122056],{},"adb调试",[55,122052,122053],{},[58,122054,122055],{},"使Linux与Android用ADB连接。",[92,122057,122059],{"className":117276,"code":122058,"language":117278,"meta":20,"style":20},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[98,122060,122061,122066,122077,122082,122094,122099],{"__ignoreMap":20},[101,122062,122063],{"class":103,"line":104},[101,122064,122065],{"class":170},"# 连接安卓\n",[101,122067,122068,122071,122074],{"class":103,"line":21},[101,122069,122070],{"class":1950},"adb",[101,122072,122073],{"class":216}," connect",[101,122075,122076],{"class":160}," 127.0.0.1\n",[101,122078,122079],{"class":103,"line":1166},[101,122080,122081],{"class":170},"# 打开shell\n",[101,122083,122084,122086,122088,122091],{"class":103,"line":1181},[101,122085,122070],{"class":1950},[101,122087,26872],{"class":160},[101,122089,122090],{"class":216}," 127.0.0.1:5555",[101,122092,122093],{"class":216}," shell\n",[101,122095,122096],{"class":103,"line":1187},[101,122097,122098],{"class":170},"# 使用root权限\n",[101,122100,122101],{"class":103,"line":1201},[101,122102,122103],{"class":1950},"su\n",[58,122105,122106,122107],{},"中文输入法",[55,122108,122109],{},[58,122110,122111],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[43,122113,122115],{"id":122114},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[10,122117,122118,122119],{},"rEFInd 官网与文档：",[14,122120,122121],{"href":122121,"rel":122122},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[18],[5114,122124,122125],{},"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":20,"searchDepth":21,"depth":21,"links":122127},[122128,122129,122133],{"id":121793,"depth":21,"text":121794},{"id":121797,"depth":21,"text":121798,"children":122130},[122131,122132],{"id":121801,"depth":1166,"text":121802},{"id":121817,"depth":1166,"text":121818},{"id":122114,"depth":21,"text":122115},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121785,"description":23365},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122140,"title":122141,"body":122142,"description":23365,"extension":24,"meta":125441,"navigation":27,"path":125442,"seo":125443,"stem":125444,"__hash__":125445},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122143,"toc":125415},[122144,122147,122151,122154,122161,122411,122414,122486,122489,122493,122497,122502,122505,122508,122511,122516,122519,122522,122525,122530,122533,122538,122541,122544,122549,122552,122557,122560,122564,122568,122571,122576,122579,122593,122596,122599,122608,122611,122620,122623,122626,122635,122638,122647,122650,122653,122662,122665,122668,122683,122686,122689,122698,122703,122706,122709,122718,122721,122730,122733,122742,122745,122754,122759,122762,122770,122775,122778,122787,122790,122798,122803,122806,122815,122818,122821,122825,122828,122833,122836,122841,122855,122860,122865,122876,122881,122887,122892,122907,122912,122915,122920,122925,122930,122938,122943,122950,122955,122966,122971,122974,122978,122981,122984,122989,122992,123011,123016,123019,123028,123033,123036,123058,123061,123091,123094,123099,123102,123116,123121,123140,123143,123146,123151,123163,123168,123173,123176,123181,123184,123199,123202,123207,123212,123216,123221,123261,123264,123268,123274,123280,123285,123288,123295,123300,123307,123310,123313,123320,123334,123337,123397,123400,123414,123426,123429,123432,123435,123499,123502,123505,123508,123528,123531,123536,123543,123547,123550,123554,123559,123564,123568,123571,123574,123616,123621,123624,123646,123661,123663,123668,123680,123740,123742,123744,123798,123800,123802,123808,123813,123816,123821,123825,123828,123890,123895,123898,123900,123904,123916,123998,124000,124002,124056,124062,124064,124068,124073,124075,124080,124084,124104,124139,124143,124146,124149,124152,124159,124162,124174,124177,124192,124195,124214,124262,124265,124282,124285,124299,124304,124307,124316,124331,124343,124381,124386,124395,124400,124405,124431,124440,124444,124448,124453,124456,124460,124464,124469,124472,124477,124480,124485,124488,124493,124496,124500,124505,124508,124513,124516,124520,124525,124528,124533,124536,124541,124544,124548,124553,124556,124561,124564,124569,124572,124576,124581,124584,124589,124592,124597,124600,124605,124608,124613,124616,124621,124624,124628,124633,124636,124641,124648,124652,124657,124660,124665,124668,124672,124677,124680,124683,124686,124689,124692,124696,124699,124709,124714,124719,124741,124746,124751,124758,124762,124767,124770,124773,124778,124781,124784,124787,124790,124793,124796,124799,124802,124805,124808,124811,124814,124819,124824,124829,124834,124839,124844,124849,124852,124856,124859,124863,124868,124873,124878,124883,124887,124893,124901,124906,124909,124914,124929,124932,124937,124971,124986,124989,125044,125070,125082,125085,125094,125097,125112,125117,125120,125126,125131,125134,125139,125142,125147,125152,125159,125162,125177,125180,125215,125220,125228,125266,125269,125272,125277,125280,125285,125296,125330,125335,125338,125347,125352,125358,125361,125366,125375,125380,125383,125386,125391,125399,125402,125407,125412],[39,122145,122141],{"id":122146},"_7-其他操作",[43,122148,122150],{"id":122149},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[10,122152,122153],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[10,122155,122156,122157,122160],{},"进入工控机的硬盘目录，进入",[98,122158,122159],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[92,122162,122166],{"className":122163,"code":122164,"language":122165,"meta":20,"style":20},"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",[98,122167,122168,122176,122187,122194,122201,122213,122220,122232,122243,122254,122261,122268,122275,122287,122299,122306,122318,122330,122337,122349,122361,122373,122384,122391,122402],{"__ignoreMap":20},[101,122169,122170,122173],{"class":103,"line":104},[101,122171,122172],{"class":51289},"network",[101,122174,122175],{"class":111},": \n",[101,122177,122178,122181,122183,122185],{"class":103,"line":21},[101,122179,122180],{"class":51289},"  version",[101,122182,51426],{"class":111},[101,122184,189],{"class":160},[101,122186,2661],{"class":111},[101,122188,122189,122192],{"class":103,"line":1166},[101,122190,122191],{"class":51289},"  wifis",[101,122193,122175],{"class":111},[101,122195,122196,122199],{"class":103,"line":1181},[101,122197,122198],{"class":51289},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[101,122200,122175],{"class":111},[101,122202,122203,122206,122208,122211],{"class":103,"line":1187},[101,122204,122205],{"class":51289},"      renderer",[101,122207,51426],{"class":111},[101,122209,122210],{"class":216},"NetworkManager",[101,122212,2661],{"class":111},[101,122214,122215,122218],{"class":103,"line":1201},[101,122216,122217],{"class":51289},"      match",[101,122219,122175],{"class":111},[101,122221,122222,122225,122227,122230],{"class":103,"line":1207},[101,122223,122224],{"class":51289},"        name",[101,122226,51426],{"class":111},[101,122228,122229],{"class":216},"\"wlan0\"",[101,122231,2661],{"class":111},[101,122233,122234,122237,122239,122241],{"class":103,"line":1298},[101,122235,122236],{"class":51289},"      dhcp4",[101,122238,51426],{"class":111},[101,122240,1349],{"class":160},[101,122242,2661],{"class":111},[101,122244,122245,122248,122250,122252],{"class":103,"line":1304},[101,122246,122247],{"class":51289},"      dhcp6",[101,122249,51426],{"class":111},[101,122251,1349],{"class":160},[101,122253,2661],{"class":111},[101,122255,122256,122259],{"class":103,"line":1316},[101,122257,122258],{"class":51289},"      access-points",[101,122260,122175],{"class":111},[101,122262,122263,122266],{"class":103,"line":1599},[101,122264,122265],{"class":216},"        \"EMIS_Vinci_Robocon_5G\"",[101,122267,122175],{"class":111},[101,122269,122270,122273],{"class":103,"line":1604},[101,122271,122272],{"class":51289},"          auth",[101,122274,122175],{"class":111},[101,122276,122277,122280,122282,122285],{"class":103,"line":1610},[101,122278,122279],{"class":51289},"            key-management",[101,122281,51426],{"class":111},[101,122283,122284],{"class":216},"\"psk\"",[101,122286,2661],{"class":111},[101,122288,122289,122292,122294,122297],{"class":103,"line":1615},[101,122290,122291],{"class":51289},"            password",[101,122293,51426],{"class":111},[101,122295,122296],{"class":216},"\"vinci666\"",[101,122298,2661],{"class":111},[101,122300,122301,122304],{"class":103,"line":1629},[101,122302,122303],{"class":51289},"          networkmanager",[101,122305,122175],{"class":111},[101,122307,122308,122311,122313,122316],{"class":103,"line":1634},[101,122309,122310],{"class":51289},"            uuid",[101,122312,51426],{"class":111},[101,122314,122315],{"class":216},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[101,122317,2661],{"class":111},[101,122319,122320,122323,122325,122328],{"class":103,"line":1640},[101,122321,122322],{"class":51289},"            name",[101,122324,51426],{"class":111},[101,122326,122327],{"class":216},"\"EMIS_Vinci_Robocon_5G\"",[101,122329,2661],{"class":111},[101,122331,122332,122335],{"class":103,"line":1661},[101,122333,122334],{"class":51289},"            passthrough",[101,122336,122175],{"class":111},[101,122338,122339,122342,122344,122347],{"class":103,"line":1666},[101,122340,122341],{"class":51289},"              wifi-security.auth-alg",[101,122343,51426],{"class":111},[101,122345,122346],{"class":216},"\"open\"",[101,122348,2661],{"class":111},[101,122350,122351,122354,122356,122359],{"class":103,"line":1680},[101,122352,122353],{"class":51289},"              ipv6.addr-gen-mode",[101,122355,51426],{"class":111},[101,122357,122358],{"class":216},"\"default\"",[101,122360,2661],{"class":111},[101,122362,122363,122366,122368,122371],{"class":103,"line":1685},[101,122364,122365],{"class":51289},"              ipv6.ip6-privacy",[101,122367,51426],{"class":111},[101,122369,122370],{"class":216},"\"-1\"",[101,122372,2661],{"class":111},[101,122374,122375,122378,122380,122382],{"class":103,"line":1714},[101,122376,122377],{"class":51289},"              proxy._",[101,122379,51426],{"class":111},[101,122381,7640],{"class":216},[101,122383,2661],{"class":111},[101,122385,122386,122389],{"class":103,"line":1719},[101,122387,122388],{"class":51289},"      networkmanager",[101,122390,122175],{"class":111},[101,122392,122393,122396,122398,122400],{"class":103,"line":1736},[101,122394,122395],{"class":51289},"        uuid",[101,122397,51426],{"class":111},[101,122399,122315],{"class":216},[101,122401,2661],{"class":111},[101,122403,122404,122406,122408],{"class":103,"line":1741},[101,122405,122224],{"class":51289},[101,122407,51426],{"class":111},[101,122409,122410],{"class":216},"\"EMIS_Vinci_Robocon_5G\"\n",[10,122412,122413],{},"将其改为新wifi的名和密码：",[92,122415,122417],{"className":122163,"code":122416,"language":122165,"meta":20,"style":20},"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",[98,122418,122419,122425,122434,122440,122447,122456,122464,122470,122476],{"__ignoreMap":20},[101,122420,122421,122423],{"class":103,"line":104},[101,122422,122172],{"class":51289},[101,122424,3726],{"class":111},[101,122426,122427,122429,122431],{"class":103,"line":21},[101,122428,122180],{"class":51289},[101,122430,51426],{"class":111},[101,122432,122433],{"class":160},"2\n",[101,122435,122436,122438],{"class":103,"line":1166},[101,122437,122191],{"class":51289},[101,122439,3726],{"class":111},[101,122441,122442,122445],{"class":103,"line":1181},[101,122443,122444],{"class":51289},"    wlan0",[101,122446,3726],{"class":111},[101,122448,122449,122451,122453],{"class":103,"line":1187},[101,122450,122236],{"class":51289},[101,122452,51426],{"class":111},[101,122454,122455],{"class":160},"true\n",[101,122457,122458,122460,122462],{"class":103,"line":1201},[101,122459,122247],{"class":51289},[101,122461,51426],{"class":111},[101,122463,122455],{"class":160},[101,122465,122466,122468],{"class":103,"line":1207},[101,122467,122258],{"class":51289},[101,122469,3726],{"class":111},[101,122471,122472,122474],{"class":103,"line":1298},[101,122473,122265],{"class":216},[101,122475,3726],{"class":111},[101,122477,122478,122481,122483],{"class":103,"line":1304},[101,122479,122480],{"class":51289},"          password",[101,122482,51426],{"class":111},[101,122484,122485],{"class":216},"\"vinci666\"\n",[10,122487,122488],{},"工控机开机即可连上网。",[43,122490,122492],{"id":122491},"_72-ssh远程开发","7.2 SSH远程开发",[72,122494,122496],{"id":122495},"_721-环境准备","7.2.1 环境准备",[10,122498,122499],{},[261,122500,122501],{},"1.硬件准备",[10,122503,122504],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[10,122506,122507],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[10,122509,122510],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[10,122512,122513],{},[261,122514,122515],{},"2.设置固定IP",[10,122517,122518],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[10,122520,122521],{},"1.进入设置界面",[10,122523,122524],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[10,122526,122527],{},[1449,122528],{"alt":20,"src":122529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[10,122531,122532],{},"2.配置所连接的网络",[10,122534,122535],{},[1449,122536],{"alt":20,"src":122537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[10,122539,122540],{},"3.设置固定IP",[10,122542,122543],{},"查看当前IP地址。",[10,122545,122546],{},[1449,122547],{"alt":20,"src":122548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[10,122550,122551],{},"设置固定IP。",[10,122553,122554],{},[1449,122555],{"alt":20,"src":122556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[10,122558,122559],{},"至此，IP配置完毕。",[72,122561,122563],{"id":122562},"_722-环境搭建","7.2.2 环境搭建",[10,122565,122566],{},[261,122567,25742],{},[10,122569,122570],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[10,122572,122573],{},[261,122574,122575],{},"实现",[10,122577,122578],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[55,122580,122581,122584,122587,122590],{},[58,122582,122583],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[58,122585,122586],{},"远程主机启动SSH服务；",[58,122588,122589],{},"本地主机登陆远程主机；",[58,122591,122592],{},"实现数据传输。",[10,122594,122595],{},"1.安装SSH客户端与服务端",[10,122597,122598],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[92,122600,122602],{"className":120796,"code":122601,"language":120798,"meta":120799,"style":20}," sudo apt install openssh-server\n",[98,122603,122604],{"__ignoreMap":20},[101,122605,122606],{"class":103,"line":104},[101,122607,122601],{},[10,122609,122610],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[92,122612,122614],{"className":120796,"code":122613,"language":120798,"meta":120799,"style":20},"sudo apt install openssh-client\n",[98,122615,122616],{"__ignoreMap":20},[101,122617,122618],{"class":103,"line":104},[101,122619,122613],{},[10,122621,122622],{},"2.远程主机启动SSH服务",[10,122624,122625],{},"远程主机启动 ssh 服务命令如下：",[92,122627,122629],{"className":120796,"code":122628,"language":120798,"meta":120799,"style":20},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[98,122630,122631],{"__ignoreMap":20},[101,122632,122633],{"class":103,"line":104},[101,122634,122628],{},[10,122636,122637],{},"启动后可使用如下命令查看服务是否正常运行：",[92,122639,122641],{"className":120796,"code":122640,"language":120798,"meta":120799,"style":20},"ps -e | grep ssh\n",[98,122642,122643],{"__ignoreMap":20},[101,122644,122645],{"class":103,"line":104},[101,122646,122640],{},[10,122648,122649],{},"如果启动成功，会包含 sshd 程序。",[10,122651,122652],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[92,122654,122656],{"className":120796,"code":122655,"language":120798,"meta":120799,"style":20},"sudo systemctl enable ssh\n",[98,122657,122658],{"__ignoreMap":20},[101,122659,122660],{"class":103,"line":104},[101,122661,122655],{},[10,122663,122664],{},"3.本地远程登录",[10,122666,122667],{},"登录远程主机可以调用如下命令:",[92,122669,122671],{"className":117276,"code":122670,"language":117278,"meta":20,"style":20},"ssh -X 用户名@ip地址\n",[98,122672,122673],{"__ignoreMap":20},[101,122674,122675,122677,122680],{"class":103,"line":104},[101,122676,121627],{"class":1950},[101,122678,122679],{"class":160}," -X",[101,122681,122682],{"class":216}," 用户名@ip地址\n",[10,122684,122685],{},"然后根据提示，录入登陆密码，即可成功登录。",[10,122687,122688],{},"如果退出，可以调用exit命令：",[92,122690,122692],{"className":120796,"code":122691,"language":120798,"meta":120799,"style":20},"exit\n",[98,122693,122694],{"__ignoreMap":20},[101,122695,122696],{"class":103,"line":104},[101,122697,122691],{},[10,122699,122700],{},[261,122701,122702],{},"4.实现数据传输",[10,122704,122705],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[10,122707,122708],{},"上传文件指令格式如下：",[92,122710,122712],{"className":120796,"code":122711,"language":120798,"meta":120799,"style":20},"scp 本地文件路径 账号@ip:路径\n",[98,122713,122714],{"__ignoreMap":20},[101,122715,122716],{"class":103,"line":104},[101,122717,122711],{},[10,122719,122720],{},"上传文件夹指令格式如下：",[92,122722,122724],{"className":120796,"code":122723,"language":120798,"meta":120799,"style":20},"scp -r 本地文件夹路径 账号@ip:路径\n",[98,122725,122726],{"__ignoreMap":20},[101,122727,122728],{"class":103,"line":104},[101,122729,122723],{},[10,122731,122732],{},"下载文件指令格式如下：",[92,122734,122736],{"className":120796,"code":122735,"language":120798,"meta":120799,"style":20},"scp 账号@ip:路径 本地文件夹路径\n",[98,122737,122738],{"__ignoreMap":20},[101,122739,122740],{"class":103,"line":104},[101,122741,122735],{},[10,122743,122744],{},"下载文件夹指令格式如下：",[92,122746,122748],{"className":120796,"code":122747,"language":120798,"meta":120799,"style":20},"scp -r 账号@ip:路径 本地文件夹路径\n",[98,122749,122750],{"__ignoreMap":20},[101,122751,122752],{"class":103,"line":104},[101,122753,122747],{},[10,122755,122756],{},[261,122757,122758],{},"优化",[10,122760,122761],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[55,122763,122764,122767],{},[58,122765,122766],{},"本地生成密钥对；",[58,122768,122769],{},"将公钥上传至远程主机。",[10,122771,122772],{},[261,122773,122774],{},"1.生成密钥对",[10,122776,122777],{},"本地客户端生成公私钥：（一路回车默认即可）",[92,122779,122781],{"className":120796,"code":122780,"language":120798,"meta":120799,"style":20},"ssh-keygen\n",[98,122782,122783],{"__ignoreMap":20},[101,122784,122785],{"class":103,"line":104},[101,122786,122780],{},[10,122788,122789],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[55,122791,122792,122795],{},[58,122793,122794],{},"id_rsa （私钥）；",[58,122796,122797],{},"id_rsa.pub (公钥)。",[10,122799,122800],{},[261,122801,122802],{},"2.公钥上传",[10,122804,122805],{},"上传指令如下：",[92,122807,122809],{"className":120796,"code":122808,"language":120798,"meta":120799,"style":20},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[98,122810,122811],{"__ignoreMap":20},[101,122812,122813],{"class":103,"line":104},[101,122814,122808],{},[10,122816,122817],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[10,122819,122820],{},"以后再远程登录就无需录入密码了。",[72,122822,122824],{"id":122823},"_723-使用vscode优化","7.2.3 使用VScode优化",[10,122826,122827],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[10,122829,122830],{},[261,122831,122832],{},"1.准备工作",[10,122834,122835],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[10,122837,122838],{},[261,122839,122840],{},"2.为VScode安装远程开发插件",[10,122842,122843,122844,122847,122848,122851,122852,28374],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[98,122845,122846],{},"扩展：商店","的搜索栏输入",[98,122849,122850],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[98,122853,122854],{},"安装",[10,122856,122857],{},[1449,122858],{"alt":20,"src":122859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[10,122861,122862],{},[261,122863,122864],{},"3.配置远程连接",[10,122866,122867,122868,122871,122872,122875],{},"步骤1：使用快捷键",[98,122869,122870],{},"ctrl + shift + p","打开命令输入窗口，并输入",[98,122873,122874],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[10,122877,122878],{},[1449,122879],{"alt":20,"src":122880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[10,122882,122883,122884,28374],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[98,122885,122886],{},"Add New SSH Host",[10,122888,122889],{},[1449,122890],{"alt":20,"src":122891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[10,122893,122894,122895,122898,122899,122902,122903,122906],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[98,122896,122897],{},"ssh +X ubuntu@192.168.43.164","，其中，",[98,122900,122901],{},"ubuntu","需要替换为你的登录用户名，",[98,122904,122905],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[10,122908,122909],{},[1449,122910],{"alt":20,"src":122911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[10,122913,122914],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[10,122916,122917],{},[1449,122918],{"alt":20,"src":122919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[10,122921,122922],{},[1449,122923],{"alt":20,"src":122924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[10,122926,122927],{},[261,122928,122929],{},"4.使用",[10,122931,122932,122933,122871,122935,122937],{},"步骤1：继续使用快捷键",[98,122934,122870],{},[98,122936,122874],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[10,122939,122940],{},[1449,122941],{"alt":20,"src":122942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[10,122944,122945,122946,122949],{},"或者，也可以点击侧边栏的",[98,122947,122948],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[10,122951,122952],{},[1449,122953],{"alt":20,"src":122954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[10,122956,122957,122958,122961,122962,122965],{},"步骤2：选择菜单栏的",[98,122959,122960],{},"文件","下的",[98,122963,122964],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[10,122967,122968],{},[1449,122969],{"alt":20,"src":122970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[10,122972,122973],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[43,122975,122977],{"id":122976},"_73-远程桌面","7.3 远程桌面",[10,122979,122980],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[10,122982,122983],{},"我们选择使用VNC来看。",[55,122985,122986],{},[58,122987,122988],{},"安装VNC服务器：",[10,122990,122991],{},"这里以TigerVNC为例进行安装：",[92,122993,122995],{"className":117276,"code":122994,"language":117278,"meta":20,"style":20},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[98,122996,122997],{"__ignoreMap":20},[101,122998,122999,123001,123003,123005,123008],{"class":103,"line":104},[101,123000,24565],{"class":1950},[101,123002,117297],{"class":216},[101,123004,23823],{"class":216},[101,123006,123007],{"class":216}," tigervnc-standalone-server",[101,123009,123010],{"class":216}," tigervnc-common\n",[55,123012,123013],{"start":21},[58,123014,123015],{},"设置VNC密码：",[10,123017,123018],{},"为VNC用户设置密码，运行以下命令：",[92,123020,123022],{"className":117276,"code":123021,"language":117278,"meta":20,"style":20},"vncpasswd\n",[98,123023,123024],{"__ignoreMap":20},[101,123025,123026],{"class":103,"line":104},[101,123027,123021],{"class":1950},[55,123029,123030],{"start":1166},[58,123031,123032],{},"配置VNC启动脚本:",[10,123034,123035],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[92,123037,123039],{"className":117276,"code":123038,"language":117278,"meta":20,"style":20},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[98,123040,123041,123050],{"__ignoreMap":20},[101,123042,123043,123045,123047],{"class":103,"line":104},[101,123044,101246],{"class":1950},[101,123046,29205],{"class":160},[101,123048,123049],{"class":216}," ~\u002F.vnc\n",[101,123051,123052,123055],{"class":103,"line":21},[101,123053,123054],{"class":1950},"nano",[101,123056,123057],{"class":216}," ~\u002F.vnc\u002Fxstartup\n",[10,123059,123060],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[92,123062,123064],{"className":117276,"code":123063,"language":117278,"meta":20,"style":20},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[98,123065,123066,123071,123079,123086],{"__ignoreMap":20},[101,123067,123068],{"class":103,"line":104},[101,123069,123070],{"class":170},"#!\u002Fbin\u002Fsh\n",[101,123072,123073,123076],{"class":103,"line":21},[101,123074,123075],{"class":160},"unset",[101,123077,123078],{"class":216}," SESSION_MANAGER\n",[101,123080,123081,123083],{"class":103,"line":1166},[101,123082,123075],{"class":160},[101,123084,123085],{"class":216}," DBUS_SESSION_BUS_ADDRESS\n",[101,123087,123088],{"class":103,"line":1181},[101,123089,123090],{"class":1950},"gnome-session\n",[10,123092,123093],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[55,123095,123096],{"start":1181},[58,123097,123098],{},"给予执行权限：",[10,123100,123101],{},"为xstartup文件设置执行权限：",[92,123103,123105],{"className":117276,"code":123104,"language":117278,"meta":20,"style":20},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[98,123106,123107],{"__ignoreMap":20},[101,123108,123109,123111,123114],{"class":103,"line":104},[101,123110,24600],{"class":1950},[101,123112,123113],{"class":216}," +x",[101,123115,123057],{"class":216},[55,123117,123118],{"start":1187},[58,123119,123120],{},"启动VNC服务器：",[92,123122,123124],{"className":117276,"code":123123,"language":117278,"meta":20,"style":20},"vncserver -geometry 1920x1080 -localhost=0\n",[98,123125,123126],{"__ignoreMap":20},[101,123127,123128,123131,123134,123137],{"class":103,"line":104},[101,123129,123130],{"class":1950},"vncserver",[101,123132,123133],{"class":160}," -geometry",[101,123135,123136],{"class":216}," 1920x1080",[101,123138,123139],{"class":160}," -localhost=0\n",[10,123141,123142],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[10,123144,123145],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[55,123147,123148],{"start":1201},[58,123149,123150],{},"查看已开启的VNC服务器：",[92,123152,123154],{"className":117276,"code":123153,"language":117278,"meta":20,"style":20},"vncserver -list\n",[98,123155,123156],{"__ignoreMap":20},[101,123157,123158,123160],{"class":103,"line":104},[101,123159,123130],{"class":1950},[101,123161,123162],{"class":160}," -list\n",[10,123164,123165],{},[1449,123166],{"alt":20,"src":123167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[55,123169,123170],{"start":1207},[58,123171,123172],{},"连接到VNC服务器：",[10,123174,123175],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[55,123177,123178],{"start":1298},[58,123179,123180],{},"停止VNC服务器：",[10,123182,123183],{},"如果需要停止VNC服务器，可以使用以下命令：",[92,123185,123187],{"className":117276,"code":123186,"language":117278,"meta":20,"style":20},"vncserver -kill :1\n",[98,123188,123189],{"__ignoreMap":20},[101,123190,123191,123193,123196],{"class":103,"line":104},[101,123192,123130],{"class":1950},[101,123194,123195],{"class":160}," -kill",[101,123197,123198],{"class":216}," :1\n",[10,123200,123201],{},"将:1替换为你实际使用的显示编号。",[10,123203,123204],{},[1449,123205],{"alt":20,"src":123206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[10,123208,123209],{},[1449,123210],{"alt":20,"src":123211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[43,123213,123215],{"id":123214},"_74-usb端口设置","7.4 USB端口设置",[10,123217,123218],{},[261,123219,123220],{},"首先先配置好权限",[92,123222,123224],{"className":117276,"code":123223,"language":117278,"meta":20,"style":20},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[98,123225,123226,123231,123244,123251,123256],{"__ignoreMap":20},[101,123227,123228],{"class":103,"line":104},[101,123229,123230],{"class":170},"# 将用户权限提高\n",[101,123232,123233,123235,123237,123239,123242],{"class":103,"line":21},[101,123234,24565],{"class":1950},[101,123236,26563],{"class":216},[101,123238,26566],{"class":160},[101,123240,123241],{"class":216}," dialout",[101,123243,26571],{"class":111},[101,123245,123246,123248],{"class":103,"line":1166},[101,123247,26590],{"class":1950},[101,123249,123250],{"class":216}," dialout\n",[101,123252,123253],{"class":103,"line":1181},[101,123254,123255],{"class":170},"# 查看下面命令是否输出dialout（若输出才正常）\n",[101,123257,123258],{"class":103,"line":1187},[101,123259,123260],{"class":1950},"groups\n",[10,123262,123263],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[72,123265,123267],{"id":123266},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[10,123269,123270,123273],{},[261,123271,123272],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[10,123275,123276,123279],{},[261,123277,123278],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[10,123281,123282],{},[261,123283,123284],{},"流程如下：",[10,123286,123287],{},"（1）.查找设备idVendor和idProduct",[10,123289,123290,123291,123294],{},"接入两个USB设备，在终端调用指令",[98,123292,123293],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[10,123296,123297],{},[1449,123298],{"alt":20,"src":123299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[10,123301,123302,123303,123306],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[98,123304,123305],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[10,123308,123309],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[10,123311,123312],{},"（2）.编写映射规则",[10,123314,123315,123316,123319],{},"在",[98,123317,123318],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[92,123321,123323],{"className":117276,"code":123322,"language":117278,"meta":20,"style":20},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[98,123324,123325],{"__ignoreMap":20},[101,123326,123327,123329,123331],{"class":103,"line":104},[101,123328,24565],{"class":1950},[101,123330,118563],{"class":216},[101,123332,123333],{"class":216}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[10,123335,123336],{},"输入如下内容：",[92,123338,123340],{"className":117276,"code":123339,"language":117278,"meta":20,"style":20},"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",[98,123341,123342,123372],{"__ignoreMap":20},[101,123343,123344,123347,123349,123352,123355,123358,123361,123363,123366,123369],{"class":103,"line":104},[101,123345,123346],{"class":111},"KERNEL",[101,123348,157],{"class":107},[101,123350,123351],{"class":216},"=\"ttyUSB*\",",[101,123353,123354],{"class":1950}," ATTRS",[101,123356,123357],{"class":216},"{idVendor}==",[101,123359,123360],{"class":1950},"\"10c4\"",[101,123362,489],{"class":1950},[101,123364,123365],{"class":216}," ATTRS{idProduct}==\"ea60\",",[101,123367,123368],{"class":216}," MODE:=\"0777\",",[101,123370,123371],{"class":216}," SYMLINK+=\"mylidar\"\n",[101,123373,123374,123376,123378,123380,123382,123384,123387,123389,123392,123394],{"class":103,"line":21},[101,123375,123346],{"class":111},[101,123377,157],{"class":107},[101,123379,123351],{"class":216},[101,123381,123354],{"class":1950},[101,123383,123357],{"class":216},[101,123385,123386],{"class":1950},"\"1a86\"",[101,123388,489],{"class":1950},[101,123390,123391],{"class":216}," ATTRS{idProduct}==\"7523\",",[101,123393,123368],{"class":216},[101,123395,123396],{"class":216}," SYMLINK+=\"mycar\"\n",[10,123398,123399],{},"代码解释：",[1118,123401,123402,123405,123408,123411],{},[58,123403,123404],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[58,123406,123407],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[58,123409,123410],{},"SYMLINK是符号连接，即绑定的别名；",[58,123412,123413],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[10,123415,123416,123417,123420,123423],{},"***小提示：***",[23542,123418,123419],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[98,123421,123422],{},"\u002Fetc\u002Fudev\u002Frule.d",[23542,123424,123425],{},"目录即可。",[10,123427,123428],{},"表格 还在加载中，请等待加载完成后再尝试复制",[10,123430,123431],{},"（3）.使规则生效",[10,123433,123434],{},"在终端下输入如下指令：",[92,123436,123438],{"className":117276,"code":123437,"language":117278,"meta":20,"style":20},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[98,123439,123440,123445,123457,123468,123472,123477,123490],{"__ignoreMap":20},[101,123441,123442],{"class":103,"line":104},[101,123443,123444],{"class":170},"# Ubuntu用下方命令\n",[101,123446,123447,123449,123451,123454],{"class":103,"line":21},[101,123448,24565],{"class":1950},[101,123450,120028],{"class":216},[101,123452,123453],{"class":216}," udev",[101,123455,123456],{"class":216}," reload\n",[101,123458,123459,123461,123463,123465],{"class":103,"line":1166},[101,123460,24565],{"class":1950},[101,123462,120028],{"class":216},[101,123464,123453],{"class":216},[101,123466,123467],{"class":216}," restart\n",[101,123469,123470],{"class":103,"line":1181},[101,123471,2387],{"emptyLinePlaceholder":27},[101,123473,123474],{"class":103,"line":1187},[101,123475,123476],{"class":170},"#Fedora用下方命令\n",[101,123478,123479,123481,123484,123487],{"class":103,"line":1201},[101,123480,24565],{"class":1950},[101,123482,123483],{"class":216}," udevadm",[101,123485,123486],{"class":216}," control",[101,123488,123489],{"class":160}," --reload\n",[101,123491,123492,123494,123496],{"class":103,"line":1207},[101,123493,24565],{"class":1950},[101,123495,123483],{"class":216},[101,123497,123498],{"class":216}," trigger\n",[10,123500,123501],{},"再重新插拔设备即可。",[10,123503,123504],{},"（4）.测试",[10,123506,123507],{},"终端下输入如下指令",[92,123509,123511],{"className":117276,"code":123510,"language":117278,"meta":20,"style":20},"ll \u002Fdev | grep ttyUSB\n",[98,123512,123513],{"__ignoreMap":20},[101,123514,123515,123518,123521,123523,123525],{"class":103,"line":104},[101,123516,123517],{"class":1950},"ll",[101,123519,123520],{"class":216}," \u002Fdev",[101,123522,25098],{"class":107},[101,123524,30225],{"class":1950},[101,123526,123527],{"class":216}," ttyUSB\n",[10,123529,123530],{},"运行结果如下：",[10,123532,123533],{},[1449,123534],{"alt":20,"src":123535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[10,123537,123538,123539,123542],{},"也可以多次插拔USB设备，会发现设备端口",[98,123540,123541],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[10,123544,123545],{},[261,123546,117944],{},[10,123548,123549],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[72,123551,123553],{"id":123552},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[10,123555,123556,123558],{},[261,123557,123272],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[10,123560,123561,123563],{},[261,123562,123278],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[10,123565,123566],{},[261,123567,123284],{},[10,123569,123570],{},"（1）.查看所连接的主机USB接口的KERNELS",[10,123572,123573],{},"调用如下指令查看第一台雷达的USB信息：",[92,123575,123577],{"className":117276,"code":123576,"language":117278,"meta":20,"style":20},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[98,123578,123579,123599],{"__ignoreMap":20},[101,123580,123581,123584,123586,123589,123592,123594,123596],{"class":103,"line":104},[101,123582,123583],{"class":1950},"udevadm",[101,123585,69810],{"class":216},[101,123587,123588],{"class":160}," --attribute-walk",[101,123590,123591],{"class":160}," --name=\u002Fdev\u002FttyUSB0",[101,123593,25098],{"class":107},[101,123595,30225],{"class":1950},[101,123597,123598],{"class":216}," KERNELS\n",[101,123600,123601,123603,123605,123607,123610,123612,123614],{"class":103,"line":21},[101,123602,123583],{"class":1950},[101,123604,69810],{"class":216},[101,123606,123588],{"class":160},[101,123608,123609],{"class":160}," --name=\u002Fdev\u002FttyACM0",[101,123611,25098],{"class":107},[101,123613,30225],{"class":1950},[101,123615,123598],{"class":216},[10,123617,123618],{},[1449,123619],{"alt":20,"src":123620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[10,123622,123623],{},"调用如下指令查看第二台雷达的USB信息：",[92,123625,123627],{"className":117276,"code":123626,"language":117278,"meta":20,"style":20},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[98,123628,123629],{"__ignoreMap":20},[101,123630,123631,123633,123635,123637,123640,123642,123644],{"class":103,"line":104},[101,123632,123583],{"class":1950},[101,123634,69810],{"class":216},[101,123636,123588],{"class":160},[101,123638,123639],{"class":160}," --name=\u002Fdev\u002FttyUSB1",[101,123641,25098],{"class":107},[101,123643,30225],{"class":1950},[101,123645,123598],{"class":216},[10,123647,123648,123649,123652,123653,123656,123657,123660],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[98,123650,123651],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[98,123654,123655],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[261,123658,123659],{},"唯一性标识","”。",[10,123662,123312],{},[10,123664,123315,123665,123667],{},[98,123666,123318],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[92,123669,123670],{"className":117276,"code":123322,"language":117278,"meta":20,"style":20},[98,123671,123672],{"__ignoreMap":20},[101,123673,123674,123676,123678],{"class":103,"line":104},[101,123675,24565],{"class":1950},[101,123677,118563],{"class":216},[101,123679,123333],{"class":216},[92,123681,123683],{"className":117276,"code":123682,"language":117278,"meta":20,"style":20},"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",[98,123684,123685,123714],{"__ignoreMap":20},[101,123686,123687,123689,123691,123693,123696,123698,123701,123704,123706,123709,123711],{"class":103,"line":104},[101,123688,123346],{"class":111},[101,123690,157],{"class":107},[101,123692,123351],{"class":216},[101,123694,123695],{"class":111}," KERNELS",[101,123697,157],{"class":107},[101,123699,123700],{"class":216},"=\"1-1.3:1.0\",",[101,123702,123703],{"class":1950}," MODE:",[101,123705,157],{"class":216},[101,123707,123708],{"class":1950},"\"0777\"",[101,123710,489],{"class":1950},[101,123712,123713],{"class":216}," SYMLINK+=\"rplidar_front\"\n",[101,123715,123716,123718,123720,123722,123724,123726,123729,123731,123733,123735,123737],{"class":103,"line":21},[101,123717,123346],{"class":111},[101,123719,157],{"class":107},[101,123721,123351],{"class":216},[101,123723,123695],{"class":111},[101,123725,157],{"class":107},[101,123727,123728],{"class":216},"=\"1-1.4:1.0\",",[101,123730,123703],{"class":1950},[101,123732,157],{"class":216},[101,123734,123708],{"class":1950},[101,123736,489],{"class":1950},[101,123738,123739],{"class":216}," SYMLINK+=\"rplidar_back\"\n",[10,123741,123431],{},[10,123743,123434],{},[92,123745,123746],{"className":117276,"code":123437,"language":117278,"meta":20,"style":20},[98,123747,123748,123752,123762,123772,123776,123780,123790],{"__ignoreMap":20},[101,123749,123750],{"class":103,"line":104},[101,123751,123444],{"class":170},[101,123753,123754,123756,123758,123760],{"class":103,"line":21},[101,123755,24565],{"class":1950},[101,123757,120028],{"class":216},[101,123759,123453],{"class":216},[101,123761,123456],{"class":216},[101,123763,123764,123766,123768,123770],{"class":103,"line":1166},[101,123765,24565],{"class":1950},[101,123767,120028],{"class":216},[101,123769,123453],{"class":216},[101,123771,123467],{"class":216},[101,123773,123774],{"class":103,"line":1181},[101,123775,2387],{"emptyLinePlaceholder":27},[101,123777,123778],{"class":103,"line":1187},[101,123779,123476],{"class":170},[101,123781,123782,123784,123786,123788],{"class":103,"line":1201},[101,123783,24565],{"class":1950},[101,123785,123483],{"class":216},[101,123787,123486],{"class":216},[101,123789,123489],{"class":160},[101,123791,123792,123794,123796],{"class":103,"line":1207},[101,123793,24565],{"class":1950},[101,123795,123483],{"class":216},[101,123797,123498],{"class":216},[10,123799,123501],{},[10,123801,123504],{},[10,123803,123507,123804,123807],{},[98,123805,123806],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[10,123809,123810],{},[1449,123811],{"alt":20,"src":123812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[10,123814,123815],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[10,123817,123818,123820],{},[261,123819,117944],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[72,123822,123824],{"id":123823},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[10,123826,123827],{},"（1）.查看所连接的主机USB接口的信息",[92,123829,123831],{"className":117276,"code":123830,"language":117278,"meta":20,"style":20},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[98,123832,123833,123863],{"__ignoreMap":20},[101,123834,123835,123837,123839,123842,123844,123846,123848,123850,123853,123856,123858,123861],{"class":103,"line":104},[101,123836,123583],{"class":1950},[101,123838,69810],{"class":216},[101,123840,123841],{"class":160}," -a",[101,123843,29205],{"class":160},[101,123845,28411],{"class":111},[101,123847,123583],{"class":1950},[101,123849,69810],{"class":216},[101,123851,123852],{"class":160}," -q",[101,123854,123855],{"class":216}," path",[101,123857,25104],{"class":160},[101,123859,123860],{"class":216}," \u002Fdev\u002FttyACM0",[101,123862,118],{"class":111},[101,123864,123865,123867,123869,123871,123873,123875,123877,123879,123881,123883,123885,123888],{"class":103,"line":21},[101,123866,123583],{"class":1950},[101,123868,69810],{"class":216},[101,123870,123841],{"class":160},[101,123872,29205],{"class":160},[101,123874,28411],{"class":111},[101,123876,123583],{"class":1950},[101,123878,69810],{"class":216},[101,123880,123852],{"class":160},[101,123882,123855],{"class":216},[101,123884,25104],{"class":160},[101,123886,123887],{"class":216}," \u002Fdev\u002FttyUSB0",[101,123889,118],{"class":111},[10,123891,123892],{},[1449,123893],{"alt":20,"src":123894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[10,123896,123897],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[10,123899,123312],{},[10,123901,123315,123902,123667],{},[98,123903,123318],{},[92,123905,123906],{"className":117276,"code":123322,"language":117278,"meta":20,"style":20},[98,123907,123908],{"__ignoreMap":20},[101,123909,123910,123912,123914],{"class":103,"line":104},[101,123911,24565],{"class":1950},[101,123913,118563],{"class":216},[101,123915,123333],{"class":216},[92,123917,123919],{"className":117276,"code":123918,"language":117278,"meta":20,"style":20},"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",[98,123920,123921,123949,123975],{"__ignoreMap":20},[101,123922,123923,123925,123927,123930,123932,123934,123936,123938,123941,123944,123946],{"class":103,"line":104},[101,123924,123346],{"class":111},[101,123926,157],{"class":107},[101,123928,123929],{"class":216},"=\"ttyACM*\",",[101,123931,123354],{"class":1950},[101,123933,123357],{"class":216},[101,123935,123386],{"class":1950},[101,123937,489],{"class":1950},[101,123939,123940],{"class":216}," ATTRS{idProduct}==\"55d4\",",[101,123942,123943],{"class":216}," ATTRS{serial}==\"0001\",",[101,123945,123368],{"class":216},[101,123947,123948],{"class":216}," SYMLINK+=\"ttyACM_MCU\"\n",[101,123950,123951,123953,123955,123957,123959,123961,123963,123965,123967,123970,123972],{"class":103,"line":21},[101,123952,123346],{"class":111},[101,123954,157],{"class":107},[101,123956,123929],{"class":216},[101,123958,123354],{"class":1950},[101,123960,123357],{"class":216},[101,123962,123386],{"class":1950},[101,123964,489],{"class":1950},[101,123966,123940],{"class":216},[101,123968,123969],{"class":216}," ATTRS{serial}==\"0002\",",[101,123971,123368],{"class":216},[101,123973,123974],{"class":216}," SYMLINK+=\"ttyACM_Lidar\"\n",[101,123976,123977,123979,123981,123983,123985,123987,123989,123991,123993,123995],{"class":103,"line":1166},[101,123978,123346],{"class":111},[101,123980,157],{"class":107},[101,123982,123351],{"class":216},[101,123984,123354],{"class":1950},[101,123986,123357],{"class":216},[101,123988,123386],{"class":1950},[101,123990,489],{"class":1950},[101,123992,123391],{"class":216},[101,123994,123368],{"class":216},[101,123996,123997],{"class":216}," SYMLINK+=\"ttyUSB_IMU\"\n",[10,123999,123431],{},[10,124001,123434],{},[92,124003,124004],{"className":117276,"code":123437,"language":117278,"meta":20,"style":20},[98,124005,124006,124010,124020,124030,124034,124038,124048],{"__ignoreMap":20},[101,124007,124008],{"class":103,"line":104},[101,124009,123444],{"class":170},[101,124011,124012,124014,124016,124018],{"class":103,"line":21},[101,124013,24565],{"class":1950},[101,124015,120028],{"class":216},[101,124017,123453],{"class":216},[101,124019,123456],{"class":216},[101,124021,124022,124024,124026,124028],{"class":103,"line":1166},[101,124023,24565],{"class":1950},[101,124025,120028],{"class":216},[101,124027,123453],{"class":216},[101,124029,123467],{"class":216},[101,124031,124032],{"class":103,"line":1181},[101,124033,2387],{"emptyLinePlaceholder":27},[101,124035,124036],{"class":103,"line":1187},[101,124037,123476],{"class":170},[101,124039,124040,124042,124044,124046],{"class":103,"line":1201},[101,124041,24565],{"class":1950},[101,124043,123483],{"class":216},[101,124045,123486],{"class":216},[101,124047,123489],{"class":160},[101,124049,124050,124052,124054],{"class":103,"line":1207},[101,124051,24565],{"class":1950},[101,124053,123483],{"class":216},[101,124055,123498],{"class":216},[10,124057,124058,124059],{},"再重新插拔设备即可，或者 ",[261,124060,124061],{},"直接重启系统。",[10,124063,123504],{},[10,124065,123507,124066,123807],{},[98,124067,123806],{},[10,124069,124070],{},[1449,124071],{"alt":20,"src":124072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[10,124074,123815],{},[10,124076,124077,124079],{},[261,124078,117944],{}," 一些设备可能没有串口号等。",[72,124081,124083],{"id":124082},"_744-其他注意事项","7.4.4 其他注意事项",[10,124085,124086,124087,124089,124090,124093,124094,18398,124097,124100,124101,124103],{},"并非所有的USB设备端口号都是",[98,124088,123541],{},"的格式，比如Arduino的端口号可能是",[98,124091,124092],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[98,124095,124096],{},"videon",[98,124098,124099],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[98,124102,124096],{},"端口，绑定时需要关联的也是该接口。",[10,124105,124106,124107,124110,124111,124114,124115,124117,124118,124121,124122,124125,124126,124129,124130,124129,124133,124129,124136,28374],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[98,124108,124109],{},"KERNEL==\"ttyUSB*\"","修改为",[98,124112,124113],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[98,124116,124109],{},"修改为类似于",[98,124119,124120],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[98,124123,124124],{},"video[0,2,4,6]","表示可以绑定的端口为",[98,124127,124128],{},"video0","或",[98,124131,124132],{},"video2",[98,124134,124135],{},"video4",[98,124137,124138],{},"video6",[43,124140,124142],{"id":124141},"_75-挂载内网网页","7.5 挂载内网网页",[10,124144,124145],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[10,124147,124148],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[10,124150,124151],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[10,124153,124154,124155],{},"Termux 下载地址（F-Droid）：",[14,124156,124157],{"href":124157,"rel":124158},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[18],[10,124160,124161],{},"首先打开app后，先更新软件缓存：",[92,124163,124165],{"className":117276,"code":124164,"language":117278,"meta":20,"style":20},"pkg update\n",[98,124166,124167],{"__ignoreMap":20},[101,124168,124169,124172],{"class":103,"line":104},[101,124170,124171],{"class":1950},"pkg",[101,124173,26231],{"class":216},[10,124175,124176],{},"然后换源",[92,124178,124180],{"className":117276,"code":124179,"language":117278,"meta":20,"style":20},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[98,124181,124182],{"__ignoreMap":20},[101,124183,124184,124186,124189],{"class":103,"line":104},[101,124185,123054],{"class":1950},[101,124187,124188],{"class":111}," $PREFIX",[101,124190,124191],{"class":216},"\u002Fetc\u002Fapt\u002Fsources.list\n",[10,124193,124194],{},"将该文件内容替换为下面：",[92,124196,124198],{"className":117276,"code":124197,"language":117278,"meta":20,"style":20},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[98,124199,124200],{"__ignoreMap":20},[101,124201,124202,124205,124208,124211],{"class":103,"line":104},[101,124203,124204],{"class":1950},"deb",[101,124206,124207],{"class":216}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[101,124209,124210],{"class":216}," stable",[101,124212,124213],{"class":216}," main\n",[1118,124215,124216,124243],{},[58,124217,124218,124219,124221,124222],{},"如果你使用的是",[98,124220,123054],{},"编辑器：",[1118,124223,124224,124231,124237],{},[58,124225,124226,124227,124230],{},"按 ",[98,124228,124229],{},"Ctrl+O"," 保存文件。",[58,124232,124226,124233,124236],{},[98,124234,124235],{},"Enter"," 确认文件名。",[58,124238,124226,124239,124242],{},[98,124240,124241],{},"Ctrl+X"," 退出编辑器。",[58,124244,124218,124245,124221,124248],{},[98,124246,124247],{},"vim",[1118,124249,124250,124256],{},[58,124251,124226,124252,124255],{},[98,124253,124254],{},"Esc"," 退出编辑模式。",[58,124257,124258,124259,124261],{},"输入 ",[98,124260,119201],{}," 保存并退出。",[10,124263,124264],{},"接下来重新更新软件源：",[92,124266,124268],{"className":117276,"code":124267,"language":117278,"meta":20,"style":20},"pkg update && pkg upgrade\n",[98,124269,124270],{"__ignoreMap":20},[101,124271,124272,124274,124276,124278,124280],{"class":103,"line":104},[101,124273,124171],{"class":1950},[101,124275,117327],{"class":216},[101,124277,26179],{"class":111},[101,124279,124171],{"class":1950},[101,124281,117313],{"class":216},[10,124283,124284],{},"安装python：",[92,124286,124288],{"className":117276,"code":124287,"language":117278,"meta":20,"style":20},"pkg install python\n",[98,124289,124290],{"__ignoreMap":20},[101,124291,124292,124294,124296],{"class":103,"line":104},[101,124293,124171],{"class":1950},[101,124295,23823],{"class":216},[101,124297,124298],{"class":216}," python\n",[10,124300,124301,26462],{},[261,124302,124303],{},"通过Termux访问设备存储",[10,124305,124306],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[92,124308,124310],{"className":117276,"code":124309,"language":117278,"meta":20,"style":20},"termux-setup-storage\n",[98,124311,124312],{"__ignoreMap":20},[101,124313,124314],{"class":103,"line":104},[101,124315,124309],{"class":1950},[55,124317,124318],{},[58,124319,124320,26462,124323],{},[261,124321,124322],{},"进入HTML文件所在的目录",[55,124324,124325],{},[58,124326,124327,124328,124330],{},"使用",[98,124329,101256],{},"命令进入HTML文件所在的目录：",[92,124332,124334],{"className":117276,"code":124333,"language":117278,"meta":20,"style":20},"cd ~\u002Fyour_html_folder\n",[98,124335,124336],{"__ignoreMap":20},[101,124337,124338,124340],{"class":103,"line":104},[101,124339,101256],{"class":160},[101,124341,124342],{"class":216}," ~\u002Fyour_html_folder\n",[55,124344,124345],{"start":21},[58,124346,124347,26462,124350,124355,124372],{},[261,124348,124349],{},"启动Python HTTP服务器",[55,124351,124352],{},[58,124353,124354],{},"运行以下命令启动一个简单的HTTP服务器：",[92,124356,124358],{"className":117276,"code":124357,"language":117278,"meta":20,"style":20},"python -m http.server 8000\n",[98,124359,124360],{"__ignoreMap":20},[101,124361,124362,124364,124366,124369],{"class":103,"line":104},[101,124363,30369],{"class":1950},[101,124365,100862],{"class":160},[101,124367,124368],{"class":216}," http.server",[101,124370,124371],{"class":160}," 8000\n",[55,124373,124374],{"start":1166},[58,124375,124376,124377,124380],{},"这会在端口",[98,124378,124379],{},"8000","上启动一个Web服务器。",[1118,124382,124383],{},[58,124384,124385],{},"启动服务器后，Termux会显示日志信息，例如：",[92,124387,124389],{"className":120796,"code":124388,"language":120798,"meta":120799,"style":20},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[98,124390,124391],{"__ignoreMap":20},[101,124392,124393],{"class":103,"line":104},[101,124394,124388],{},[1118,124396,124397],{},[58,124398,124399],{},"这表示服务器已成功启动。",[10,124401,124402],{},[261,124403,124404],{},"在浏览器中访问HTML文件",[55,124406,124407],{},[58,124408,124409,26462,124412,124417],{},[261,124410,124411],{},"在同一设备上访问",[55,124413,124414],{},[58,124415,124416],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[92,124418,124421],{"className":124419,"code":124420,"language":71653,"meta":20,"style":20},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[98,124422,124423],{"__ignoreMap":20},[101,124424,124425,124428],{"class":103,"line":104},[101,124426,124427],{"class":111},"http:",[101,124429,124430],{"class":170},"\u002F\u002Flocalhost:8000\n",[1118,124432,124433],{},[58,124434,124435,124436,124439],{},"如果HTML文件中有",[98,124437,124438],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[43,124441,124443],{"id":124442},"_76-linux重点知识","7.6 Linux重点知识",[72,124445,124447],{"id":124446},"_761-关于点的说明","7.6.1 关于点的说明",[10,124449,124450],{},[1449,124451],{"alt":20,"src":124452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[10,124454,124455],{},"一点本目录，两点上目录",[72,124457,124459],{"id":124458},"_762-目录","7.6.2 目录",[21986,124461,124463],{"id":124462},"_7621-系统启动必须","7.6.2.1 系统启动必须",[10,124465,124466],{},[261,124467,124468],{},"\u002Fboot:",[10,124470,124471],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[10,124473,124474],{},[261,124475,124476],{},"\u002Fetc:",[10,124478,124479],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[10,124481,124482],{},[261,124483,124484],{},"\u002Flib：",[10,124486,124487],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[10,124489,124490],{},[261,124491,124492],{},"\u002Fsys:",[10,124494,124495],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21986,124497,124499],{"id":124498},"_7622-指令集合","7.6.2.2 指令集合",[10,124501,124502],{},[261,124503,124504],{},"\u002Fbin:",[10,124506,124507],{},"为二进制文件的缩写，存放最经常使用的命令",[10,124509,124510],{},[261,124511,124512],{},"\u002Fsbin:",[10,124514,124515],{},"只有系统管理员才能使用的程序和指令",[21986,124517,124519],{"id":124518},"_7623-外部文件管理","7.6.2.3 外部文件管理",[10,124521,124522],{},[261,124523,124524],{},"\u002Fdev:",[10,124526,124527],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[10,124529,124530],{},[261,124531,124532],{},"\u002Fmedia:",[10,124534,124535],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[10,124537,124538],{},[261,124539,124540],{},"\u002Fmnt:",[10,124542,124543],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21986,124545,124547],{"id":124546},"_7624-临时文件","7.6.2.4 临时文件",[10,124549,124550],{},[261,124551,124552],{},"\u002Frun:",[10,124554,124555],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[10,124557,124558],{},[261,124559,124560],{},"\u002Flost+found:",[10,124562,124563],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[10,124565,124566],{},[261,124567,124568],{},"\u002Ftmp:",[10,124570,124571],{},"这个目录是用来存放一些临时文件的",[21986,124573,124575],{"id":124574},"_7625-账户","7.6.2.5 账户",[10,124577,124578],{},[261,124579,124580],{},"\u002Froot：",[10,124582,124583],{},"系统管理员的用户主目录",[10,124585,124586,26462],{},[261,124587,124588],{},"\u002Fhome",[10,124590,124591],{},"用户的主目录，以用户的账号命名的",[10,124593,124594,26462],{},[261,124595,124596],{},"\u002Fusr",[10,124598,124599],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[10,124601,124602],{},[261,124603,124604],{},"\u002Fusr\u002Fbin：",[10,124606,124607],{},"系统用户使用的应用程序与指令",[10,124609,124610],{},[261,124611,124612],{},"\u002Fusr\u002Fsbin：",[10,124614,124615],{},"超级用户使用的比较高级的管理程序和系统守护程序",[10,124617,124618],{},[261,124619,124620],{},"\u002Fusr\u002Fsrc：",[10,124622,124623],{},"内核源代码默认的放置目录",[21986,124625,124627],{"id":124626},"_7626-运行过程要用","7.6.2.6 运行过程要用",[10,124629,124630],{},[261,124631,124632],{},"\u002Fvar：",[10,124634,124635],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[10,124637,124638],{},[261,124639,124640],{},"\u002Fproc:",[10,124642,124643,124644,124647],{},"管理 ",[261,124645,124646],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21986,124649,124651],{"id":124650},"_7627-扩展用的","7.6.2.7 扩展用的",[10,124653,124654],{},[261,124655,124656],{},"\u002Fopt:",[10,124658,124659],{},"默认是空的，我们安装额外软件可以放在这个里面",[10,124661,124662],{},[261,124663,124664],{},"\u002Fsrv:",[10,124666,124667],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[72,124669,124671],{"id":124670},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[10,124673,124674],{},[1449,124675],{"alt":20,"src":124676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[10,124678,124679],{},"windows-->linux:",[10,124681,124682],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[10,124684,124685],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[10,124687,124688],{},"linux传输文件到windows",[10,124690,124691],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[72,124693,124695],{"id":124694},"_764-易忘知识","7.6.4 易忘知识",[10,124697,124698],{},"操作系统内核查看",[92,124700,124701],{"className":117276,"code":121270,"language":117278,"meta":20,"style":20},[98,124702,124703],{"__ignoreMap":20},[101,124704,124705,124707],{"class":103,"line":104},[101,124706,70193],{"class":1950},[101,124708,121279],{"class":160},[10,124710,124711],{},[1449,124712],{"alt":20,"src":124713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[10,124715,124716],{},[1449,124717],{"alt":20,"src":124718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[92,124720,124722],{"className":117276,"code":124721,"language":117278,"meta":20,"style":20},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[98,124723,124724,124736],{"__ignoreMap":20},[101,124725,124726,124728,124731,124734],{"class":103,"line":104},[101,124727,121487],{"class":1950},[101,124729,124730],{"class":216}," mvtest",[101,124732,124733],{"class":216}," mvtest2",[101,124735,2661],{"class":111},[101,124737,124738],{"class":103,"line":21},[101,124739,124740],{"class":1950},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[10,124742,124743],{},[1449,124744],{"alt":20,"src":124745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[10,124747,124748],{},[1449,124749],{"alt":20,"src":124750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[10,124752,124753,124754,124757],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[98,124755,124756],{},"du -a"," 可以快速查看磁盘使用细节。",[72,124759,124761],{"id":124760},"_765-vim","7.6.5 Vim",[10,124763,124764],{},[1449,124765],{"alt":20,"src":124766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[10,124768,124769],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[10,124771,124772],{},"一开始进去为命令模式，此时点击输入的字母为命令",[10,124774,124775],{},[261,124776,124777],{},"1.命令模式：",[10,124779,124780],{},"i 切换到输入模式，在光标当前位置开始输入文本",[10,124782,124783],{},"x 删除当前光标所在处的字符",[10,124785,124786],{},"：切换到底线命令模式，以在最底一行输入命令",[10,124788,124789],{},"a 进行插入模式，在光标下一个位置输入文本",[10,124791,124792],{},"o 在当前的下方插入一个新行，并进入插入模式",[10,124794,124795],{},"0 在当前行的上方插入一个新行，并进入插入模式",[10,124797,124798],{},"dd 剪切当前行",[10,124800,124801],{},"yy 复制当前行",[10,124803,124804],{},"p 粘贴剪贴板内容到光标下方",[10,124806,124807],{},"P 粘贴剪贴板内容到光标上方",[10,124809,124810],{},"u 撤销上一次操作",[10,124812,124813],{},"ctrl+r 重做上一次操作",[10,124815,124816,124818],{},[906,124817],{}," 保存文件",[10,124820,124821,124823],{},[756,124822],{}," 退出Vim编辑器",[10,124825,124826,124828],{},[756,124827],{},"! 强制退出Vim编辑器，不保存修改",[10,124830,124831],{},[261,124832,124833],{},"2.输入模式：",[10,124835,124836],{},[1449,124837],{"alt":20,"src":124838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[10,124840,124841],{},[261,124842,124843],{},"3.底线命令模式：",[10,124845,124846],{},[1449,124847],{"alt":20,"src":124848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[10,124850,124851],{},"按下esc可以退出底线命令模式",[72,124853,124855],{"id":124854},"_766-apt","7.6.6 apt",[10,124857,124858],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[72,124860,124862],{"id":124861},"_767-home与root的区别","7.6.7 home与root的区别",[10,124864,124865],{},[1449,124866],{"alt":20,"src":124867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[10,124869,124870],{},[1449,124871],{"alt":20,"src":124872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[10,124874,124875],{},[1449,124876],{"alt":20,"src":124877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[10,124879,124880],{},[1449,124881],{"alt":20,"src":124882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[72,124884,124886],{"id":124885},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[10,124888,124889],{},[14,124890,124891],{"href":124891,"rel":124892},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[18],[55,124894,124895,124898],{},[58,124896,124897],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[58,124899,124900],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[10,124902,124903],{},[1449,124904],{"alt":20,"src":124905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[10,124907,124908],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[10,124910,124911],{},[1449,124912],{"alt":20,"src":124913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[92,124915,124917],{"className":120796,"code":124916,"language":120798,"meta":120799,"style":20},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[98,124918,124919,124924],{"__ignoreMap":20},[101,124920,124921],{"class":103,"line":104},[101,124922,124923],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[101,124925,124926],{"class":103,"line":21},[101,124927,124928],{},".\u002Fpycharm.sh\n",[10,124930,124931],{},"3️⃣创建.desktop文件",[10,124933,124934],{},[261,124935,124936],{},"原理：",[1118,124938,124939,124949],{},[58,124940,124941,124942,124948],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[261,124943,124944,124947],{},[98,124945,124946],{},".desktop"," 文件"," 来识别应用。",[58,124950,124951,124953,124954],{},[98,124952,124946],{}," 文件相当于一个“应用注册表”，告诉系统：",[1118,124955,124956,124959,124962,124965,124968],{},[58,124957,124958],{},"应用名字（Name）",[58,124960,124961],{},"图标（Icon）",[58,124963,124964],{},"执行命令（Exec）",[58,124966,124967],{},"分类（Categories）",[58,124969,124970],{},"是否需要终端（Terminal）",[92,124972,124974],{"className":120796,"code":124973,"language":120798,"meta":120799,"style":20},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[98,124975,124976,124981],{"__ignoreMap":20},[101,124977,124978],{"class":103,"line":104},[101,124979,124980],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[101,124982,124983],{"class":103,"line":21},[101,124984,124985],{},"nano pycharm.desktop\n",[10,124987,124988],{},"nano是一个命令行下的编辑器，也可以使用vim",[92,124990,124992],{"className":120796,"code":124991,"language":120798,"meta":120799,"style":20},"[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",[98,124993,124994,124999,125004,125009,125014,125019,125024,125029,125034,125039],{"__ignoreMap":20},[101,124995,124996],{"class":103,"line":104},[101,124997,124998],{},"[Desktop Entry]\n",[101,125000,125001],{"class":103,"line":21},[101,125002,125003],{},"Version=1.0\n",[101,125005,125006],{"class":103,"line":1166},[101,125007,125008],{},"Type=Application\n",[101,125010,125011],{"class":103,"line":1181},[101,125012,125013],{},"Name=PyCharm\n",[101,125015,125016],{"class":103,"line":1187},[101,125017,125018],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[101,125020,125021],{"class":103,"line":1201},[101,125022,125023],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[101,125025,125026],{"class":103,"line":1207},[101,125027,125028],{},"Comment=JetBrains PyCharm IDE\n",[101,125030,125031],{"class":103,"line":1298},[101,125032,125033],{},"Categories=Development;IDE;\n",[101,125035,125036],{"class":103,"line":1304},[101,125037,125038],{},"Terminal=false\n",[101,125040,125041],{"class":103,"line":1316},[101,125042,125043],{},"StartupWMClass=jetbrains-pycharm\n",[1118,125045,125046,125052,125058,125064],{},[58,125047,125048,125051],{},[98,125049,125050],{},"Exec"," → 点击图标时执行的命令",[58,125053,125054,125057],{},[98,125055,125056],{},"Icon"," → 显示在菜单和桌面上的图标",[58,125059,125060,125063],{},[98,125061,125062],{},"Terminal=false"," → 不打开终端",[58,125065,125066,125069],{},[98,125067,125068],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125071,125072,125073],"blockquote",{},[10,125074,125075,125076,125078,125079],{},"可以理解成 ",[98,125077,124946],{}," 文件是 Linux 的 ",[261,125080,125081],{},"快捷方式配置文件",[10,125083,125084],{},"4️⃣设置可执行权限",[92,125086,125088],{"className":120796,"code":125087,"language":120798,"meta":120799,"style":20},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[98,125089,125090],{"__ignoreMap":20},[101,125091,125092],{"class":103,"line":104},[101,125093,125087],{},[10,125095,125096],{},"5️⃣桌面图标启动的话如下：",[92,125098,125100],{"className":120796,"code":125099,"language":120798,"meta":120799,"style":20},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[98,125101,125102,125107],{"__ignoreMap":20},[101,125103,125104],{"class":103,"line":104},[101,125105,125106],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[101,125108,125109],{"class":103,"line":21},[101,125110,125111],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[55,125113,125114],{"start":1166},[58,125115,125116],{},"下载Appimage文件实现软件的安装",[10,125118,125119],{},"1️⃣先下载appimage",[10,125121,125122],{},[14,125123,125124],{"href":125124,"rel":125125},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[18],[10,125127,125128],{},[1449,125129],{"alt":20,"src":125130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[10,125132,125133],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[10,125135,125136],{},[1449,125137],{"alt":20,"src":125138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[10,125140,125141],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[10,125143,125144],{},[1449,125145],{"alt":20,"src":125146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[10,125148,125149],{},[1449,125150],{"alt":20,"src":125151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[10,125153,125154,125155,125158],{},"3️⃣给他们放在",[98,125156,125157],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[10,125160,125161],{},"4️⃣给软件执行权限",[92,125163,125165],{"className":120796,"code":125164,"language":120798,"meta":120799,"style":20},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[98,125166,125167,125172],{"__ignoreMap":20},[101,125168,125169],{"class":103,"line":104},[101,125170,125171],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[101,125173,125174],{"class":103,"line":21},[101,125175,125176],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[10,125178,125179],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[92,125181,125183],{"className":117276,"code":125182,"language":117278,"meta":20,"style":20},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[98,125184,125185,125192,125199,125205],{"__ignoreMap":20},[101,125186,125187,125189],{"class":103,"line":104},[101,125188,101256],{"class":160},[101,125190,125191],{"class":216}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[101,125193,125194,125196],{"class":103,"line":21},[101,125195,101263],{"class":1950},[101,125197,125198],{"class":216}," .\u002Fqqmusic.desktop\n",[101,125200,125201,125203],{"class":103,"line":1166},[101,125202,124247],{"class":1950},[101,125204,125198],{"class":216},[101,125206,125207,125209,125211,125213],{"class":103,"line":1181},[101,125208,24565],{"class":1950},[101,125210,24568],{"class":216},[101,125212,123113],{"class":216},[101,125214,125198],{"class":216},[10,125216,125217,125219],{},[98,125218,101263],{},"：一个 Linux 命令，主要功能是：",[1118,125221,125222,125225],{},[58,125223,125224],{},"如果文件不存在，就创建一个新的空文件",[58,125226,125227],{},"如果文件已存在，就更新该文件的最后修改时间",[92,125229,125231],{"className":120796,"code":125230,"language":120798,"meta":120799,"style":20},"[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",[98,125232,125233,125237,125242,125247,125252,125256,125261],{"__ignoreMap":20},[101,125234,125235],{"class":103,"line":104},[101,125236,124998],{},[101,125238,125239],{"class":103,"line":21},[101,125240,125241],{},"Name=QQ音乐\n",[101,125243,125244],{"class":103,"line":1166},[101,125245,125246],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[101,125248,125249],{"class":103,"line":1181},[101,125250,125251],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[101,125253,125254],{"class":103,"line":1187},[101,125255,125008],{},[101,125257,125258],{"class":103,"line":1201},[101,125259,125260],{},"Categories=Audio;Music;Player;\n",[101,125262,125263],{"class":103,"line":1207},[101,125264,125265],{},"Comment=QQ Music Client for Linux\n",[10,125267,125268],{},"将文件复制进去",[10,125270,125271],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[10,125273,125274],{},[1449,125275],{"alt":20,"src":125276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[10,125278,125279],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[10,125281,125282],{},[1449,125283],{"alt":20,"src":125284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[10,125286,125287,125288,125291,125292,125295],{},"如果你用的不是KDE，那么也可以直接修改",[98,125289,125290],{},"qqmuic.desktop","：在exec的末尾加上",[98,125293,125294],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[92,125297,125299],{"className":120796,"code":125298,"language":120798,"meta":120799,"style":20},"[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",[98,125300,125301,125305,125309,125314,125318,125322,125326],{"__ignoreMap":20},[101,125302,125303],{"class":103,"line":104},[101,125304,124998],{},[101,125306,125307],{"class":103,"line":21},[101,125308,125241],{},[101,125310,125311],{"class":103,"line":1166},[101,125312,125313],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[101,125315,125316],{"class":103,"line":1181},[101,125317,125251],{},[101,125319,125320],{"class":103,"line":1187},[101,125321,125008],{},[101,125323,125324],{"class":103,"line":1201},[101,125325,125260],{},[101,125327,125328],{"class":103,"line":1207},[101,125329,125265],{},[10,125331,125332],{},[1449,125333],{"alt":20,"src":125334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[10,125336,125337],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[92,125339,125341],{"className":120796,"code":125340,"language":120798,"meta":120799,"style":20},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[98,125342,125343],{"__ignoreMap":20},[101,125344,125345],{"class":103,"line":104},[101,125346,125340],{},[55,125348,125349],{"start":1181},[58,125350,125351],{},"去Flathub上安装软件",[10,125353,125354],{},[14,125355,125356],{"href":125356,"rel":125357},"https:\u002F\u002Fflathub.org\u002F",[18],[10,125359,125360],{},"1️⃣去上面的官网搜索软件+下载软件",[10,125362,125363],{},[1449,125364],{"alt":20,"src":125365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[92,125367,125369],{"className":120796,"code":125368,"language":120798,"meta":120799,"style":20},"flatpak install flathub com.obsproject.Studio\n",[98,125370,125371],{"__ignoreMap":20},[101,125372,125373],{"class":103,"line":104},[101,125374,125368],{},[10,125376,125377],{},[1449,125378],{"alt":20,"src":125379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[10,125381,125382],{},"2️⃣运行软件",[10,125384,125385],{},"a.官方方式：",[10,125387,125388],{},[1449,125389],{"alt":20,"src":125390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[92,125392,125393],{"className":120796,"code":125368,"language":120798,"meta":120799,"style":20},[98,125394,125395],{"__ignoreMap":20},[101,125396,125397],{"class":103,"line":104},[101,125398,125368],{},[10,125400,125401],{},"b.当普通软件运行：",[10,125403,125404],{},[1449,125405],{"alt":20,"src":125406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[10,125408,125409],{},[1449,125410],{"alt":20,"src":125411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5114,125413,125414],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":20,"searchDepth":21,"depth":21,"links":125416},[125417,125418,125423,125424,125430,125431],{"id":122149,"depth":21,"text":122150},{"id":122491,"depth":21,"text":122492,"children":125419},[125420,125421,125422],{"id":122495,"depth":1166,"text":122496},{"id":122562,"depth":1166,"text":122563},{"id":122823,"depth":1166,"text":122824},{"id":122976,"depth":21,"text":122977},{"id":123214,"depth":21,"text":123215,"children":125425},[125426,125427,125428,125429],{"id":123266,"depth":1166,"text":123267},{"id":123552,"depth":1166,"text":123553},{"id":123823,"depth":1166,"text":123824},{"id":124082,"depth":1166,"text":124083},{"id":124141,"depth":21,"text":124142},{"id":124442,"depth":21,"text":124443,"children":125432},[125433,125434,125435,125436,125437,125438,125439,125440],{"id":124446,"depth":1166,"text":124447},{"id":124458,"depth":1166,"text":124459},{"id":124670,"depth":1166,"text":124671},{"id":124694,"depth":1166,"text":124695},{"id":124760,"depth":1166,"text":124761},{"id":124854,"depth":1166,"text":124855},{"id":124861,"depth":1166,"text":124862},{"id":124885,"depth":1166,"text":124886},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122141,"description":23365},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125447,"title":125448,"body":125449,"description":23365,"extension":24,"meta":125453,"navigation":27,"path":125454,"seo":125455,"stem":125456,"__hash__":125457},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125450,"toc":125451},[],{"title":20,"searchDepth":21,"depth":21,"links":125452},[],{"category":30252},"\u002Fwiki\u002F2025-01-27-linux",{"title":125448,"description":23365},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125459,"title":125460,"body":125461,"description":125465,"extension":24,"meta":125856,"navigation":27,"path":125857,"seo":125858,"stem":125859,"__hash__":125860},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125462,"toc":125854},[125463,125466,125470,125487,125490,125543,125547,125549,125589,125598,125602,125605,125846,125851],[10,125464,125465],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[39,125467,125469],{"id":125468},"_1ubuntu环境配置","1.Ubuntu环境配置",[55,125471,125472,125475,125478,125481,125484],{},[58,125473,125474],{},"ubuntu环境换源",[58,125476,125477],{},"安装cuda",[58,125479,125480],{},"安装miniconda",[58,125482,125483],{},"安装pytorch",[58,125485,125486],{},"安装genesis",[10,125488,125489],{},"参考链接：",[92,125491,125493],{"className":23811,"code":125492,"language":23813,"meta":20,"style":20},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[98,125494,125495],{"__ignoreMap":20},[101,125496,125497,125500,125503,125506,125508,125511,125514,125516,125519,125522,125524,125527,125530,125532,125535,125538,125540],{"class":103,"line":104},[101,125498,125499],{"class":1950},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[101,125501,125502],{"class":216},"=blogdetail",[101,125504,125505],{"class":111},"&sharetype",[101,125507,157],{"class":107},[101,125509,125510],{"class":216},"blogdetail",[101,125512,125513],{"class":111},"&sharerId",[101,125515,157],{"class":107},[101,125517,125518],{"class":216},"144728092",[101,125520,125521],{"class":111},"&sharerefer",[101,125523,157],{"class":107},[101,125525,125526],{"class":216},"PC",[101,125528,125529],{"class":111},"&sharesource",[101,125531,157],{"class":107},[101,125533,125534],{"class":216},"qq_69379513",[101,125536,125537],{"class":111},"&sharefrom",[101,125539,157],{"class":107},[101,125541,125542],{"class":216},"from_link\n",[39,125544,125546],{"id":125545},"_2genesis-报错issue","2.Genesis 报错issue",[10,125548,125489],{},[92,125550,125551],{"className":23811,"code":125492,"language":23813,"meta":20,"style":20},[98,125552,125553],{"__ignoreMap":20},[101,125554,125555,125557,125559,125561,125563,125565,125567,125569,125571,125573,125575,125577,125579,125581,125583,125585,125587],{"class":103,"line":104},[101,125556,125499],{"class":1950},[101,125558,125502],{"class":216},[101,125560,125505],{"class":111},[101,125562,157],{"class":107},[101,125564,125510],{"class":216},[101,125566,125513],{"class":111},[101,125568,157],{"class":107},[101,125570,125518],{"class":216},[101,125572,125521],{"class":111},[101,125574,157],{"class":107},[101,125576,125526],{"class":216},[101,125578,125529],{"class":111},[101,125580,157],{"class":107},[101,125582,125534],{"class":216},[101,125584,125537],{"class":111},[101,125586,157],{"class":107},[101,125588,125542],{"class":216},[92,125590,125592],{"className":23811,"code":125591,"language":23813,"meta":20,"style":20},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[98,125593,125594],{"__ignoreMap":20},[101,125595,125596],{"class":103,"line":104},[101,125597,125591],{"class":1950},[39,125599,125601],{"id":125600},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[10,125603,125604],{},"hello_robot.py",[92,125606,125608],{"className":30367,"code":125607,"language":30369,"meta":20,"style":20},"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",[98,125609,125610,125616,125631,125635,125647,125659,125663,125676,125680,125699,125709,125719,125733,125737,125741,125746,125750,125760,125767,125781,125788,125798,125803,125807,125825,125830,125834,125841],{"__ignoreMap":20},[101,125611,125612,125614],{"class":103,"line":104},[101,125613,30381],{"class":107},[101,125615,45294],{"class":111},[101,125617,125618,125621,125624,125626,125628],{"class":103,"line":21},[101,125619,125620],{"class":111},"os.environ[",[101,125622,125623],{"class":216},"'PYOPENGL_PLATFORM'",[101,125625,4430],{"class":111},[101,125627,157],{"class":107},[101,125629,125630],{"class":216}," 'glx'\n",[101,125632,125633],{"class":103,"line":1166},[101,125634,2387],{"emptyLinePlaceholder":27},[101,125636,125637,125639,125642,125644],{"class":103,"line":1181},[101,125638,30381],{"class":107},[101,125640,125641],{"class":111}," genesis ",[101,125643,31372],{"class":107},[101,125645,125646],{"class":111}," gs\n",[101,125648,125649,125651,125654,125656],{"class":103,"line":1187},[101,125650,30726],{"class":107},[101,125652,125653],{"class":111}," pynput ",[101,125655,30381],{"class":107},[101,125657,125658],{"class":111}," keyboard\n",[101,125660,125661],{"class":103,"line":1201},[101,125662,2387],{"emptyLinePlaceholder":27},[101,125664,125665,125668,125671,125673],{"class":103,"line":1207},[101,125666,125667],{"class":111},"gs.init(",[101,125669,125670],{"class":5204},"backend",[101,125672,157],{"class":107},[101,125674,125675],{"class":111},"gs.gpu)\n",[101,125677,125678],{"class":103,"line":1298},[101,125679,2387],{"emptyLinePlaceholder":27},[101,125681,125682,125685,125687,125690,125693,125695,125697],{"class":103,"line":1304},[101,125683,125684],{"class":111},"scene ",[101,125686,157],{"class":107},[101,125688,125689],{"class":111}," gs.Scene(",[101,125691,125692],{"class":5204},"show_viewer",[101,125694,157],{"class":107},[101,125696,31465],{"class":160},[101,125698,118],{"class":111},[101,125700,125701,125704,125706],{"class":103,"line":1316},[101,125702,125703],{"class":111},"plane ",[101,125705,157],{"class":107},[101,125707,125708],{"class":111}," scene.add_entity(gs.morphs.Plane())\n",[101,125710,125711,125714,125716],{"class":103,"line":1599},[101,125712,125713],{"class":111},"franka ",[101,125715,157],{"class":107},[101,125717,125718],{"class":111}," scene.add_entity(\n",[101,125720,125721,125724,125726,125728,125731],{"class":103,"line":1604},[101,125722,125723],{"class":111},"    gs.morphs.MJCF(",[101,125725,45343],{"class":5204},[101,125727,157],{"class":107},[101,125729,125730],{"class":216},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[101,125732,38036],{"class":111},[101,125734,125735],{"class":103,"line":1610},[101,125736,118],{"class":111},[101,125738,125739],{"class":103,"line":1615},[101,125740,2387],{"emptyLinePlaceholder":27},[101,125742,125743],{"class":103,"line":1629},[101,125744,125745],{"class":111},"scene.build()\n",[101,125747,125748],{"class":103,"line":1634},[101,125749,2387],{"emptyLinePlaceholder":27},[101,125751,125752,125754,125757],{"class":103,"line":1640},[101,125753,31936],{"class":107},[101,125755,125756],{"class":1950}," on_press",[101,125758,125759],{"class":111},"(key):\n",[101,125761,125762,125765],{"class":103,"line":1661},[101,125763,125764],{"class":107},"    try",[101,125766,3726],{"class":111},[101,125768,125769,125771,125774,125776,125779],{"class":103,"line":1666},[101,125770,2484],{"class":107},[101,125772,125773],{"class":111}," key.char ",[101,125775,2936],{"class":107},[101,125777,125778],{"class":216}," 'q'",[101,125780,3726],{"class":111},[101,125782,125783,125785],{"class":103,"line":1680},[101,125784,15720],{"class":107},[101,125786,125787],{"class":160}," False\n",[101,125789,125790,125793,125796],{"class":103,"line":1685},[101,125791,125792],{"class":107},"    except",[101,125794,125795],{"class":160}," AttributeError",[101,125797,3726],{"class":111},[101,125799,125800],{"class":103,"line":1714},[101,125801,125802],{"class":107},"        pass\n",[101,125804,125805],{"class":103,"line":1719},[101,125806,2387],{"emptyLinePlaceholder":27},[101,125808,125809,125812,125814,125817,125820,125822],{"class":103,"line":1736},[101,125810,125811],{"class":111},"listener ",[101,125813,157],{"class":107},[101,125815,125816],{"class":111}," keyboard.Listener(",[101,125818,125819],{"class":5204},"on_press",[101,125821,157],{"class":107},[101,125823,125824],{"class":111},"on_press)\n",[101,125826,125827],{"class":103,"line":1741},[101,125828,125829],{"class":111},"listener.start()\n",[101,125831,125832],{"class":103,"line":1746},[101,125833,2387],{"emptyLinePlaceholder":27},[101,125835,125836,125838],{"class":103,"line":1751},[101,125837,108643],{"class":107},[101,125839,125840],{"class":111}," listener.running:\n",[101,125842,125843],{"class":103,"line":1765},[101,125844,125845],{"class":111},"    scene.step()\n",[10,125847,125848],{},[1449,125849],{"alt":20,"src":125850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5114,125852,125853],{},"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":20,"searchDepth":21,"depth":21,"links":125855},[],{"category":23367},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125460,"description":125465},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125862,"title":125863,"body":125864,"description":23365,"extension":24,"meta":125879,"navigation":27,"path":125880,"seo":125881,"stem":125882,"__hash__":125883},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125865,"toc":125876},[125866,125869,125873],[39,125867,125863],{"id":125868},"_1-基础知识",[43,125870,125872],{"id":125871},"_11-js的组成","1.1 js的组成",[10,125874,125875],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":20,"searchDepth":21,"depth":21,"links":125877},[125878],{"id":125871,"depth":21,"text":125872},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125863,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125885,"title":125886,"body":125887,"description":23365,"extension":24,"meta":126026,"navigation":27,"path":126027,"seo":126028,"stem":126029,"__hash__":126030},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125888,"toc":126014},[125889,125892,125896,125899,125903,125913,125917,125920,125923,125926,125930,125937,125943,125947,125953,125964,125968,125971,125975,125978,125982,125985,125989,125992,125996,125999,126002,126005,126008,126011],[39,125890,125886],{"id":125891},"_2-vscode必备内容",[43,125893,125895],{"id":125894},"_21-标签分类","2.1 标签分类",[10,125897,125898],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[43,125900,125902],{"id":125901},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[10,125904,125905,125906,125908,125909,125912],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[98,125907,338],{}," 然后按 ",[98,125910,125911],{},"Tab","，快速自动生成基本结构。",[43,125914,125916],{"id":125915},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[10,125918,125919],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[10,125921,125922],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[10,125924,125925],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[43,125927,125929],{"id":125928},"_24-视图缩放","2.4 视图缩放",[10,125931,125932,125933,125936],{},"缩放视图 ",[98,125934,125935],{},"ctrl+"," 可实现代码增大。",[10,125938,125939,125942],{},[98,125940,125941],{},"ctrl-"," 可实现代码减小。",[43,125944,125946],{"id":125945},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[10,125948,125949,125950,28374],{},"VSCode 新建文件快捷键为 ",[98,125951,125952],{},"ctrl+N",[10,125954,125955,125956,125959,125960,125963],{},"保存快捷键为 ",[98,125957,125958],{},"ctrl+S","，将文本保存为 ",[98,125961,125962],{},".html"," 文件。",[43,125965,125967],{"id":125966},"_26-auto-rename-tag","2.6 Auto Rename Tag",[10,125969,125970],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[43,125972,125974],{"id":125973},"_27-vscode-icons","2.7 vscode-icons",[10,125976,125977],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[43,125979,125981],{"id":125980},"_28-easy-less","2.8 Easy LESS",[10,125983,125984],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[43,125986,125988],{"id":125987},"_29-会了吧插件","2.9 会了吧插件",[10,125990,125991],{},"会了吧插件可以展示代码中英语单词的意思。",[43,125993,125995],{"id":125994},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[10,125997,125998],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[10,126000,126001],{},"②选定多个相同的单词:ctrl+D",[10,126003,126004],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[10,126006,126007],{},"④全局替换某些单词:ctrl+h",[10,126009,126010],{},"⑤快速定位到某一行:ctrl+g",[10,126012,126013],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":20,"searchDepth":21,"depth":21,"links":126015},[126016,126017,126018,126019,126020,126021,126022,126023,126024,126025],{"id":125894,"depth":21,"text":125895},{"id":125901,"depth":21,"text":125902},{"id":125915,"depth":21,"text":125916},{"id":125928,"depth":21,"text":125929},{"id":125945,"depth":21,"text":125946},{"id":125966,"depth":21,"text":125967},{"id":125973,"depth":21,"text":125974},{"id":125980,"depth":21,"text":125981},{"id":125987,"depth":21,"text":125988},{"id":125994,"depth":21,"text":125995},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125886,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126032,"title":126033,"body":126034,"description":23365,"extension":24,"meta":126193,"navigation":27,"path":126194,"seo":126195,"stem":126196,"__hash__":126197},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126035,"toc":126185},[126036,126039,126043,126053,126059,126065,126069,126078,126082,126087,126090,126093,126097,126100,126110,126119,126128,126137,126147,126154,126159,126164,126177],[39,126037,126033],{"id":126038},"_3-html文本与容器标签",[43,126040,126042],{"id":126041},"_31-标题标签","3.1 标题标签",[10,126044,126045,126048,126049,126052],{},[98,126046,126047],{},"\u003Ch1>","我是一级标签",[98,126050,126051],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[10,126054,126055,126048,126057],{},[98,126056,126047],{},[98,126058,126051],{},[10,126060,123315,126061,126064],{},[98,126062,126063],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[43,126066,126068],{"id":126067},"_32-段落标签","3.2 段落标签",[10,126070,126071,126074,126075],{},[98,126072,126073],{},"\u003Cp>","....",[98,126076,126077],{},"\u003C\u002Fp>",[43,126079,126081],{"id":126080},"_33-换行标签","3.3 换行标签",[10,126083,126084],{},[98,126085,126086],{},"\u003Cbr \u002F>",[10,126088,126089],{},"具有强制换行的作用",[10,126091,126092],{},"单标签",[43,126094,126096],{"id":126095},"_34-文本格式化标签","3.4 文本格式化标签",[10,126098,126099],{},"提供粗体、斜体和下划线等效果",[10,126101,126102,126103,82528,126106,126109],{},"加粗：",[98,126104,126105],{},"\u003Cstrong>...\u003C\u002Fstrong>",[98,126107,126108],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[10,126111,126112,126113,82528,126116,126109],{},"斜体：",[98,126114,126115],{},"\u003Cem>...\u003C\u002Fem>",[98,126117,126118],{},"\u003Ci>...\u003C\u002Fi>",[10,126120,126121,126122,82528,126125,126109],{},"删除线：",[98,126123,126124],{},"\u003Cdel>...\u003C\u002Fdel>",[98,126126,126127],{},"\u003Cs>...\u003C\u002Fs>",[10,126129,126130,126131,82528,126134,126109],{},"下划线：",[98,126132,126133],{},"\u003Cins>...\u003C\u002Fins>",[98,126135,126136],{},"\u003Cu>...\u003C\u002Fu>",[43,126138,126140,126141,18398,126144,102673],{"id":126139},"_35-div和span标签","3.5 ",[98,126142,126143],{},"\u003Cdiv>",[98,126145,126146],{},"\u003Cspan>",[10,126148,126149,100998,126151,126153],{},[98,126150,126143],{},[98,126152,126146],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[10,126155,126156],{},[98,126157,126158],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[10,126160,126161],{},[98,126162,126163],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[10,126165,126166,126167,126169,126170,126172,126173,126176],{},"两者特点：①",[98,126168,126143],{}," 标签用来布局，但一行通常只放一个 ",[98,126171,126143],{},"。可以理解为一个大盒子，独占一行，在 ",[98,126174,126175],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[10,126178,77238,126179,126181,126182,126184],{},[98,126180,126146],{}," 标签也可用于布局，一行可以放多个 ",[98,126183,126146],{},"，可理解为小盒子。",{"title":20,"searchDepth":21,"depth":21,"links":126186},[126187,126188,126189,126190,126191],{"id":126041,"depth":21,"text":126042},{"id":126067,"depth":21,"text":126068},{"id":126080,"depth":21,"text":126081},{"id":126095,"depth":21,"text":126096},{"id":126139,"depth":21,"text":126192},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126033,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126199,"title":126200,"body":126201,"description":23365,"extension":24,"meta":126398,"navigation":27,"path":126399,"seo":126400,"stem":126401,"__hash__":126402},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126202,"toc":126390},[126203,126206,126210,126213,126219,126226,126232,126238,126241,126244,126247,126250,126253,126256,126259,126263,126266,126269,126272,126278,126284,126290,126297,126301,126307,126313,126316,126319,126325,126331,126337,126340,126343,126347,126350,126360,126366,126370,126379,126383,126386],[39,126204,126200],{"id":126205},"_4-html图像与链接",[43,126207,126209],{"id":126208},"_41-图像标签","4.1 图像标签",[10,126211,126212],{},"（1）标签",[10,126214,126215,126218],{},[98,126216,126217],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[10,126220,126221,126222,126225],{},"src是",[98,126223,126224],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[10,126227,126228,126229],{},"alt:文本，替换文本。图像不能显示的文字 ",[98,126230,126231],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[10,126233,126234,126235],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[98,126236,126237],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[10,126239,126240],{},"width:像素，设置图像的宽度",[10,126242,126243],{},"height:像素，设置图像的高度",[10,126245,126246],{},"border：像素，设置图像的边框粗细",[10,126248,126249],{},"（2）图像标签属性的注意点：",[10,126251,126252],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[10,126254,126255],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[10,126257,126258],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[43,126260,126262],{"id":126261},"_42-路径注意要点","4.2 路径注意要点：",[10,126264,126265],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[10,126267,126268],{},"（2）根目录：就是打开文件夹的第一层根目录",[10,126270,126271],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[10,126273,126274,126275],{},"①同一级路径：图像文件位于HTML文件同一级，如",[98,126276,126277],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[10,126279,126280,126281],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[98,126282,126283],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[10,126285,126286,126287],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[98,126288,126289],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[10,126291,126292,126293,362],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[14,126294,126295],{"href":126295,"rel":126296},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[18],[43,126298,126300],{"id":126299},"_43-超链接标签","4.3 超链接标签",[10,126302,126303,126306],{},[98,126304,126305],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[10,126308,126309,126310],{},"①语法格式：",[98,126311,126312],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[10,126314,126315],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[10,126317,126318],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[10,126320,126321,126322],{},"③链接分类：外部链接：",[98,126323,126324],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[10,126326,126327,126328],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[98,126329,126330],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[10,126332,126333,126334],{},"空链接：如果当时没有确定链接目标时，",[98,126335,126336],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[10,126338,126339],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[10,126341,126342],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[43,126344,126346],{"id":126345},"_44-锚点链接","4.4 锚点链接",[10,126348,126349],{},"点我们点击链接，可以快速定位到页面中的某个位置",[10,126351,126352,126353,126356,126357],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[98,126354,126355],{},"\u003Ca href=\"#two\">","第二级",[98,126358,126359],{},"\u003C\u002Fa>",[10,126361,126362,126363],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[98,126364,126365],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[43,126367,126369],{"id":126368},"_45-注释标签","4.5 注释标签",[10,126371,126372,126375,126376],{},[98,126373,126374],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[98,126377,126378],{},"ctrl+\u002F",[43,126380,126382],{"id":126381},"_46-特殊字符","4.6 特殊字符",[10,126384,126385],{},"可以实现添加多个空格",[1449,126387],{"style":126388,"src":126389},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":20,"searchDepth":21,"depth":21,"links":126391},[126392,126393,126394,126395,126396,126397],{"id":126208,"depth":21,"text":126209},{"id":126261,"depth":21,"text":126262},{"id":126299,"depth":21,"text":126300},{"id":126345,"depth":21,"text":126346},{"id":126368,"depth":21,"text":126369},{"id":126381,"depth":21,"text":126382},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126200,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126404,"title":126405,"body":126406,"description":23365,"extension":24,"meta":126699,"navigation":27,"path":126700,"seo":126701,"stem":126702,"__hash__":126703},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126407,"toc":126690},[126408,126411,126415,126418,126421,126424,126427,126430,126433,126436,126439,126442,126462,126468,126472,126475,126478,126481,126484,126487,126490,126494,126497,126500,126503,126506,126519,126524,126527,126530,126545,126548,126551,126554,126557,126560,126564,126567,126574,126577,126580,126583,126586,126589,126595,126598,126601,126607,126610,126613,126616,126622,126625,126628,126642,126649,126652,126655,126662,126671,126674,126677,126680,126684,126687],[39,126409,126405],{"id":126410},"_5-html表格列表与表单",[43,126412,126414],{"id":126413},"_51-表格标签","5.1 表格标签",[10,126416,126417],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[10,126419,126420],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[10,126422,126423],{},"②表格基本语法：",[1449,126425],{"style":126388,"src":126426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[10,126428,126429],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1449,126431],{"style":126388,"src":126432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[10,126434,126435],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1449,126437],{"style":126388,"src":126438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[10,126440,126441],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[10,126443,126444,126447,126448,126450,126451,126454,126455,126457,126458,126461],{},[98,126445,126446],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[98,126449,126446],{},"内部必须拥有",[98,126452,126453],{},"\u003Ctr>","标签，一般位于第一行，",[98,126456,126446],{},"比",[98,126459,126460],{},"\u003Cth>","范围广",[10,126463,126464,126467],{},[98,126465,126466],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[43,126469,126471],{"id":126470},"_52-合并单元格","5.2 合并单元格",[10,126473,126474],{},"（1）合并单元格方式：",[10,126476,126477],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[10,126479,126480],{},"②跨列合并：colspan=\"合并单元格的个数\"",[10,126482,126483],{},"（2）目标单元格：",[10,126485,126486],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[10,126488,126489],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[43,126491,126493],{"id":126492},"_53-列表标签","5.3 列表标签",[10,126495,126496],{},"（1）分类：无序列表、有序列表、自定义列表",[10,126498,126499],{},"①无序列表：",[1449,126501],{"style":126388,"src":126502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[10,126504,126505],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[10,126507,126508,126511,126512,126515,126516,126518],{},[98,126509,126510],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[98,126513,126514],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[98,126517,126510],{},"中输入其他标签或文字是不对的",[10,126520,126521,126523],{},[98,126522,126514],{},"之间相当于一个容器，可以容纳所有元素",[10,126525,126526],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[10,126528,126529],{},"在css中去除前边的小圆点采用如下代码:",[92,126531,126535],{"className":126532,"code":126533,"language":126534,"meta":20,"style":20},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[98,126536,126537],{"__ignoreMap":20},[101,126538,126539,126542],{"class":103,"line":104},[101,126540,126541],{"class":51289},"list-style",[101,126543,126544],{"class":111},": none;\n",[10,126546,126547],{},"②有序列表：",[1449,126549],{"style":126388,"src":126550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[10,126552,126553],{},"③自定义列表：",[1449,126555],{"style":126388,"src":126556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1449,126558],{"style":126388,"src":126559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[43,126561,126563],{"id":126562},"_54-表单标签","5.4 表单标签",[10,126565,126566],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[10,126568,126569,126570,126573],{},"（1）表单域：包含单元素的区域，",[98,126571,126572],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1449,126575],{"style":126388,"src":126576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[10,126578,126579],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[10,126581,126582],{},"表单元素提交必须有name属性",[10,126584,126585],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[10,126587,126588],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[10,126590,77215,126591,126594],{},[98,126592,126593],{},"\u003Cinput>","输入表单元素",[1449,126596],{"style":126388,"src":126597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1449,126599],{"style":126388,"src":126600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[10,126602,126603,126604],{},"单选按钮：",[98,126605,126606],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1449,126608],{"style":126388,"src":126609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[10,126611,126612],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1449,126614],{"style":126388,"src":126615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[10,126617,126618,126621],{},[261,126619,126620],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[10,126623,126624],{},"②select下拉表单元素：可以节约页面控件",[1449,126626],{"style":126388,"src":126627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[10,126629,126630,13783,126632,126635,126636,126638,126639,126641],{},[261,126631,141],{},[98,126633,126634],{},"\u003Cselect>","中至少包含一对",[98,126637,102694],{},"；在",[98,126640,102694],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[10,126643,126644,126645,126648],{},"③",[98,126646,126647],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1449,126650],{"style":126388,"src":126651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[10,126653,126654],{},"3行20列",[43,126656,126658,126659,102673],{"id":126657},"_55-lable标签","5.5 ",[98,126660,126661],{},"\u003Clable>",[10,126663,126664,126665,126667,126668,126670],{},"它不是表单标签，但常常与表单标签搭配使用，",[98,126666,126661],{},"标签用于绑定一个表单标签，当点击",[98,126669,126661],{},"标签内的文本",[10,126672,126673],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1449,126675],{"style":126388,"src":126676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1449,126678],{"style":126388,"src":126679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[43,126681,126683],{"id":126682},"_56-实例","5.6 实例",[1449,126685],{"style":126388,"src":126686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5114,126688,126689],{},"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":20,"searchDepth":21,"depth":21,"links":126691},[126692,126693,126694,126695,126696,126698],{"id":126413,"depth":21,"text":126414},{"id":126470,"depth":21,"text":126471},{"id":126492,"depth":21,"text":126493},{"id":126562,"depth":21,"text":126563},{"id":126657,"depth":21,"text":126697},"5.5 \u003Clable>标签",{"id":126682,"depth":21,"text":126683},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126405,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126705,"title":126706,"body":126707,"description":23365,"extension":24,"meta":127256,"navigation":27,"path":127257,"seo":127258,"stem":127259,"__hash__":127260},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126708,"toc":127231},[126709,126712,126716,126719,126722,126726,126729,126732,126735,126738,126741,126744,126747,126751,126754,126758,126761,126764,126767,126771,126774,126777,126780,126786,126789,126792,126795,126798,126801,126804,126807,126840,126844,126847,126850,126853,126857,126860,126863,126866,126869,126872,126876,126879,126882,126885,126889,126892,126896,126899,126903,126906,126911,126915,126918,126922,126925,126928,126931,126934,126961,126964,126968,126971,126974,126979,126982,126985,126989,126992,126997,127000,127003,127006,127010,127013,127016,127019,127023,127026,127029,127032,127036,127040,127043,127083,127086,127090,127097,127100,127104,127107,127153,127157,127160,127163,127166,127194,127198,127201,127228],[39,126710,126706],{"id":126711},"_6-css语法与文本样式",[43,126713,126715],{"id":126714},"_61-css语法规范","6.1 css语法规范",[10,126717,126718],{},"由两部分组成，选择器及一条或多条声明",[1449,126720],{"style":126388,"src":126721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[10,126723,126724],{},[261,126725,141],{},[10,126727,126728],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[10,126730,126731],{},"②属性与属性值以“键值对”的形式出现",[10,126733,126734],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[10,126736,126737],{},"④属性和属性值之间用英文“;”分开",[1449,126739],{"style":126388,"src":126740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1449,126742],{"style":126388,"src":126743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1449,126745],{"style":126388,"src":126746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[43,126748,126750],{"id":126749},"_62-css选择器","6.2 css选择器",[10,126752,126753],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[72,126755,126757],{"id":126756},"_621-标签选择器","6.2.1 标签选择器",[10,126759,126760],{},"①优点：能快速为页面中同类型的标签统一设置样式",[10,126762,126763],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1449,126765],{"style":126388,"src":126766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[72,126768,126770],{"id":126769},"_622-类选择器","6.2.2 类选择器",[10,126772,126773],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[10,126775,126776],{},"②样例",[1449,126778],{"style":126388,"src":126779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[10,126781,126782,126783,126785],{},"③ ",[261,126784,126620],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[10,126787,126788],{},"可以理解为给这个标签起了个名字，来表示；",[10,126790,126791],{},"长名称或词组可以使用横线来为选择器命名；",[10,126793,126794],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[10,126796,126797],{},"命名要有意义；",[1449,126799],{"style":126388,"src":126800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[10,126802,126803],{},"类选择器也可以指定特殊的元素p.center{}",[10,126805,126806],{},"p.center和.center都对",[92,126808,126810],{"className":126532,"code":126809,"language":126534,"meta":20,"style":20},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[98,126811,126812,126817,126826,126836],{"__ignoreMap":20},[101,126813,126814],{"class":103,"line":104},[101,126815,126816],{"class":170},"\u002F* 类选择器指定特殊元素 *\u002F\n",[101,126818,126819,126821,126824],{"class":103,"line":21},[101,126820,10],{"class":51289},[101,126822,126823],{"class":1950},".center",[101,126825,15560],{"class":111},[101,126827,126828,126830,126832,126834],{"class":103,"line":1166},[101,126829,70515],{"class":160},[101,126831,51426],{"class":111},[101,126833,51581],{"class":160},[101,126835,1277],{"class":111},[101,126837,126838],{"class":103,"line":1181},[101,126839,1552],{"class":111},[72,126841,126843],{"id":126842},"_623-多类名使用","6.2.3 多类名使用",[10,126845,126846],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1449,126848],{"style":126388,"src":126849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[10,126851,126852],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[72,126854,126856],{"id":126855},"_624-id选择器","6.2.4 id选择器",[10,126858,126859],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[10,126861,126862],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1449,126864],{"style":126388,"src":126865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[10,126867,126868],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[10,126870,126871],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[72,126873,126875],{"id":126874},"_625-通配符选择器","6.2.5 通配符选择器",[10,126877,126878],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[10,126880,126881],{},"* {",[10,126883,126884],{},"color=\"red\"}",[72,126886,126888],{"id":126887},"_626-总结","6.2.6 总结",[1449,126890],{"style":126388,"src":126891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[43,126893,126895],{"id":126894},"_63-css字体属性","6.3 css字体属性",[10,126897,126898],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[72,126900,126902],{"id":126901},"_631-字体系列","6.3.1 字体系列",[10,126904,126905],{},"font-family: '宋体';",[10,126907,126908,126910],{},[261,126909,141],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[72,126912,126914],{"id":126913},"_632-字体大小","6.3.2 字体大小",[10,126916,126917],{},"font-size: 20px",[10,126919,126920,26462],{},[261,126921,126620],{},[10,126923,126924],{},"①px（像素）大小是网页的最常用单位",[10,126926,126927],{},"②谷歌浏览器默认为16px",[10,126929,126930],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[10,126932,126933],{},"④可以给body指定整个页面的大小：会自动引用",[92,126935,126937],{"className":126532,"code":126936,"language":126534,"meta":20,"style":20},"body {\n  font-size: 16px;\n}\n",[98,126938,126939,126945,126957],{"__ignoreMap":20},[101,126940,126941,126943],{"class":103,"line":104},[101,126942,51789],{"class":51289},[101,126944,15560],{"class":111},[101,126946,126947,126949,126951,126953,126955],{"class":103,"line":21},[101,126948,70615],{"class":160},[101,126950,51426],{"class":111},[101,126952,712],{"class":160},[101,126954,51481],{"class":107},[101,126956,1277],{"class":111},[101,126958,126959],{"class":103,"line":1166},[101,126960,1552],{"class":111},[10,126962,126963],{},"⑤标题标签比较特殊，需要单独指定大小",[72,126965,126967],{"id":126966},"_633-字体粗细","6.3.3 字体粗细",[10,126969,126970],{},"font-weight: bold;",[10,126972,126973],{},"font-weight: 100；",[10,126975,126976,126978],{},[261,126977,141],{}," ①粗体文字变细：尽量别用normal，多用数字",[10,126980,126981],{},"font-weight= 400;",[10,126983,126984],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[72,126986,126988],{"id":126987},"_634-文字样式","6.3.4 文字样式",[10,126990,126991],{},"font-style: normal；",[10,126993,126994,26462],{},[261,126995,126996],{},"属性值",[10,126998,126999],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[10,127001,127002],{},"②italic：浏览器会显示斜体的字体样式",[1449,127004],{"style":126388,"src":127005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[72,127007,127009],{"id":127008},"_635-字体符合属性","6.3.5 字体符合属性",[1449,127011],{"style":126388,"src":127012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1449,127014],{"style":126388,"src":127015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[10,127017,127018],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[10,127020,127021,26462],{},[261,127022,126620],{},[10,127024,127025],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[10,127027,127028],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[10,127030,127031],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[43,127033,127035],{"id":127034},"_64-css-test文本属性","6.4 css test文本属性",[72,127037,127039],{"id":127038},"_641-文本颜色","6.4.1 文本颜色",[10,127041,127042],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[92,127044,127046],{"className":126532,"code":127045,"language":126534,"meta":20,"style":20},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[98,127047,127048,127053,127059,127069,127074,127079],{"__ignoreMap":20},[101,127049,127050],{"class":103,"line":104},[101,127051,127052],{"class":170},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[101,127054,127055,127057],{"class":103,"line":21},[101,127056,10],{"class":51289},[101,127058,15560],{"class":111},[101,127060,127061,127063,127065,127067],{"class":103,"line":1166},[101,127062,70894],{"class":160},[101,127064,51426],{"class":111},[101,127066,57410],{"class":160},[101,127068,1277],{"class":111},[101,127070,127071],{"class":103,"line":1181},[101,127072,127073],{"class":170},"  \u002F* color: #ff0000; *\u002F\n",[101,127075,127076],{"class":103,"line":1187},[101,127077,127078],{"class":170},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[101,127080,127081],{"class":103,"line":1201},[101,127082,1552],{"class":111},[1449,127084],{"style":126388,"src":127085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[72,127087,127089],{"id":127088},"_642-对齐文本","6.4.2 对齐文本",[10,127091,127092,127093,127096],{},"text-align属于用于设置元素内文本内容的 ",[261,127094,127095],{},"水平对齐"," 方式",[10,127098,127099],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[72,127101,127103],{"id":127102},"_643-装饰文本","6.4.3 装饰文本",[10,127105,127106],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[92,127108,127110],{"className":126532,"code":127109,"language":126534,"meta":20,"style":20},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[98,127111,127112,127118,127128,127132,127138,127149],{"__ignoreMap":20},[101,127113,127114,127116],{"class":103,"line":104},[101,127115,14],{"class":51289},[101,127117,15560],{"class":111},[101,127119,127120,127122,127124,127126],{"class":103,"line":21},[101,127121,70491],{"class":160},[101,127123,51426],{"class":111},[101,127125,54726],{"class":160},[101,127127,1277],{"class":111},[101,127129,127130],{"class":103,"line":1166},[101,127131,1552],{"class":111},[101,127133,127134,127136],{"class":103,"line":1181},[101,127135,10],{"class":51289},[101,127137,15560],{"class":111},[101,127139,127140,127142,127144,127147],{"class":103,"line":1187},[101,127141,70491],{"class":160},[101,127143,51426],{"class":111},[101,127145,127146],{"class":160},"underline",[101,127148,1277],{"class":111},[101,127150,127151],{"class":103,"line":1201},[101,127152,1552],{"class":111},[72,127154,127156],{"id":127155},"_644-文本缩进","6.4.4 文本缩进",[10,127158,127159],{},"实现文本的第一行首行缩进自己指定的距离",[10,127161,127162],{},"20px往右边走；-20px往左边走",[10,127164,127165],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[92,127167,127169],{"className":126532,"code":127168,"language":126534,"meta":20,"style":20},"p {\n  text-indent: 2em;\n}\n",[98,127170,127171,127177,127190],{"__ignoreMap":20},[101,127172,127173,127175],{"class":103,"line":104},[101,127174,10],{"class":51289},[101,127176,15560],{"class":111},[101,127178,127179,127182,127184,127186,127188],{"class":103,"line":21},[101,127180,127181],{"class":160},"  text-indent",[101,127183,51426],{"class":111},[101,127185,189],{"class":160},[101,127187,23542],{"class":107},[101,127189,1277],{"class":111},[101,127191,127192],{"class":103,"line":1166},[101,127193,1552],{"class":111},[72,127195,127197],{"id":127196},"_645-行间距","6.4.5 行间距",[10,127199,127200],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[92,127202,127204],{"className":126532,"code":127203,"language":126534,"meta":20,"style":20},"p {\n  line-height: 1.6;\n}\n",[98,127205,127206,127212,127224],{"__ignoreMap":20},[101,127207,127208,127210],{"class":103,"line":104},[101,127209,10],{"class":51289},[101,127211,15560],{"class":111},[101,127213,127214,127217,127219,127222],{"class":103,"line":21},[101,127215,127216],{"class":160},"  line-height",[101,127218,51426],{"class":111},[101,127220,127221],{"class":160},"1.6",[101,127223,1277],{"class":111},[101,127225,127226],{"class":103,"line":1166},[101,127227,1552],{"class":111},[5114,127229,127230],{},"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":20,"searchDepth":21,"depth":21,"links":127232},[127233,127234,127242,127249],{"id":126714,"depth":21,"text":126715},{"id":126749,"depth":21,"text":126750,"children":127235},[127236,127237,127238,127239,127240,127241],{"id":126756,"depth":1166,"text":126757},{"id":126769,"depth":1166,"text":126770},{"id":126842,"depth":1166,"text":126843},{"id":126855,"depth":1166,"text":126856},{"id":126874,"depth":1166,"text":126875},{"id":126887,"depth":1166,"text":126888},{"id":126894,"depth":21,"text":126895,"children":127243},[127244,127245,127246,127247,127248],{"id":126901,"depth":1166,"text":126902},{"id":126913,"depth":1166,"text":126914},{"id":126966,"depth":1166,"text":126967},{"id":126987,"depth":1166,"text":126988},{"id":127008,"depth":1166,"text":127009},{"id":127034,"depth":21,"text":127035,"children":127250},[127251,127252,127253,127254,127255],{"id":127038,"depth":1166,"text":127039},{"id":127088,"depth":1166,"text":127089},{"id":127102,"depth":1166,"text":127103},{"id":127155,"depth":1166,"text":127156},{"id":127196,"depth":1166,"text":127197},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126706,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127262,"title":127263,"body":127264,"description":23365,"extension":24,"meta":127913,"navigation":27,"path":127914,"seo":127915,"stem":127916,"__hash__":127917},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127265,"toc":127894},[127266,127269,127273,127277,127337,127341,127351,127354,127357,127361,127386,127390,127393,127396,127399,127402,127405,127409,127412,127415,127457,127460,127486,127492,127495,127499,127503,127509,127512,127515,127518,127521,127524,127527,127572,127576,127579,127582,127586,127590,127619,127622,127627,127630,127633,127636,127639,127643,127647,127650,127652,127655,127659,127662,127666,127669,127672,127675,127679,127683,127689,127699,127702,127705,127708,127711,127714,127837,127845,127853,127891],[39,127267,127263],{"id":127268},"_7-css引入方式与选择器进阶",[43,127270,127272],{"id":127271},"_71-css引入方式","7.1 css引入方式",[72,127274,127276],{"id":127275},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[92,127278,127282],{"className":127279,"code":127280,"language":127281,"meta":20,"style":20},"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",[98,127283,127284,127292,127299,127311,127324,127329],{"__ignoreMap":20},[101,127285,127286,127288,127290],{"class":103,"line":104},[101,127287,1021],{"class":111},[101,127289,5114],{"class":51289},[101,127291,51296],{"class":111},[101,127293,127294,127297],{"class":103,"line":21},[101,127295,127296],{"class":51289},"  h1",[101,127298,15560],{"class":111},[101,127300,127301,127304,127306,127309],{"class":103,"line":1166},[101,127302,127303],{"class":160},"    color",[101,127305,51426],{"class":111},[101,127307,127308],{"class":160},"blue",[101,127310,1277],{"class":111},[101,127312,127313,127316,127318,127320,127322],{"class":103,"line":1181},[101,127314,127315],{"class":160},"    font-size",[101,127317,51426],{"class":111},[101,127319,911],{"class":160},[101,127321,51481],{"class":107},[101,127323,1277],{"class":111},[101,127325,127326],{"class":103,"line":1187},[101,127327,127328],{"class":111},"  }\n",[101,127330,127331,127333,127335],{"class":103,"line":1201},[101,127332,51774],{"class":111},[101,127334,5114],{"class":51289},[101,127336,51296],{"class":111},[10,127338,127339,26462],{},[261,127340,126620],{},[10,127342,77215,127343,127346,127347,127350],{},[98,127344,127345],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[98,127348,127349],{},"\u003Chead>","标签中",[10,127352,127353],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[10,127355,127356],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[72,127358,127360],{"id":127359},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[92,127362,127364],{"className":127279,"code":127363,"language":127281,"meta":20,"style":20},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[98,127365,127366],{"__ignoreMap":20},[101,127367,127368,127370,127372,127374,127376,127379,127382,127384],{"class":103,"line":104},[101,127369,1021],{"class":111},[101,127371,10],{"class":51289},[101,127373,62615],{"class":1950},[101,127375,157],{"class":111},[101,127377,127378],{"class":216},"\"color: red; font-size: 16px;\"",[101,127380,127381],{"class":111},">这是一个段落\u003C\u002F",[101,127383,10],{"class":51289},[101,127385,51296],{"class":111},[10,127387,127388,26462],{},[261,127389,126620],{},[10,127391,127392],{},"①style其实就是标签的属性",[10,127394,127395],{},"②在双引号中间，写法要符合css规范",[10,127397,127398],{},"③可以控制当前的标签设置样式",[10,127400,127401],{},"④书写繁琐，简单时才用",[10,127403,127404],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[72,127406,127408],{"id":127407},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[10,127410,127411],{},"使用最多，单独建一个css文件，然后html引用",[10,127413,127414],{},"①css文件部分： style.css",[92,127416,127418],{"className":126532,"code":127417,"language":126534,"meta":20,"style":20},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[98,127419,127420,127425,127431,127441,127453],{"__ignoreMap":20},[101,127421,127422],{"class":103,"line":104},[101,127423,127424],{"class":170},"\u002F* style.css *\u002F\n",[101,127426,127427,127429],{"class":103,"line":21},[101,127428,39],{"class":51289},[101,127430,15560],{"class":111},[101,127432,127433,127435,127437,127439],{"class":103,"line":1166},[101,127434,70894],{"class":160},[101,127436,51426],{"class":111},[101,127438,127308],{"class":160},[101,127440,1277],{"class":111},[101,127442,127443,127445,127447,127449,127451],{"class":103,"line":1181},[101,127444,70615],{"class":160},[101,127446,51426],{"class":111},[101,127448,911],{"class":160},[101,127450,51481],{"class":107},[101,127452,1277],{"class":111},[101,127454,127455],{"class":103,"line":1187},[101,127456,1552],{"class":111},[10,127458,127459],{},"②html部分",[92,127461,127463],{"className":127279,"code":127462,"language":127281,"meta":20,"style":20},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[98,127464,127465],{"__ignoreMap":20},[101,127466,127467,127469,127471,127473,127475,127477,127479,127481,127484],{"class":103,"line":104},[101,127468,1021],{"class":111},[101,127470,68994],{"class":51289},[101,127472,68997],{"class":1950},[101,127474,157],{"class":111},[101,127476,69002],{"class":216},[101,127478,61046],{"class":1950},[101,127480,157],{"class":111},[101,127482,127483],{"class":216},"\"style.css\"",[101,127485,51296],{"class":111},[10,127487,127488,127491],{},[98,127489,127490],{},"\u003Chr>","水平线标签（但是不常用！）",[10,127493,127494],{},"ctrl+0回到页面原来大小",[43,127496,127498],{"id":127497},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[72,127500,127502],{"id":127501},"_721-快速生成html","7.2.1 快速生成html",[10,127504,127505,127506],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[98,127507,127508],{},"\u003Cdiv>``\u003C\u002Fdiv>",[10,127510,127511],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[10,127513,127514],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[10,127516,127517],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[10,127519,127520],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[10,127522,127523],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[10,127525,127526],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[92,127528,127530],{"className":127279,"code":127529,"language":127281,"meta":20,"style":20},"\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",[98,127531,127532,127537,127542,127547,127552,127557,127562,127567],{"__ignoreMap":20},[101,127533,127534],{"class":103,"line":104},[101,127535,127536],{"class":170},"\u003C!-- Emmet 语法示例 -->\n",[101,127538,127539],{"class":103,"line":21},[101,127540,127541],{"class":170},"\u003C!-- div*3        → 生成3个div -->\n",[101,127543,127544],{"class":103,"line":1166},[101,127545,127546],{"class":170},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[101,127548,127549],{"class":103,"line":1181},[101,127550,127551],{"class":170},"\u003C!-- div+p        → 兄弟div和p -->\n",[101,127553,127554],{"class":103,"line":1187},[101,127555,127556],{"class":170},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[101,127558,127559],{"class":103,"line":1201},[101,127560,127561],{"class":170},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[101,127563,127564],{"class":103,"line":1207},[101,127565,127566],{"class":170},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[101,127568,127569],{"class":103,"line":1298},[101,127570,127571],{"class":170},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[72,127573,127575],{"id":127574},"_722-快速生成css","7.2.2 快速生成css",[10,127577,127578],{},"简写开头",[10,127580,127581],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[43,127583,127585],{"id":127584},"_73-css复合选择器","7.3 css复合选择器",[72,127587,127589],{"id":127588},"_731-后代选择器","7.3.1 后代选择器",[92,127591,127593],{"className":126532,"code":127592,"language":126534,"meta":20,"style":20},".parent .child {\n  color: blue;\n}\n",[98,127594,127595,127605,127615],{"__ignoreMap":20},[101,127596,127597,127600,127603],{"class":103,"line":104},[101,127598,127599],{"class":1950},".parent",[101,127601,127602],{"class":1950}," .child",[101,127604,15560],{"class":111},[101,127606,127607,127609,127611,127613],{"class":103,"line":21},[101,127608,70894],{"class":160},[101,127610,51426],{"class":111},[101,127612,127308],{"class":160},[101,127614,1277],{"class":111},[101,127616,127617],{"class":103,"line":1166},[101,127618,1552],{"class":111},[10,127620,127621],{},"元素1 元素2 {样式声明}",[10,127623,127624],{},[261,127625,127626],{},"注意点:",[10,127628,127629],{},"①元素1和元素2中间用空格隔开",[10,127631,127632],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[10,127634,127635],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[10,127637,127638],{},"④元素1和元素2可以是任意基础选择器",[72,127640,127642],{"id":127641},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[10,127644,127645],{},[261,127646,127626],{},[10,127648,127649],{},"①元素1和元素2中间用大于号隔开",[10,127651,127632],{},[10,127653,127654],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[72,127656,127658],{"id":127657},"_733-并集选择器","7.3.3 并集选择器",[10,127660,127661],{},"元素1，元素2 {样式声明}",[10,127663,127664],{},[261,127665,127626],{},[10,127667,127668],{},"①元素1和元素2中间用逗号隔开",[10,127670,127671],{},"②逗号可以理解为和的意思",[10,127673,127674],{},"③并集选择器通常用于集体声明",[72,127676,127678],{"id":127677},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[10,127680,127681],{},[261,127682,127626],{},[10,127684,127685,127686,127688],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68994,127687],{},"－:visited－:hover－:active。",[10,127690,127691,127692,127695,127696,25729],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127693,127694],"hover",{}," 、 ",[127697,127698],"first-child",{},[10,127700,127701],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[10,127703,127704],{},"link对没访问的进行设置",[10,127706,127707],{},"vistied对已访问的进行改变",[10,127709,127710],{},"hover鼠标经过就会变",[10,127712,127713],{},"active常按(点)就会变",[92,127715,127717],{"className":126532,"code":127716,"language":126534,"meta":20,"style":20},"\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",[98,127718,127719,127724,127733,127743,127753,127757,127766,127777,127781,127789,127799,127809,127813,127822,127833],{"__ignoreMap":20},[101,127720,127721],{"class":103,"line":104},[101,127722,127723],{"class":170},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[101,127725,127726,127728,127731],{"class":103,"line":21},[101,127727,14],{"class":51289},[101,127729,127730],{"class":1950},":link",[101,127732,15560],{"class":111},[101,127734,127735,127737,127739,127741],{"class":103,"line":1166},[101,127736,70894],{"class":160},[101,127738,51426],{"class":111},[101,127740,62358],{"class":160},[101,127742,1277],{"class":111},[101,127744,127745,127747,127749,127751],{"class":103,"line":1181},[101,127746,70491],{"class":160},[101,127748,51426],{"class":111},[101,127750,54726],{"class":160},[101,127752,1277],{"class":111},[101,127754,127755],{"class":103,"line":1187},[101,127756,1552],{"class":111},[101,127758,127759,127761,127764],{"class":103,"line":1201},[101,127760,14],{"class":51289},[101,127762,127763],{"class":1950},":visited",[101,127765,15560],{"class":111},[101,127767,127768,127770,127772,127775],{"class":103,"line":1207},[101,127769,70894],{"class":160},[101,127771,51426],{"class":111},[101,127773,127774],{"class":160},"purple",[101,127776,1277],{"class":111},[101,127778,127779],{"class":103,"line":1298},[101,127780,1552],{"class":111},[101,127782,127783,127785,127787],{"class":103,"line":1304},[101,127784,14],{"class":51289},[101,127786,60929],{"class":1950},[101,127788,15560],{"class":111},[101,127790,127791,127793,127795,127797],{"class":103,"line":1316},[101,127792,70894],{"class":160},[101,127794,51426],{"class":111},[101,127796,54878],{"class":160},[101,127798,1277],{"class":111},[101,127800,127801,127803,127805,127807],{"class":103,"line":1599},[101,127802,70491],{"class":160},[101,127804,51426],{"class":111},[101,127806,127146],{"class":160},[101,127808,1277],{"class":111},[101,127810,127811],{"class":103,"line":1604},[101,127812,1552],{"class":111},[101,127814,127815,127817,127820],{"class":103,"line":1610},[101,127816,14],{"class":51289},[101,127818,127819],{"class":1950},":active",[101,127821,15560],{"class":111},[101,127823,127824,127826,127828,127831],{"class":103,"line":1615},[101,127825,70894],{"class":160},[101,127827,51426],{"class":111},[101,127829,127830],{"class":160},"green",[101,127832,1277],{"class":111},[101,127834,127835],{"class":103,"line":1629},[101,127836,1552],{"class":111},[72,127838,127840,127841,127844],{"id":127839},"_735-伪类选择器","7.3.5 ",[127842,127843],"focus",{},"伪类选择器",[10,127846,127847,127849,127850,127852],{},[127842,127848],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[98,127851,126593],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[92,127854,127856],{"className":126532,"code":127855,"language":126534,"meta":20,"style":20},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[98,127857,127858,127866,127877,127887],{"__ignoreMap":20},[101,127859,127860,127862,127864],{"class":103,"line":104},[101,127861,53810],{"class":51289},[101,127863,61889],{"class":1950},[101,127865,15560],{"class":111},[101,127867,127868,127871,127873,127875],{"class":103,"line":21},[101,127869,127870],{"class":160},"  border-color",[101,127872,51426],{"class":111},[101,127874,54878],{"class":160},[101,127876,1277],{"class":111},[101,127878,127879,127881,127883,127885],{"class":103,"line":1166},[101,127880,70787],{"class":160},[101,127882,51426],{"class":111},[101,127884,54726],{"class":160},[101,127886,1277],{"class":111},[101,127888,127889],{"class":103,"line":1181},[101,127890,1552],{"class":111},[5114,127892,127893],{},"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":20,"searchDepth":21,"depth":21,"links":127895},[127896,127901,127905],{"id":127271,"depth":21,"text":127272,"children":127897},[127898,127899,127900],{"id":127275,"depth":1166,"text":127276},{"id":127359,"depth":1166,"text":127360},{"id":127407,"depth":1166,"text":127408},{"id":127497,"depth":21,"text":127498,"children":127902},[127903,127904],{"id":127501,"depth":1166,"text":127502},{"id":127574,"depth":1166,"text":127575},{"id":127584,"depth":21,"text":127585,"children":127906},[127907,127908,127909,127910,127911],{"id":127588,"depth":1166,"text":127589},{"id":127641,"depth":1166,"text":127642},{"id":127657,"depth":1166,"text":127658},{"id":127677,"depth":1166,"text":127678},{"id":127839,"depth":1166,"text":127912},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127263,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127919,"title":127920,"body":127921,"description":23365,"extension":24,"meta":129844,"navigation":27,"path":129845,"seo":129846,"stem":129847,"__hash__":129848},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127922,"toc":129818},[127923,127926,127930,127939,127943,127969,127974,127977,127980,127983,127986,127990,127993,128003,128011,128015,128050,128055,128058,128061,128064,128067,128071,128074,128083,128087,128100,128105,128108,128111,128114,128118,128121,128125,128128,128183,128186,128217,128220,128274,128278,128281,128447,128570,128573,128576,128579,128582,128586,128589,128593,128596,128599,128603,128606,128637,128664,128692,128695,128699,128725,128768,128772,128866,128869,128896,128899,128902,128905,128908,128911,128914,128917,128920,128923,128927,128984,129011,129015,129063,129067,129108,129110,129113,129116,129119,129122,129126,129218,129221,129224,129227,129231,129354,129555,129559,129563,129566,129569,129572,129576,129579,129582,129607,129610,129613,129616,129619,129622,129626,129634,129696,129699,129757,129760,129763,129766,129769,129772,129775,129778,129815],[39,127924,127920],{"id":127925},"_8-css显示模式与背景特性",[43,127927,127929],{"id":127928},"_81-css元素显示模式","8.1 css元素显示模式",[10,127931,127932,127933,127935,127936,127938],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[98,127934,126143],{},"自己占一行，比如一行可以放多个",[98,127937,126146],{},"，HTML 元素一般分为块元素和行内元素两种类型",[72,127940,127942],{"id":127941},"_811-块元素","8.1.1 块元素",[10,127944,127945,127946,127948,127949,324,127952,324,127954,324,127956,324,127959,324,127962,127965,127966,127968],{},"常见的块元素有",[98,127947,126047],{},"~",[98,127950,127951],{},"\u003Ch6>",[98,127953,126073],{},[98,127955,126143],{},[98,127957,127958],{},"\u003Cul>",[98,127960,127961],{},"\u003Col>",[98,127963,127964],{},"\u003Cli>","等，其中 ",[98,127967,126143],{}," 标签是最典型的块元素",[10,127970,127971],{},[261,127972,127973],{},"块级元素的特点：",[10,127975,127976],{},"① 比较霸道，自己独占一行。",[10,127978,127979],{},"② 高度，宽度、外边距以及内边距都可以控制。",[10,127981,127982],{},"③ 宽度默认是容器（父级宽度）的100%。",[10,127984,127985],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[10,127987,127988],{},[261,127989,141],{},[10,127991,127992],{},"①文字类的元素内不能使用块级元素",[10,127994,77238,127995,127997,127998,128000,128001],{},[98,127996,126073],{}," 标签主要用于存放文字，因此 ",[98,127999,126073],{}," 里面不能放块级元素，特别是不能放",[98,128002,126143],{},[10,128004,128005,128006,127948,128008,128010],{},"⑥同理， ",[98,128007,126047],{},[98,128009,127951],{},"等都是文字类块级标签，里面也不能放其他块级元素",[72,128012,128014],{"id":128013},"_812-行内元素","8.1.2 行内元素",[10,128016,128017,128018,324,128020,324,128023,324,128026,324,128029,324,128032,324,128035,324,128038,324,128041,324,128044,128046,128047,128049],{},"常见的行内元素有 ",[98,128019,126305],{},[98,128021,128022],{},"\u003Cstrong>",[98,128024,128025],{},"\u003Cb>",[98,128027,128028],{},"\u003Cem>",[98,128030,128031],{},"\u003Ci>",[98,128033,128034],{},"\u003Cdel>",[98,128036,128037],{},"\u003Cs>",[98,128039,128040],{},"\u003Cins>",[98,128042,128043],{},"\u003Cu>",[98,128045,126146],{}," 等，其中 ",[98,128048,126146],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[10,128051,128052],{},[261,128053,128054],{},"特点：",[10,128056,128057],{},"① 相邻行内元素在一行上，一行可以显示多个。",[10,128059,128060],{},"② 高、宽直接设置是无效的。",[10,128062,128063],{},"③ 默认宽度就是它本身内容的宽度。",[10,128065,128066],{},"④ 行内元素只能容纳文本或其他行内元素。",[10,128068,128069],{},[261,128070,141],{},[10,128072,128073],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[10,128075,128076,128077,128079,128080,128082],{},"②特殊情况链接 ",[98,128078,126305],{}," 里面可以放块级元素，但是给 ",[98,128081,126305],{}," 转换一下块级模式最安全",[72,128084,128086],{"id":128085},"_813-行内块元素","8.1.3 行内块元素",[10,128088,128089,128090,324,128093,324,128096,128099],{},"在行内元素中有几个特殊的标签 —— ",[98,128091,128092],{},"\u003Cimg \u002F>",[98,128094,128095],{},"\u003Cinput \u002F>",[98,128097,128098],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[10,128101,128102],{},[261,128103,128104],{},"行内块元素的特点：",[10,128106,128107],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[10,128109,128110],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[10,128112,128113],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[72,128115,128117],{"id":128116},"_814-总结","8.1.4 总结",[1449,128119],{"style":126388,"src":128120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[72,128122,128124],{"id":128123},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[10,128126,128127],{},"①转换为块元素：display:block;",[92,128129,128131],{"className":126532,"code":128130,"language":126534,"meta":20,"style":20},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[98,128132,128133,128138,128144,128155,128167,128179],{"__ignoreMap":20},[101,128134,128135],{"class":103,"line":104},[101,128136,128137],{"class":170},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[101,128139,128140,128142],{"class":103,"line":21},[101,128141,14],{"class":51289},[101,128143,15560],{"class":111},[101,128145,128146,128149,128151,128153],{"class":103,"line":1166},[101,128147,128148],{"class":160},"  display",[101,128150,51426],{"class":111},[101,128152,60858],{"class":160},[101,128154,1277],{"class":111},[101,128156,128157,128159,128161,128163,128165],{"class":103,"line":1181},[101,128158,70557],{"class":160},[101,128160,51426],{"class":111},[101,128162,422],{"class":160},[101,128164,51481],{"class":107},[101,128166,1277],{"class":111},[101,128168,128169,128171,128173,128175,128177],{"class":103,"line":1187},[101,128170,70777],{"class":160},[101,128172,51426],{"class":111},[101,128174,512],{"class":160},[101,128176,51481],{"class":107},[101,128178,1277],{"class":111},[101,128180,128181],{"class":103,"line":1201},[101,128182,1552],{"class":111},[10,128184,128185],{},"②转换为行内元素：display:inline;",[92,128187,128189],{"className":126532,"code":128188,"language":126534,"meta":20,"style":20},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[98,128190,128191,128196,128202,128213],{"__ignoreMap":20},[101,128192,128193],{"class":103,"line":104},[101,128194,128195],{"class":170},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[101,128197,128198,128200],{"class":103,"line":21},[101,128199,51600],{"class":51289},[101,128201,15560],{"class":111},[101,128203,128204,128206,128208,128211],{"class":103,"line":1166},[101,128205,128148],{"class":160},[101,128207,51426],{"class":111},[101,128209,128210],{"class":160},"inline",[101,128212,1277],{"class":111},[101,128214,128215],{"class":103,"line":1181},[101,128216,1552],{"class":111},[10,128218,128219],{},"③转换为行内块：display:inline-block;",[92,128221,128223],{"className":126532,"code":128222,"language":126534,"meta":20,"style":20},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[98,128224,128225,128230,128236,128246,128258,128270],{"__ignoreMap":20},[101,128226,128227],{"class":103,"line":104},[101,128228,128229],{"class":170},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[101,128231,128232,128234],{"class":103,"line":21},[101,128233,101],{"class":51289},[101,128235,15560],{"class":111},[101,128237,128238,128240,128242,128244],{"class":103,"line":1166},[101,128239,128148],{"class":160},[101,128241,51426],{"class":111},[101,128243,72372],{"class":160},[101,128245,1277],{"class":111},[101,128247,128248,128250,128252,128254,128256],{"class":103,"line":1181},[101,128249,70557],{"class":160},[101,128251,51426],{"class":111},[101,128253,723],{"class":160},[101,128255,51481],{"class":107},[101,128257,1277],{"class":111},[101,128259,128260,128262,128264,128266,128268],{"class":103,"line":1187},[101,128261,70777],{"class":160},[101,128263,51426],{"class":111},[101,128265,1062],{"class":160},[101,128267,51481],{"class":107},[101,128269,1277],{"class":111},[101,128271,128272],{"class":103,"line":1201},[101,128273,1552],{"class":111},[72,128275,128277],{"id":128276},"_816-小米侧边栏","8.1.6 小米侧边栏",[1449,128279],{"style":126388,"src":128280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[92,128282,128284],{"className":127279,"code":128283,"language":127281,"meta":20,"style":20},"\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",[98,128285,128286,128291,128306,128325,128344,128363,128382,128401,128420,128439],{"__ignoreMap":20},[101,128287,128288],{"class":103,"line":104},[101,128289,128290],{"class":170},"\u003C!-- 小米侧边栏案例 -->\n",[101,128292,128293,128295,128297,128299,128301,128304],{"class":103,"line":21},[101,128294,1021],{"class":111},[101,128296,51600],{"class":51289},[101,128298,53475],{"class":1950},[101,128300,157],{"class":111},[101,128302,128303],{"class":216},"\"sidebar\"",[101,128305,51296],{"class":111},[101,128307,128308,128310,128312,128314,128316,128318,128321,128323],{"class":103,"line":1166},[101,128309,52133],{"class":111},[101,128311,14],{"class":51289},[101,128313,61046],{"class":1950},[101,128315,157],{"class":111},[101,128317,61051],{"class":216},[101,128319,128320],{"class":111},">手机 电话卡\u003C\u002F",[101,128322,14],{"class":51289},[101,128324,51296],{"class":111},[101,128326,128327,128329,128331,128333,128335,128337,128340,128342],{"class":103,"line":1181},[101,128328,52133],{"class":111},[101,128330,14],{"class":51289},[101,128332,61046],{"class":1950},[101,128334,157],{"class":111},[101,128336,61051],{"class":216},[101,128338,128339],{"class":111},">电视 盒子\u003C\u002F",[101,128341,14],{"class":51289},[101,128343,51296],{"class":111},[101,128345,128346,128348,128350,128352,128354,128356,128359,128361],{"class":103,"line":1187},[101,128347,52133],{"class":111},[101,128349,14],{"class":51289},[101,128351,61046],{"class":1950},[101,128353,157],{"class":111},[101,128355,61051],{"class":216},[101,128357,128358],{"class":111},">笔记本 平板\u003C\u002F",[101,128360,14],{"class":51289},[101,128362,51296],{"class":111},[101,128364,128365,128367,128369,128371,128373,128375,128378,128380],{"class":103,"line":1201},[101,128366,52133],{"class":111},[101,128368,14],{"class":51289},[101,128370,61046],{"class":1950},[101,128372,157],{"class":111},[101,128374,61051],{"class":216},[101,128376,128377],{"class":111},">出行 穿戴\u003C\u002F",[101,128379,14],{"class":51289},[101,128381,51296],{"class":111},[101,128383,128384,128386,128388,128390,128392,128394,128397,128399],{"class":103,"line":1207},[101,128385,52133],{"class":111},[101,128387,14],{"class":51289},[101,128389,61046],{"class":1950},[101,128391,157],{"class":111},[101,128393,61051],{"class":216},[101,128395,128396],{"class":111},">智能 路由器\u003C\u002F",[101,128398,14],{"class":51289},[101,128400,51296],{"class":111},[101,128402,128403,128405,128407,128409,128411,128413,128416,128418],{"class":103,"line":1298},[101,128404,52133],{"class":111},[101,128406,14],{"class":51289},[101,128408,61046],{"class":1950},[101,128410,157],{"class":111},[101,128412,61051],{"class":216},[101,128414,128415],{"class":111},">健康 儿童\u003C\u002F",[101,128417,14],{"class":51289},[101,128419,51296],{"class":111},[101,128421,128422,128424,128426,128428,128430,128432,128435,128437],{"class":103,"line":1304},[101,128423,52133],{"class":111},[101,128425,14],{"class":51289},[101,128427,61046],{"class":1950},[101,128429,157],{"class":111},[101,128431,61051],{"class":216},[101,128433,128434],{"class":111},">耳机 音响\u003C\u002F",[101,128436,14],{"class":51289},[101,128438,51296],{"class":111},[101,128440,128441,128443,128445],{"class":103,"line":1316},[101,128442,51774],{"class":111},[101,128444,51600],{"class":51289},[101,128446,51296],{"class":111},[92,128448,128450],{"className":126532,"code":128449,"language":126534,"meta":20,"style":20},".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",[98,128451,128452,128461,128471,128484,128496,128508,128520,128530,128541,128545,128555,128566],{"__ignoreMap":20},[101,128453,128454,128457,128459],{"class":103,"line":104},[101,128455,128456],{"class":1950},".sidebar",[101,128458,1385],{"class":51289},[101,128460,15560],{"class":111},[101,128462,128463,128465,128467,128469],{"class":103,"line":21},[101,128464,128148],{"class":160},[101,128466,51426],{"class":111},[101,128468,60858],{"class":160},[101,128470,1277],{"class":111},[101,128472,128473,128475,128477,128480,128482],{"class":103,"line":1166},[101,128474,70557],{"class":160},[101,128476,51426],{"class":111},[101,128478,128479],{"class":160},"234",[101,128481,51481],{"class":107},[101,128483,1277],{"class":111},[101,128485,128486,128488,128490,128492,128494],{"class":103,"line":1181},[101,128487,70777],{"class":160},[101,128489,51426],{"class":111},[101,128491,563],{"class":160},[101,128493,51481],{"class":107},[101,128495,1277],{"class":111},[101,128497,128498,128500,128502,128504,128506],{"class":103,"line":1187},[101,128499,127216],{"class":160},[101,128501,51426],{"class":111},[101,128503,563],{"class":160},[101,128505,51481],{"class":107},[101,128507,1277],{"class":111},[101,128509,128510,128512,128514,128516,128518],{"class":103,"line":1201},[101,128511,70812],{"class":160},[101,128513,51426],{"class":111},[101,128515,1062],{"class":160},[101,128517,51481],{"class":107},[101,128519,1277],{"class":111},[101,128521,128522,128524,128526,128528],{"class":103,"line":1207},[101,128523,70894],{"class":160},[101,128525,51426],{"class":111},[101,128527,60831],{"class":160},[101,128529,1277],{"class":111},[101,128531,128532,128534,128536,128539],{"class":103,"line":1298},[101,128533,70867],{"class":160},[101,128535,51426],{"class":111},[101,128537,128538],{"class":160},"#55585a",[101,128540,1277],{"class":111},[101,128542,128543],{"class":103,"line":1304},[101,128544,1552],{"class":111},[101,128546,128547,128549,128551,128553],{"class":103,"line":1316},[101,128548,128456],{"class":1950},[101,128550,1385],{"class":51289},[101,128552,60929],{"class":1950},[101,128554,15560],{"class":111},[101,128556,128557,128559,128561,128564],{"class":103,"line":1599},[101,128558,70867],{"class":160},[101,128560,51426],{"class":111},[101,128562,128563],{"class":160},"#ff6700",[101,128565,1277],{"class":111},[101,128567,128568],{"class":103,"line":1604},[101,128569,1552],{"class":111},[1449,128571],{"style":126388,"src":128572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[10,128574,128575],{},"行高=盒子高度：实现文字的垂直居中",[10,128577,128578],{},"原理讲解：",[1449,128580],{"style":126388,"src":128581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[43,128583,128585],{"id":128584},"_82-css背景","8.2 css背景",[10,128587,128588],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[72,128590,128592],{"id":128591},"_821-背景颜色","8.2.1 背景颜色",[10,128594,128595],{},"background-color:颜色值;",[10,128597,128598],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[72,128600,128602],{"id":128601},"_822-背景图片","8.2.2 背景图片",[10,128604,128605],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[92,128607,128609],{"className":126532,"code":128608,"language":126534,"meta":20,"style":20},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[98,128610,128611,128617,128633],{"__ignoreMap":20},[101,128612,128613,128615],{"class":103,"line":104},[101,128614,51600],{"class":51289},[101,128616,15560],{"class":111},[101,128618,128619,128622,128624,128626,128628,128631],{"class":103,"line":21},[101,128620,128621],{"class":160},"  background-image",[101,128623,51426],{"class":111},[101,128625,61715],{"class":160},[101,128627,112],{"class":111},[101,128629,128630],{"class":5204},"images\u002Fbg.png",[101,128632,2706],{"class":111},[101,128634,128635],{"class":103,"line":1166},[101,128636,1552],{"class":111},[249,128638,128639,128648],{},[252,128640,128641],{},[255,128642,128643,128646],{},[258,128644,128645],{"align":23725},"参数值",[258,128647,102676],{"align":23725},[296,128649,128650,128657],{},[255,128651,128652,128654],{},[301,128653,54726],{"align":23725},[301,128655,128656],{"align":23725},"无背景图（默认的）",[255,128658,128659,128661],{},[301,128660,61715],{"align":23725},[301,128662,128663],{"align":23725},"使用绝对或相对地址指定背景图像",[92,128665,128666],{"className":126532,"code":128608,"language":126534,"meta":20,"style":20},[98,128667,128668,128674,128688],{"__ignoreMap":20},[101,128669,128670,128672],{"class":103,"line":104},[101,128671,51600],{"class":51289},[101,128673,15560],{"class":111},[101,128675,128676,128678,128680,128682,128684,128686],{"class":103,"line":21},[101,128677,128621],{"class":160},[101,128679,51426],{"class":111},[101,128681,61715],{"class":160},[101,128683,112],{"class":111},[101,128685,128630],{"class":5204},[101,128687,2706],{"class":111},[101,128689,128690],{"class":103,"line":1166},[101,128691,1552],{"class":111},[10,128693,128694],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[72,128696,128698],{"id":128697},"_823-背景平铺","8.2.3 背景平铺",[92,128700,128702],{"className":126532,"code":128701,"language":126534,"meta":20,"style":20},"div {\n  background-repeat: no-repeat;\n}\n",[98,128703,128704,128710,128721],{"__ignoreMap":20},[101,128705,128706,128708],{"class":103,"line":104},[101,128707,51600],{"class":51289},[101,128709,15560],{"class":111},[101,128711,128712,128715,128717,128719],{"class":103,"line":21},[101,128713,128714],{"class":160},"  background-repeat",[101,128716,51426],{"class":111},[101,128718,61725],{"class":160},[101,128720,1277],{"class":111},[101,128722,128723],{"class":103,"line":1166},[101,128724,1552],{"class":111},[249,128726,128727,128735],{},[252,128728,128729],{},[255,128730,128731,128733],{},[258,128732,128645],{"align":23725},[258,128734,102676],{"align":23725},[296,128736,128737,128745,128752,128760],{},[255,128738,128739,128742],{},[301,128740,128741],{"align":23725},"repeat",[301,128743,128744],{"align":23725},"背景图像在纵向和横向上平铺（默认的）",[255,128746,128747,128749],{},[301,128748,61725],{"align":23725},[301,128750,128751],{"align":23725},"背景图像不平铺",[255,128753,128754,128757],{},[301,128755,128756],{"align":23725},"repeat-x",[301,128758,128759],{"align":23725},"背景图像在横向上平铺",[255,128761,128762,128765],{},[301,128763,128764],{"align":23725},"repeat-y",[301,128766,128767],{"align":23725},"背景图像在纵向平铺",[72,128769,128771],{"id":128770},"_824-背景图片位置","8.2.4 背景图片位置",[92,128773,128775],{"className":126532,"code":128774,"language":126534,"meta":20,"style":20},"\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",[98,128776,128777,128782,128788,128802,128806,128811,128817,128833,128837,128842,128848,128862],{"__ignoreMap":20},[101,128778,128779],{"class":103,"line":104},[101,128780,128781],{"class":170},"\u002F* 方位名词 *\u002F\n",[101,128783,128784,128786],{"class":103,"line":21},[101,128785,51600],{"class":51289},[101,128787,15560],{"class":111},[101,128789,128790,128793,128795,128797,128800],{"class":103,"line":1166},[101,128791,128792],{"class":160},"  background-position",[101,128794,51426],{"class":111},[101,128796,51581],{"class":160},[101,128798,128799],{"class":160}," top",[101,128801,1277],{"class":111},[101,128803,128804],{"class":103,"line":1181},[101,128805,1552],{"class":111},[101,128807,128808],{"class":103,"line":1187},[101,128809,128810],{"class":170},"\u002F* 精确单位 *\u002F\n",[101,128812,128813,128815],{"class":103,"line":1201},[101,128814,51600],{"class":51289},[101,128816,15560],{"class":111},[101,128818,128819,128821,128823,128825,128827,128829,128831],{"class":103,"line":1207},[101,128820,128792],{"class":160},[101,128822,51426],{"class":111},[101,128824,811],{"class":160},[101,128826,51481],{"class":107},[101,128828,57493],{"class":160},[101,128830,51481],{"class":107},[101,128832,1277],{"class":111},[101,128834,128835],{"class":103,"line":1298},[101,128836,1552],{"class":111},[101,128838,128839],{"class":103,"line":1304},[101,128840,128841],{"class":170},"\u002F* 混合单位 *\u002F\n",[101,128843,128844,128846],{"class":103,"line":1316},[101,128845,51600],{"class":51289},[101,128847,15560],{"class":111},[101,128849,128850,128852,128854,128856,128858,128860],{"class":103,"line":1599},[101,128851,128792],{"class":160},[101,128853,51426],{"class":111},[101,128855,811],{"class":160},[101,128857,51481],{"class":107},[101,128859,17132],{"class":160},[101,128861,1277],{"class":111},[101,128863,128864],{"class":103,"line":1604},[101,128865,1552],{"class":111},[10,128867,128868],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[249,128870,128871,128879],{},[252,128872,128873],{},[255,128874,128875,128877],{},[258,128876,128645],{"align":23725},[258,128878,25858],{"align":23725},[296,128880,128881,128888],{},[255,128882,128883,128885],{},[301,128884,51957],{"align":23725},[301,128886,128887],{"align":23725},"百分数|由浮点数和单位标识符组成的长度值",[255,128889,128890,128893],{},[301,128891,128892],{"align":23725},"position",[301,128894,128895],{"align":23725},"top|center|bottom|left|center|right 方位名词",[10,128897,128898],{},"其他说明：",[10,128900,128901],{},"①参数是方位名词",[10,128903,128904],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[10,128906,128907],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[10,128909,128910],{},"②参数是精确单位",[10,128912,128913],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[10,128915,128916],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[10,128918,128919],{},"③参数是混合单位",[10,128921,128922],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[72,128924,128926],{"id":128925},"_825-背景图片固定","8.2.5 背景图片固定",[92,128928,128930],{"className":126532,"code":128929,"language":126534,"meta":20,"style":20},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[98,128931,128932,128937,128943,128955,128959,128964,128970,128980],{"__ignoreMap":20},[101,128933,128934],{"class":103,"line":104},[101,128935,128936],{"class":170},"\u002F* 背景滚动（默认） *\u002F\n",[101,128938,128939,128941],{"class":103,"line":21},[101,128940,51600],{"class":51289},[101,128942,15560],{"class":111},[101,128944,128945,128948,128950,128953],{"class":103,"line":1166},[101,128946,128947],{"class":160},"  background-attachment",[101,128949,51426],{"class":111},[101,128951,128952],{"class":160},"scroll",[101,128954,1277],{"class":111},[101,128956,128957],{"class":103,"line":1181},[101,128958,1552],{"class":111},[101,128960,128961],{"class":103,"line":1187},[101,128962,128963],{"class":170},"\u002F* 背景固定 *\u002F\n",[101,128965,128966,128968],{"class":103,"line":1201},[101,128967,51600],{"class":51289},[101,128969,15560],{"class":111},[101,128971,128972,128974,128976,128978],{"class":103,"line":1207},[101,128973,128947],{"class":160},[101,128975,51426],{"class":111},[101,128977,86222],{"class":160},[101,128979,1277],{"class":111},[101,128981,128982],{"class":103,"line":1298},[101,128983,1552],{"class":111},[249,128985,128986,128995],{},[252,128987,128988],{},[255,128989,128990,128993],{},[258,128991,128992],{"align":23725},"参数",[258,128994,102676],{"align":23725},[296,128996,128997,129004],{},[255,128998,128999,129001],{},[301,129000,128952],{"align":23725},[301,129002,129003],{"align":23725},"背景图像是随对象内容滚动",[255,129005,129006,129008],{},[301,129007,86222],{"align":23725},[301,129009,129010],{"align":23725},"背景图像固定",[72,129012,129014],{"id":129013},"_826-背景样式合写","8.2.6 背景样式合写",[92,129016,129018],{"className":126532,"code":129017,"language":126534,"meta":20,"style":20},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[98,129019,129020,129025,129031,129059],{"__ignoreMap":20},[101,129021,129022],{"class":103,"line":104},[101,129023,129024],{"class":170},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[101,129026,129027,129029],{"class":103,"line":21},[101,129028,51600],{"class":51289},[101,129030,15560],{"class":111},[101,129032,129033,129035,129037,129039,129042,129044,129046,129048,129050,129053,129055,129057],{"class":103,"line":1166},[101,129034,70600],{"class":160},[101,129036,51426],{"class":111},[101,129038,60831],{"class":160},[101,129040,129041],{"class":160}," url",[101,129043,112],{"class":111},[101,129045,128630],{"class":5204},[101,129047,13702],{"class":111},[101,129049,61725],{"class":160},[101,129051,129052],{"class":160}," fixed",[101,129054,17132],{"class":160},[101,129056,128799],{"class":160},[101,129058,1277],{"class":111},[101,129060,129061],{"class":103,"line":1181},[101,129062,1552],{"class":111},[72,129064,129066],{"id":129065},"_827-背景色半透明","8.2.7 背景色半透明",[92,129068,129070],{"className":126532,"code":129069,"language":126534,"meta":20,"style":20},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[98,129071,129072,129078,129104],{"__ignoreMap":20},[101,129073,129074,129076],{"class":103,"line":104},[101,129075,51600],{"class":51289},[101,129077,15560],{"class":111},[101,129079,129080,129082,129084,129086,129088,129090,129092,129094,129096,129098,129100,129102],{"class":103,"line":21},[101,129081,70600],{"class":160},[101,129083,51426],{"class":111},[101,129085,55099],{"class":160},[101,129087,112],{"class":111},[101,129089,303],{"class":160},[101,129091,12423],{"class":111},[101,129093,303],{"class":160},[101,129095,12423],{"class":111},[101,129097,303],{"class":160},[101,129099,12423],{"class":111},[101,129101,100501],{"class":160},[101,129103,2706],{"class":111},[101,129105,129106],{"class":103,"line":1166},[101,129107,1552],{"class":111},[10,129109,99376],{},[10,129111,129112],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[10,129114,129115],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[10,129117,129118],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[10,129120,129121],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[72,129123,129125],{"id":129124},"_828-总结","8.2.8 总结",[249,129127,129128,129139],{},[252,129129,129130],{},[255,129131,129132,129135,129137],{},[258,129133,129134],{"align":23725},"属性",[258,129136,102676],{"align":23725},[258,129138,264],{"align":23725},[296,129140,129141,129152,129163,129174,129185,129196,129207],{},[255,129142,129143,129146,129149],{},[301,129144,129145],{"align":23725},"background-color",[301,129147,129148],{"align":23725},"背景颜色",[301,129150,129151],{"align":23725},"预定义的颜色值\u002F十六进制\u002FRGB代码",[255,129153,129154,129157,129160],{},[301,129155,129156],{"align":23725},"background-image",[301,129158,129159],{"align":23725},"背景图片",[301,129161,129162],{"align":23725},"url(图片路径)",[255,129164,129165,129168,129171],{},[301,129166,129167],{"align":23725},"background-repeat",[301,129169,129170],{"align":23725},"是否平铺",[301,129172,129173],{"align":23725},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[255,129175,129176,129179,129182],{},[301,129177,129178],{"align":23725},"background-position",[301,129180,129181],{"align":23725},"背景位置",[301,129183,129184],{"align":23725},"length\u002Fposition 分别是x和y坐标",[255,129186,129187,129190,129193],{},[301,129188,129189],{"align":23725},"background-attachment",[301,129191,129192],{"align":23725},"背景附着",[301,129194,129195],{"align":23725},"scroll(背景滚动) \u002Ffixed (背景固定)",[255,129197,129198,129201,129204],{},[301,129199,129200],{"align":23725},"背景简写",[301,129202,129203],{"align":23725},"书写更简单",[301,129205,129206],{"align":23725},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[255,129208,129209,129212,129215],{},[301,129210,129211],{"align":23725},"背景半透明",[301,129213,129214],{"align":23725},"背景颜色半透明",[301,129216,129217],{"align":23725},"background: rgba(0,0,0.3); 后面必须是4个值",[10,129219,129220],{},"颜色渐变：",[1449,129222],{"style":126388,"src":129223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1449,129225],{"style":126388,"src":129226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[72,129228,129230],{"id":129229},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[92,129232,129234],{"className":127279,"code":129233,"language":127281,"meta":20,"style":20},"\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",[98,129235,129236,129251,129270,129289,129308,129327,129346],{"__ignoreMap":20},[101,129237,129238,129240,129242,129244,129246,129249],{"class":103,"line":104},[101,129239,1021],{"class":111},[101,129241,51600],{"class":51289},[101,129243,53475],{"class":1950},[101,129245,157],{"class":111},[101,129247,129248],{"class":216},"\"nav\"",[101,129250,51296],{"class":111},[101,129252,129253,129255,129257,129259,129261,129263,129266,129268],{"class":103,"line":21},[101,129254,52133],{"class":111},[101,129256,14],{"class":51289},[101,129258,61046],{"class":1950},[101,129260,157],{"class":111},[101,129262,61051],{"class":216},[101,129264,129265],{"class":111},">五彩导航1\u003C\u002F",[101,129267,14],{"class":51289},[101,129269,51296],{"class":111},[101,129271,129272,129274,129276,129278,129280,129282,129285,129287],{"class":103,"line":1166},[101,129273,52133],{"class":111},[101,129275,14],{"class":51289},[101,129277,61046],{"class":1950},[101,129279,157],{"class":111},[101,129281,61051],{"class":216},[101,129283,129284],{"class":111},">五彩导航2\u003C\u002F",[101,129286,14],{"class":51289},[101,129288,51296],{"class":111},[101,129290,129291,129293,129295,129297,129299,129301,129304,129306],{"class":103,"line":1181},[101,129292,52133],{"class":111},[101,129294,14],{"class":51289},[101,129296,61046],{"class":1950},[101,129298,157],{"class":111},[101,129300,61051],{"class":216},[101,129302,129303],{"class":111},">五彩导航3\u003C\u002F",[101,129305,14],{"class":51289},[101,129307,51296],{"class":111},[101,129309,129310,129312,129314,129316,129318,129320,129323,129325],{"class":103,"line":1187},[101,129311,52133],{"class":111},[101,129313,14],{"class":51289},[101,129315,61046],{"class":1950},[101,129317,157],{"class":111},[101,129319,61051],{"class":216},[101,129321,129322],{"class":111},">五彩导航4\u003C\u002F",[101,129324,14],{"class":51289},[101,129326,51296],{"class":111},[101,129328,129329,129331,129333,129335,129337,129339,129342,129344],{"class":103,"line":1201},[101,129330,52133],{"class":111},[101,129332,14],{"class":51289},[101,129334,61046],{"class":1950},[101,129336,157],{"class":111},[101,129338,61051],{"class":216},[101,129340,129341],{"class":111},">五彩导航5\u003C\u002F",[101,129343,14],{"class":51289},[101,129345,51296],{"class":111},[101,129347,129348,129350,129352],{"class":103,"line":1207},[101,129349,51774],{"class":111},[101,129351,51600],{"class":51289},[101,129353,51296],{"class":111},[92,129355,129357],{"className":126532,"code":129356,"language":126534,"meta":20,"style":20},".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",[98,129358,129359,129368,129378,129390,129402,129412,129424,129434,129438,129463,129486,129509,129532],{"__ignoreMap":20},[101,129360,129361,129364,129366],{"class":103,"line":104},[101,129362,129363],{"class":1950},".nav",[101,129365,1385],{"class":51289},[101,129367,15560],{"class":111},[101,129369,129370,129372,129374,129376],{"class":103,"line":21},[101,129371,128148],{"class":160},[101,129373,51426],{"class":111},[101,129375,72372],{"class":160},[101,129377,1277],{"class":111},[101,129379,129380,129382,129384,129386,129388],{"class":103,"line":1166},[101,129381,70557],{"class":160},[101,129383,51426],{"class":111},[101,129385,928],{"class":160},[101,129387,51481],{"class":107},[101,129389,1277],{"class":111},[101,129391,129392,129394,129396,129398,129400],{"class":103,"line":1181},[101,129393,70777],{"class":160},[101,129395,51426],{"class":111},[101,129397,967],{"class":160},[101,129399,51481],{"class":107},[101,129401,1277],{"class":111},[101,129403,129404,129406,129408,129410],{"class":103,"line":1187},[101,129405,70515],{"class":160},[101,129407,51426],{"class":111},[101,129409,51581],{"class":160},[101,129411,1277],{"class":111},[101,129413,129414,129416,129418,129420,129422],{"class":103,"line":1201},[101,129415,127216],{"class":160},[101,129417,51426],{"class":111},[101,129419,967],{"class":160},[101,129421,51481],{"class":107},[101,129423,1277],{"class":111},[101,129425,129426,129428,129430,129432],{"class":103,"line":1207},[101,129427,70894],{"class":160},[101,129429,51426],{"class":111},[101,129431,60831],{"class":160},[101,129433,1277],{"class":111},[101,129435,129436],{"class":103,"line":1298},[101,129437,1552],{"class":111},[101,129439,129440,129442,129444,129447,129449,129451,129454,129456,129458,129460],{"class":103,"line":1304},[101,129441,129363],{"class":1950},[101,129443,1385],{"class":51289},[101,129445,129446],{"class":1950},":nth-child",[101,129448,112],{"class":111},[101,129450,329],{"class":160},[101,129452,129453],{"class":111},") { ",[101,129455,129145],{"class":160},[101,129457,51426],{"class":111},[101,129459,128563],{"class":160},[101,129461,129462],{"class":111},"; }\n",[101,129464,129465,129467,129469,129471,129473,129475,129477,129479,129481,129484],{"class":103,"line":1316},[101,129466,129363],{"class":1950},[101,129468,1385],{"class":51289},[101,129470,129446],{"class":1950},[101,129472,112],{"class":111},[101,129474,189],{"class":160},[101,129476,129453],{"class":111},[101,129478,129145],{"class":160},[101,129480,51426],{"class":111},[101,129482,129483],{"class":160},"#ff0000",[101,129485,129462],{"class":111},[101,129487,129488,129490,129492,129494,129496,129498,129500,129502,129504,129507],{"class":103,"line":1599},[101,129489,129363],{"class":1950},[101,129491,1385],{"class":51289},[101,129493,129446],{"class":1950},[101,129495,112],{"class":111},[101,129497,183],{"class":160},[101,129499,129453],{"class":111},[101,129501,129145],{"class":160},[101,129503,51426],{"class":111},[101,129505,129506],{"class":160},"#00a4ff",[101,129508,129462],{"class":111},[101,129510,129511,129513,129515,129517,129519,129521,129523,129525,129527,129530],{"class":103,"line":1604},[101,129512,129363],{"class":1950},[101,129514,1385],{"class":51289},[101,129516,129446],{"class":1950},[101,129518,112],{"class":111},[101,129520,404],{"class":160},[101,129522,129453],{"class":111},[101,129524,129145],{"class":160},[101,129526,51426],{"class":111},[101,129528,129529],{"class":160},"#ff00ff",[101,129531,129462],{"class":111},[101,129533,129534,129536,129538,129540,129542,129544,129546,129548,129550,129553],{"class":103,"line":1610},[101,129535,129363],{"class":1950},[101,129537,1385],{"class":51289},[101,129539,129446],{"class":1950},[101,129541,112],{"class":111},[101,129543,430],{"class":160},[101,129545,129453],{"class":111},[101,129547,129145],{"class":160},[101,129549,51426],{"class":111},[101,129551,129552],{"class":160},"#00ff00",[101,129554,129462],{"class":111},[43,129556,129558],{"id":129557},"_83-css三大特性","8.3 css三大特性",[72,129560,129562],{"id":129561},"_831-层叠性","8.3.1 层叠性",[10,129564,129565],{},"为了解决样式冲突问题",[10,129567,129568],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[10,129570,129571],{},"   ②样式不冲突，不会层叠",[72,129573,129575],{"id":129574},"_832-继承性","8.3.2 继承性",[10,129577,129578],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[10,129580,129581],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[92,129583,129585],{"className":126532,"code":129584,"language":126534,"meta":20,"style":20},"p {\n  color: #333;\n}\n",[98,129586,129587,129593,129603],{"__ignoreMap":20},[101,129588,129589,129591],{"class":103,"line":104},[101,129590,10],{"class":51289},[101,129592,15560],{"class":111},[101,129594,129595,129597,129599,129601],{"class":103,"line":21},[101,129596,70894],{"class":160},[101,129598,51426],{"class":111},[101,129600,62358],{"class":160},[101,129602,1277],{"class":111},[101,129604,129605],{"class":103,"line":1166},[101,129606,1552],{"class":111},[1449,129608],{"style":126388,"src":129609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[10,129611,129612],{},"解释：①行高可以跟单位也可以不跟单位",[10,129614,129615],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[10,129617,129618],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[10,129620,129621],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[72,129623,129625],{"id":129624},"_833-优先级","8.3.3 优先级",[55,129627,129628,129631],{},[58,129629,129630],{},"选择器相同，则执行层叠性",[58,129632,129633],{},"选择器不同，则根据选择器权重执行",[249,129635,129636,129646],{},[252,129637,129638],{},[255,129639,129640,129643],{},[258,129641,129642],{"align":23725},"选择器",[258,129644,129645],{"align":23725},"选择器权重",[296,129647,129648,129656,129664,129672,129680,129688],{},[255,129649,129650,129653],{},[301,129651,129652],{"align":23725},"继承 或者*",[301,129654,129655],{"align":23725},"0，0，0，0",[255,129657,129658,129661],{},[301,129659,129660],{"align":23725},"标签选择器",[301,129662,129663],{"align":23725},"0，0，0，1",[255,129665,129666,129669],{},[301,129667,129668],{"align":23725},"类选择器，伪类选择器",[301,129670,129671],{"align":23725},"0，0，1，0",[255,129673,129674,129677],{},[301,129675,129676],{"align":23725},"ID选择器",[301,129678,129679],{"align":23725},"0，1，0，0",[255,129681,129682,129685],{},[301,129683,129684],{"align":23725},"行内样式",[301,129686,129687],{"align":23725},"1，0，0，0",[255,129689,129690,129693],{},[301,129691,129692],{"align":23725},"！important",[301,129694,129695],{"align":23725},"无穷大",[10,129697,129698],{},"! important用法：",[92,129700,129702],{"className":126532,"code":129701,"language":126534,"meta":20,"style":20},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[98,129703,129704,129709,129715,129728,129732,129737,129743,129753],{"__ignoreMap":20},[101,129705,129706],{"class":103,"line":104},[101,129707,129708],{"class":170},"\u002F* !important 拥有最高优先级 *\u002F\n",[101,129710,129711,129713],{"class":103,"line":21},[101,129712,51600],{"class":51289},[101,129714,15560],{"class":111},[101,129716,129717,129719,129721,129723,129726],{"class":103,"line":1166},[101,129718,70894],{"class":160},[101,129720,51426],{"class":111},[101,129722,51634],{"class":160},[101,129724,129725],{"class":107}," !important",[101,129727,1277],{"class":111},[101,129729,129730],{"class":103,"line":1181},[101,129731,1552],{"class":111},[101,129733,129734],{"class":103,"line":1187},[101,129735,129736],{"class":170},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[101,129738,129739,129741],{"class":103,"line":1201},[101,129740,51600],{"class":51289},[101,129742,15560],{"class":111},[101,129744,129745,129747,129749,129751],{"class":103,"line":1207},[101,129746,70894],{"class":160},[101,129748,51426],{"class":111},[101,129750,57410],{"class":160},[101,129752,1277],{"class":111},[101,129754,129755],{"class":103,"line":1298},[101,129756,1552],{"class":111},[10,129758,129759],{},"优先级注意点：",[10,129761,129762],{},"①权重是有4组数字组成,但是不会有进位",[10,129764,129765],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[10,129767,129768],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[10,129770,129771],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[10,129773,129774],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[10,129776,129777],{},"⑥复合选择器",[249,129779,129780,129790],{},[252,129781,129782],{},[255,129783,129784,129787],{},[258,129785,129786],{"align":23725},"div ul li",[258,129788,129789],{"align":23725},"0,0,0,3",[296,129791,129792,129800,129808],{},[255,129793,129794,129797],{},[301,129795,129796],{"align":23725},".nav ul li",[301,129798,129799],{"align":23725},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[255,129801,129802,129805],{},[301,129803,129804],{"align":23725},"a:hover",[301,129806,129807],{"align":23725},"0,0,1,1",[255,129809,129810,129813],{},[301,129811,129812],{"align":23725},".nav a",[301,129814,129807],{"align":23725},[5114,129816,129817],{},"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":20,"searchDepth":21,"depth":21,"links":129819},[129820,129828,129839],{"id":127928,"depth":21,"text":127929,"children":129821},[129822,129823,129824,129825,129826,129827],{"id":127941,"depth":1166,"text":127942},{"id":128013,"depth":1166,"text":128014},{"id":128085,"depth":1166,"text":128086},{"id":128116,"depth":1166,"text":128117},{"id":128123,"depth":1166,"text":128124},{"id":128276,"depth":1166,"text":128277},{"id":128584,"depth":21,"text":128585,"children":129829},[129830,129831,129832,129833,129834,129835,129836,129837,129838],{"id":128591,"depth":1166,"text":128592},{"id":128601,"depth":1166,"text":128602},{"id":128697,"depth":1166,"text":128698},{"id":128770,"depth":1166,"text":128771},{"id":128925,"depth":1166,"text":128926},{"id":129013,"depth":1166,"text":129014},{"id":129065,"depth":1166,"text":129066},{"id":129124,"depth":1166,"text":129125},{"id":129229,"depth":1166,"text":129230},{"id":129557,"depth":21,"text":129558,"children":129840},[129841,129842,129843],{"id":129561,"depth":1166,"text":129562},{"id":129574,"depth":1166,"text":129575},{"id":129624,"depth":1166,"text":129625},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127920,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129850,"title":129851,"body":129852,"description":23365,"extension":24,"meta":131442,"navigation":27,"path":131443,"seo":131444,"stem":131445,"__hash__":131446},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129853,"toc":131421},[129854,129857,129861,129864,129867,129870,129873,129876,129879,129882,129886,129894,129931,129967,129970,129984,129989,130023,130026,130119,130124,130127,130157,130160,130165,130173,130177,130184,130230,130274,130279,130282,130285,130288,130291,130294,130297,130299,130302,130306,130311,130355,130360,130363,130366,130403,130408,130411,130414,130417,130420,130452,130455,130458,130461,130493,130496,130499,130502,130506,130509,130541,130544,130548,130568,130571,130579,130582,130586,130591,130594,130626,130631,130634,130672,130676,130681,130684,130687,130718,130721,130738,130743,130795,130855,130860,130914,130952,130956,130960,130963,130967,130975,130978,130980,130991,130996,131044,131078,131081,131084,131087,131090,131134,131137,131140,131143,131146,131149,131152,131196,131199,131202,131205,131208,131211,131214,131220,131223,131267,131270,131273,131276,131279,131282,131326,131329,131331,131334,131338,131342,131380,131384,131387,131390,131394,131402,131406,131409,131412,131415,131418],[39,129855,129851],{"id":129856},"_9-css盒模型浮动与切图",[43,129858,129860],{"id":129859},"_91-盒子模型","9.1 盒子模型",[10,129862,129863],{},"利用盒子来设计网页",[10,129865,129866],{},"盒子包含：边框、外边距、内边距、实际内容",[10,129868,129869],{},"网页布局设置：",[10,129871,129872],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[10,129874,129875],{},"②利用css设置好盒子样式，然后摆放到相应位置",[10,129877,129878],{},"③往盒子里装内容",[1449,129880],{"style":126388,"src":129881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[72,129883,129885],{"id":129884},"_911-边框border","9.1.1 边框（border）",[55,129887,129888,129891],{},[58,129889,129890],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[58,129892,129893],{},"语法",[92,129895,129897],{"className":126532,"code":129896,"language":126534,"meta":20,"style":20},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[98,129898,129899,129904,129910,129927],{"__ignoreMap":20},[101,129900,129901],{"class":103,"line":104},[101,129902,129903],{"class":170},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[101,129905,129906,129908],{"class":103,"line":21},[101,129907,51600],{"class":51289},[101,129909,15560],{"class":111},[101,129911,129912,129914,129916,129918,129920,129922,129925],{"class":103,"line":1166},[101,129913,70885],{"class":160},[101,129915,51426],{"class":111},[101,129917,329],{"class":160},[101,129919,51481],{"class":107},[101,129921,51510],{"class":160},[101,129923,129924],{"class":160}," #ccc",[101,129926,1277],{"class":111},[101,129928,129929],{"class":103,"line":1181},[101,129930,1552],{"class":111},[249,129932,129933,129941],{},[252,129934,129935],{},[255,129936,129937,129939],{},[258,129938,129134],{"align":23725},[258,129940,102676],{"align":23725},[296,129942,129943,129951,129959],{},[255,129944,129945,129948],{},[301,129946,129947],{"align":23725},"border-width",[301,129949,129950],{"align":23725},"定义边框粗细，单位是px",[255,129952,129953,129956],{},[301,129954,129955],{"align":23725},"border-style",[301,129957,129958],{"align":23725},"边框的样式",[255,129960,129961,129964],{},[301,129962,129963],{"align":23725},"border-color",[301,129965,129966],{"align":23725},"边框的颜色",[10,129968,129969],{},"边框样式 border-style 可以设置如下值：",[1118,129971,129972,129975,129978,129981],{},[58,129973,129974],{},"none：没有边框即忽略所有边框的宽度（默认值）",[58,129976,129977],{},"solid：边框为单实线(最为常用的)",[58,129979,129980],{},"dashed：边框为虚线",[58,129982,129983],{},"dotted：边框为点线",[55,129985,129986],{"start":1166},[58,129987,129988],{},"边框的合写分写",[92,129990,129991],{"className":126532,"code":129896,"language":126534,"meta":20,"style":20},[98,129992,129993,129997,130003,130019],{"__ignoreMap":20},[101,129994,129995],{"class":103,"line":104},[101,129996,129903],{"class":170},[101,129998,129999,130001],{"class":103,"line":21},[101,130000,51600],{"class":51289},[101,130002,15560],{"class":111},[101,130004,130005,130007,130009,130011,130013,130015,130017],{"class":103,"line":1166},[101,130006,70885],{"class":160},[101,130008,51426],{"class":111},[101,130010,329],{"class":160},[101,130012,51481],{"class":107},[101,130014,51510],{"class":160},[101,130016,129924],{"class":160},[101,130018,1277],{"class":111},[101,130020,130021],{"class":103,"line":1181},[101,130022,1552],{"class":111},[10,130024,130025],{},"边框分开写法：",[92,130027,130029],{"className":126532,"code":130028,"language":126534,"meta":20,"style":20},"\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",[98,130030,130031,130036,130042,130060,130078,130097,130115],{"__ignoreMap":20},[101,130032,130033],{"class":103,"line":104},[101,130034,130035],{"class":170},"\u002F* 边框分开写法 *\u002F\n",[101,130037,130038,130040],{"class":103,"line":21},[101,130039,51600],{"class":51289},[101,130041,15560],{"class":111},[101,130043,130044,130047,130049,130051,130053,130055,130058],{"class":103,"line":1166},[101,130045,130046],{"class":160},"  border-top",[101,130048,51426],{"class":111},[101,130050,329],{"class":160},[101,130052,51481],{"class":107},[101,130054,51510],{"class":160},[101,130056,130057],{"class":160}," #000",[101,130059,1277],{"class":111},[101,130061,130062,130065,130067,130069,130071,130073,130076],{"class":103,"line":1181},[101,130063,130064],{"class":160},"  border-right",[101,130066,51426],{"class":111},[101,130068,189],{"class":160},[101,130070,51481],{"class":107},[101,130072,62230],{"class":160},[101,130074,130075],{"class":160}," #333",[101,130077,1277],{"class":111},[101,130079,130080,130083,130085,130087,130089,130092,130095],{"class":103,"line":1187},[101,130081,130082],{"class":160},"  border-bottom",[101,130084,51426],{"class":111},[101,130086,183],{"class":160},[101,130088,51481],{"class":107},[101,130090,130091],{"class":160}," dotted",[101,130093,130094],{"class":160}," #666",[101,130096,1277],{"class":111},[101,130098,130099,130102,130104,130106,130108,130110,130113],{"class":103,"line":1201},[101,130100,130101],{"class":160},"  border-left",[101,130103,51426],{"class":111},[101,130105,329],{"class":160},[101,130107,51481],{"class":107},[101,130109,51510],{"class":160},[101,130111,130112],{"class":160}," #999",[101,130114,1277],{"class":111},[101,130116,130117],{"class":103,"line":1207},[101,130118,1552],{"class":111},[55,130120,130121],{"start":1181},[58,130122,130123],{},"表格的细线边框",[10,130125,130126],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[92,130128,130130],{"className":126532,"code":130129,"language":126534,"meta":20,"style":20},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[98,130131,130132,130137,130143,130153],{"__ignoreMap":20},[101,130133,130134],{"class":103,"line":104},[101,130135,130136],{"class":170},"\u002F* 表格细线边框合并 *\u002F\n",[101,130138,130139,130141],{"class":103,"line":21},[101,130140,249],{"class":51289},[101,130142,15560],{"class":111},[101,130144,130145,130147,130149,130151],{"class":103,"line":1166},[101,130146,70567],{"class":160},[101,130148,51426],{"class":111},[101,130150,65024],{"class":160},[101,130152,1277],{"class":111},[101,130154,130155],{"class":103,"line":1181},[101,130156,1552],{"class":111},[10,130158,130159],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[55,130161,130162],{"start":1187},[58,130163,130164],{},"解决边框额外增加盒子的实际大小的方法：",[1118,130166,130167,130170],{},[58,130168,130169],{},"测量盒子大小的时候,不量边框",[58,130171,130172],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[72,130174,130176],{"id":130175},"_912-内边距","9.1.2 内边距",[55,130178,130179,130182],{},[58,130180,130181],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[58,130183,129893],{},[249,130185,130186,130196],{},[252,130187,130188],{},[255,130189,130190,130193],{},[258,130191,130192],{"align":23725},"值的个数",[258,130194,130195],{"align":23725},"表达意思",[296,130197,130198,130206,130214,130222],{},[255,130199,130200,130203],{},[301,130201,130202],{"align":23725},"padding: 5px;",[301,130204,130205],{"align":23725},"1个值，代表上下左右都有5个元素",[255,130207,130208,130211],{},[301,130209,130210],{"align":23725},"padding: 5px 10px;",[301,130212,130213],{"align":23725},"2个值，代表上下内边距为5像素，左右内边距为10像素",[255,130215,130216,130219],{},[301,130217,130218],{"align":23725},"padding: 5px 10px 20px;",[301,130220,130221],{"align":23725},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[255,130223,130224,130227],{},[301,130225,130226],{"align":23725},"padding: 5px 10px 20px 30px;",[301,130228,130229],{"align":23725},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[249,130231,130232,130240],{},[252,130233,130234],{},[255,130235,130236,130238],{},[258,130237,129134],{"align":23725},[258,130239,102676],{"align":23725},[296,130241,130242,130250,130258,130266],{},[255,130243,130244,130247],{},[301,130245,130246],{"align":23725},"padding-left",[301,130248,130249],{"align":23725},"左内边距",[255,130251,130252,130255],{},[301,130253,130254],{"align":23725},"padding-right",[301,130256,130257],{"align":23725},"右内边距",[255,130259,130260,130263],{},[301,130261,130262],{"align":23725},"padding-top",[301,130264,130265],{"align":23725},"上内边距",[255,130267,130268,130271],{},[301,130269,130270],{"align":23725},"padding-bottom",[301,130272,130273],{"align":23725},"下内边距",[55,130275,130276],{"start":1166},[58,130277,130278],{},"内边距会影响盒子的实际大小",[10,130280,130281],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[10,130283,130284],{},"①内容和边框有了距离，添加了内边距",[10,130286,130287],{},"②padding影响了盒子实际大小",[10,130289,130290],{},"内边距对盒子大小的影响：",[10,130292,130293],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[10,130295,130296],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[10,130298,95200],{},[10,130300,130301],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[72,130303,130305],{"id":130304},"_913-外边距","9.1.3 外边距",[55,130307,130308],{},[58,130309,130310],{},"控制盒子与盒子之间的距离",[249,130312,130313,130321],{},[252,130314,130315],{},[255,130316,130317,130319],{},[258,130318,129134],{"align":23725},[258,130320,102676],{"align":23725},[296,130322,130323,130331,130339,130347],{},[255,130324,130325,130328],{},[301,130326,130327],{"align":23725},"margin-left",[301,130329,130330],{"align":23725},"左外边距",[255,130332,130333,130336],{},[301,130334,130335],{"align":23725},"margin-right",[301,130337,130338],{"align":23725},"右外边距",[255,130340,130341,130344],{},[301,130342,130343],{"align":23725},"margin-top",[301,130345,130346],{"align":23725},"上外边距",[255,130348,130349,130352],{},[301,130350,130351],{"align":23725},"margin-bottom",[301,130353,130354],{"align":23725},"下外边距",[55,130356,130357],{"start":21},[58,130358,130359],{},"外边距可以让块级盒子水平居中的两个条件：",[10,130361,130362],{},"①盒子必须指定了宽度（width）",[10,130364,130365],{},"②盒子左右的外边距都设置为 auto",[92,130367,130369],{"className":126532,"code":130368,"language":126534,"meta":20,"style":20},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[98,130370,130371,130376,130383,130399],{"__ignoreMap":20},[101,130372,130373],{"class":103,"line":104},[101,130374,130375],{"class":170},"\u002F* margin 复合写法（同上） *\u002F\n",[101,130377,130378,130381],{"class":103,"line":21},[101,130379,130380],{"class":1950},".box",[101,130382,15560],{"class":111},[101,130384,130385,130387,130389,130391,130393,130396],{"class":103,"line":1166},[101,130386,70459],{"class":160},[101,130388,51426],{"class":111},[101,130390,303],{"class":160},[101,130392,51545],{"class":160},[101,130394,130395],{"class":111},";  ",[101,130397,130398],{"class":170},"\u002F* 块级盒子水平居中 *\u002F\n",[101,130400,130401],{"class":103,"line":1181},[101,130402,1552],{"class":111},[55,130404,130405],{"start":1166},[58,130406,130407],{},"外边距塌陷问题",[10,130409,130410],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1449,130412],{"style":126388,"src":130413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[10,130415,130416],{},"解决方案：",[10,130418,130419],{},"①可以为父亲元素定义上边距",[92,130421,130422],{"className":126532,"code":130368,"language":126534,"meta":20,"style":20},[98,130423,130424,130428,130434,130448],{"__ignoreMap":20},[101,130425,130426],{"class":103,"line":104},[101,130427,130375],{"class":170},[101,130429,130430,130432],{"class":103,"line":21},[101,130431,130380],{"class":1950},[101,130433,15560],{"class":111},[101,130435,130436,130438,130440,130442,130444,130446],{"class":103,"line":1166},[101,130437,70459],{"class":160},[101,130439,51426],{"class":111},[101,130441,303],{"class":160},[101,130443,51545],{"class":160},[101,130445,130395],{"class":111},[101,130447,130398],{"class":170},[101,130449,130450],{"class":103,"line":1181},[101,130451,1552],{"class":111},[10,130453,130454],{},"②可以为父亲元素定义上内边距",[10,130456,130457],{},"③可以为父亲元素添加overflow:hidden",[1449,130459],{"style":126388,"src":130460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[92,130462,130463],{"className":126532,"code":130368,"language":126534,"meta":20,"style":20},[98,130464,130465,130469,130475,130489],{"__ignoreMap":20},[101,130466,130467],{"class":103,"line":104},[101,130468,130375],{"class":170},[101,130470,130471,130473],{"class":103,"line":21},[101,130472,130380],{"class":1950},[101,130474,15560],{"class":111},[101,130476,130477,130479,130481,130483,130485,130487],{"class":103,"line":1166},[101,130478,70459],{"class":160},[101,130480,51426],{"class":111},[101,130482,303],{"class":160},[101,130484,51545],{"class":160},[101,130486,130395],{"class":111},[101,130488,130398],{"class":170},[101,130490,130491],{"class":103,"line":1181},[101,130492,1552],{"class":111},[1449,130494],{"style":126388,"src":130495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[10,130497,130498],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[10,130500,130501],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[72,130503,130505],{"id":130504},"_914-清除内外边距","9.1.4 清除内外边距",[10,130507,130508],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[92,130510,130511],{"className":126532,"code":130368,"language":126534,"meta":20,"style":20},[98,130512,130513,130517,130523,130537],{"__ignoreMap":20},[101,130514,130515],{"class":103,"line":104},[101,130516,130375],{"class":170},[101,130518,130519,130521],{"class":103,"line":21},[101,130520,130380],{"class":1950},[101,130522,15560],{"class":111},[101,130524,130525,130527,130529,130531,130533,130535],{"class":103,"line":1166},[101,130526,70459],{"class":160},[101,130528,51426],{"class":111},[101,130530,303],{"class":160},[101,130532,51545],{"class":160},[101,130534,130395],{"class":111},[101,130536,130398],{"class":170},[101,130538,130539],{"class":103,"line":1181},[101,130540,1552],{"class":111},[10,130542,130543],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[72,130545,130547],{"id":130546},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1118,130549,130550,130553,130556,130559,130562,130565],{},[58,130551,130552],{},"文件→打开 ：可以打开我们要测量的图片",[58,130554,130555],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[58,130557,130558],{},"右击标尺，把里面的单位改为像素",[58,130560,130561],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[58,130563,130564],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[58,130566,130567],{},"用选区拖动 可以测量大小",[1449,130569],{"style":126388,"src":130570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1118,130572,130573,130576],{},[58,130574,130575],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[58,130577,130578],{},"吸管取色工具",[1449,130580],{"style":126388,"src":130581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[72,130583,130585],{"id":130584},"_916-案例","9.1.6 案例",[55,130587,130588],{},[58,130589,130590],{},"小米商品",[1449,130592],{"style":126388,"src":130593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[92,130595,130596],{"className":126532,"code":130368,"language":126534,"meta":20,"style":20},[98,130597,130598,130602,130608,130622],{"__ignoreMap":20},[101,130599,130600],{"class":103,"line":104},[101,130601,130375],{"class":170},[101,130603,130604,130606],{"class":103,"line":21},[101,130605,130380],{"class":1950},[101,130607,15560],{"class":111},[101,130609,130610,130612,130614,130616,130618,130620],{"class":103,"line":1166},[101,130611,70459],{"class":160},[101,130613,51426],{"class":111},[101,130615,303],{"class":160},[101,130617,51545],{"class":160},[101,130619,130395],{"class":111},[101,130621,130398],{"class":170},[101,130623,130624],{"class":103,"line":1181},[101,130625,1552],{"class":111},[55,130627,130628],{"start":21},[58,130629,130630],{},"快报模块",[1449,130632],{"style":126388,"src":130633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[92,130635,130637],{"className":127279,"code":130636,"language":127281,"meta":20,"style":20},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[98,130638,130639,130644,130659,130664],{"__ignoreMap":20},[101,130640,130641],{"class":103,"line":104},[101,130642,130643],{"class":170},"\u003C!-- HTML 代码示例 -->\n",[101,130645,130646,130648,130650,130652,130654,130657],{"class":103,"line":21},[101,130647,1021],{"class":111},[101,130649,51600],{"class":51289},[101,130651,53475],{"class":1950},[101,130653,157],{"class":111},[101,130655,130656],{"class":216},"\"example\"",[101,130658,51296],{"class":111},[101,130660,130661],{"class":103,"line":1166},[101,130662,130663],{"class":111},"  示例内容\n",[101,130665,130666,130668,130670],{"class":103,"line":1181},[101,130667,51774],{"class":111},[101,130669,51600],{"class":51289},[101,130671,51296],{"class":111},[72,130673,130675],{"id":130674},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[55,130677,130678],{},[58,130679,130680],{},"圆角边框",[10,130682,130683],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1449,130685],{"style":126388,"src":130686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[92,130688,130690],{"className":126532,"code":130689,"language":126534,"meta":20,"style":20},"div {\n  border: 1px solid #ccc;\n}\n",[98,130691,130692,130698,130714],{"__ignoreMap":20},[101,130693,130694,130696],{"class":103,"line":104},[101,130695,51600],{"class":51289},[101,130697,15560],{"class":111},[101,130699,130700,130702,130704,130706,130708,130710,130712],{"class":103,"line":21},[101,130701,70885],{"class":160},[101,130703,51426],{"class":111},[101,130705,329],{"class":160},[101,130707,51481],{"class":107},[101,130709,51510],{"class":160},[101,130711,129924],{"class":160},[101,130713,1277],{"class":111},[101,130715,130716],{"class":103,"line":1166},[101,130717,1552],{"class":111},[10,130719,130720],{},"解释:",[1118,130722,130723,130726,130729,130732,130735],{},[58,130724,130725],{},"参数值可以为数值或百分比的形式",[58,130727,130728],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[58,130730,130731],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[58,130733,130734],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[58,130736,130737],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[55,130739,130740],{"start":21},[58,130741,130742],{},"盒子阴影",[92,130744,130746],{"className":126532,"code":130745,"language":126534,"meta":20,"style":20},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[98,130747,130748,130754,130791],{"__ignoreMap":20},[101,130749,130750,130752],{"class":103,"line":104},[101,130751,51600],{"class":51289},[101,130753,15560],{"class":111},[101,130755,130756,130759,130761,130763,130765,130767,130769,130771,130773,130775,130777,130779,130781,130783,130785,130787,130789],{"class":103,"line":21},[101,130757,130758],{"class":160},"  box-shadow",[101,130760,51426],{"class":111},[101,130762,303],{"class":160},[101,130764,14743],{"class":160},[101,130766,51481],{"class":107},[101,130768,2025],{"class":160},[101,130770,51481],{"class":107},[101,130772,78756],{"class":160},[101,130774,112],{"class":111},[101,130776,303],{"class":160},[101,130778,12423],{"class":111},[101,130780,303],{"class":160},[101,130782,12423],{"class":111},[101,130784,303],{"class":160},[101,130786,12423],{"class":111},[101,130788,86199],{"class":160},[101,130790,2706],{"class":111},[101,130792,130793],{"class":103,"line":1166},[101,130794,1552],{"class":111},[249,130796,130797,130805],{},[252,130798,130799],{},[255,130800,130801,130803],{},[258,130802,264],{"align":23725},[258,130804,27478],{"align":23725},[296,130806,130807,130815,130823,130831,130839,130847],{},[255,130808,130809,130812],{},[301,130810,130811],{"align":23725},"h-shadow",[301,130813,130814],{"align":23725},"必需,水平阴影的位置,允许负值",[255,130816,130817,130820],{},[301,130818,130819],{"align":23725},"v-shadow",[301,130821,130822],{"align":23725},"必需,垂直阴影的位置,允许负值",[255,130824,130825,130828],{},[301,130826,130827],{"align":23725},"blur",[301,130829,130830],{"align":23725},"可选,模糊距离,就是影子的虚实",[255,130832,130833,130836],{},[301,130834,130835],{"align":23725},"spread",[301,130837,130838],{"align":23725},"可选,阴影尺寸",[255,130840,130841,130844],{},[301,130842,130843],{"align":23725},"color",[301,130845,130846],{"align":23725},"可选,阴影的颜色",[255,130848,130849,130852],{},[301,130850,130851],{"align":23725},"inset",[301,130853,130854],{"align":23725},"可选,将外部阴影(outset)改为内部阴影",[55,130856,130857],{"start":1166},[58,130858,130859],{},"文字阴影",[92,130861,130863],{"className":126532,"code":130862,"language":126534,"meta":20,"style":20},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[98,130864,130865,130871,130910],{"__ignoreMap":20},[101,130866,130867,130869],{"class":103,"line":104},[101,130868,10],{"class":51289},[101,130870,15560],{"class":111},[101,130872,130873,130876,130878,130880,130882,130884,130886,130888,130890,130892,130894,130896,130898,130900,130902,130904,130906,130908],{"class":103,"line":21},[101,130874,130875],{"class":160},"  text-shadow",[101,130877,51426],{"class":111},[101,130879,329],{"class":160},[101,130881,51481],{"class":107},[101,130883,25107],{"class":160},[101,130885,51481],{"class":107},[101,130887,14743],{"class":160},[101,130889,51481],{"class":107},[101,130891,78756],{"class":160},[101,130893,112],{"class":111},[101,130895,303],{"class":160},[101,130897,12423],{"class":111},[101,130899,303],{"class":160},[101,130901,12423],{"class":111},[101,130903,303],{"class":160},[101,130905,12423],{"class":111},[101,130907,100501],{"class":160},[101,130909,2706],{"class":111},[101,130911,130912],{"class":103,"line":1166},[101,130913,1552],{"class":111},[249,130915,130916,130924],{},[252,130917,130918],{},[255,130919,130920,130922],{},[258,130921,264],{"align":23725},[258,130923,27478],{"align":23725},[296,130925,130926,130932,130939,130946],{},[255,130927,130928,130930],{},[301,130929,130811],{"align":23725},[301,130931,130814],{"align":23725},[255,130933,130934,130936],{},[301,130935,130819],{"align":23725},[301,130937,130938],{"align":23725},"必需,垂直阴影位置,允许负值",[255,130940,130941,130943],{},[301,130942,130827],{"align":23725},[301,130944,130945],{"align":23725},"可选,模糊的距离",[255,130947,130948,130950],{},[301,130949,130843],{"align":23725},[301,130951,130846],{"align":23725},[43,130953,130955],{"id":130954},"_92-浮动","9.2 浮动",[72,130957,130959],{"id":130958},"_921-浮动介绍","9.2.1 浮动介绍",[10,130961,130962],{},"在16.2中详细介绍",[72,130964,130966],{"id":130965},"_922-清除浮动","9.2.2 清除浮动",[55,130968,130969,130972],{},[58,130970,130971],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[58,130973,130974],{},"清除浮动的本质",[10,130976,130977],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[10,130979,9013],{},[1118,130981,130982,130985,130988],{},[58,130983,130984],{},"如果父盒子本身有高度，则不需要清除浮动",[58,130986,130987],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[58,130989,130990],{},"父级有了高度，就不会影响下面的标准流了",[55,130992,130993],{"start":1166},[58,130994,130995],{},"清除浮动样式",[92,130997,130999],{"className":126532,"code":130998,"language":126534,"meta":20,"style":20},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[98,131000,131001,131008,131019,131023,131030,131040],{"__ignoreMap":20},[101,131002,131003,131006],{"class":103,"line":104},[101,131004,131005],{"class":1950},".left",[101,131007,15560],{"class":111},[101,131009,131010,131013,131015,131017],{"class":103,"line":21},[101,131011,131012],{"class":160},"  float",[101,131014,51426],{"class":111},[101,131016,23725],{"class":160},[101,131018,1277],{"class":111},[101,131020,131021],{"class":103,"line":1166},[101,131022,1552],{"class":111},[101,131024,131025,131028],{"class":103,"line":1181},[101,131026,131027],{"class":1950},".right",[101,131029,15560],{"class":111},[101,131031,131032,131034,131036,131038],{"class":103,"line":1187},[101,131033,131012],{"class":160},[101,131035,51426],{"class":111},[101,131037,72511],{"class":160},[101,131039,1277],{"class":111},[101,131041,131042],{"class":103,"line":1201},[101,131043,1552],{"class":111},[249,131045,131046,131054],{},[252,131047,131048],{},[255,131049,131050,131052],{},[258,131051,126996],{"align":23725},[258,131053,27478],{"align":23725},[296,131055,131056,131063,131070],{},[255,131057,131058,131060],{},[301,131059,23725],{"align":23725},[301,131061,131062],{"align":23725},"不允许左侧有浮动元素（清除左侧浮动的影响）",[255,131064,131065,131067],{},[301,131066,72511],{"align":23725},[301,131068,131069],{"align":23725},"不允许右侧有浮动元素（清除右侧浮动的影响）",[255,131071,131072,131075],{},[301,131073,131074],{"align":23725},"both",[301,131076,131077],{"align":23725},"同时清除左右侧浮动的影响",[10,131079,131080],{},"法一",[10,131082,131083],{},"额外标签法也称为隔墙法",[10,131085,131086],{},"使用方式：",[10,131088,131089],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[92,131091,131092],{"className":126532,"code":130998,"language":126534,"meta":20,"style":20},[98,131093,131094,131100,131110,131114,131120,131130],{"__ignoreMap":20},[101,131095,131096,131098],{"class":103,"line":104},[101,131097,131005],{"class":1950},[101,131099,15560],{"class":111},[101,131101,131102,131104,131106,131108],{"class":103,"line":21},[101,131103,131012],{"class":160},[101,131105,51426],{"class":111},[101,131107,23725],{"class":160},[101,131109,1277],{"class":111},[101,131111,131112],{"class":103,"line":1166},[101,131113,1552],{"class":111},[101,131115,131116,131118],{"class":103,"line":1181},[101,131117,131027],{"class":1950},[101,131119,15560],{"class":111},[101,131121,131122,131124,131126,131128],{"class":103,"line":1187},[101,131123,131012],{"class":160},[101,131125,51426],{"class":111},[101,131127,72511],{"class":160},[101,131129,1277],{"class":111},[101,131131,131132],{"class":103,"line":1201},[101,131133,1552],{"class":111},[10,131135,131136],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[10,131138,131139],{},"优点： 通俗易懂，书写方便",[10,131141,131142],{},"缺点： 添加许多无意义的标签，结构化较差",[10,131144,131145],{},"注意： 要求这个新的空标签必须是块级元素。",[10,131147,131148],{},"法二",[10,131150,131151],{},"父级添加overflow属性",[92,131153,131154],{"className":126532,"code":130998,"language":126534,"meta":20,"style":20},[98,131155,131156,131162,131172,131176,131182,131192],{"__ignoreMap":20},[101,131157,131158,131160],{"class":103,"line":104},[101,131159,131005],{"class":1950},[101,131161,15560],{"class":111},[101,131163,131164,131166,131168,131170],{"class":103,"line":21},[101,131165,131012],{"class":160},[101,131167,51426],{"class":111},[101,131169,23725],{"class":160},[101,131171,1277],{"class":111},[101,131173,131174],{"class":103,"line":1166},[101,131175,1552],{"class":111},[101,131177,131178,131180],{"class":103,"line":1181},[101,131179,131027],{"class":1950},[101,131181,15560],{"class":111},[101,131183,131184,131186,131188,131190],{"class":103,"line":1187},[101,131185,131012],{"class":160},[101,131187,51426],{"class":111},[101,131189,72511],{"class":160},[101,131191,1277],{"class":111},[101,131193,131194],{"class":103,"line":1201},[101,131195,1552],{"class":111},[10,131197,131198],{},"overflow: hidden;",[10,131200,131201],{},"优点：代码简洁",[10,131203,131204],{},"缺点：无法显示溢出的部分",[10,131206,131207],{},"注意：是给父元素添加代码",[10,131209,131210],{},"法三",[10,131212,131213],{},"父级添加after伪元素",[10,131215,131216,131219],{},[131217,131218],"after",{}," 方式是额外标签法的升级版",[10,131221,131222],{},"使用的时候复制就可以",[92,131224,131225],{"className":126532,"code":130998,"language":126534,"meta":20,"style":20},[98,131226,131227,131233,131243,131247,131253,131263],{"__ignoreMap":20},[101,131228,131229,131231],{"class":103,"line":104},[101,131230,131005],{"class":1950},[101,131232,15560],{"class":111},[101,131234,131235,131237,131239,131241],{"class":103,"line":21},[101,131236,131012],{"class":160},[101,131238,51426],{"class":111},[101,131240,23725],{"class":160},[101,131242,1277],{"class":111},[101,131244,131245],{"class":103,"line":1166},[101,131246,1552],{"class":111},[101,131248,131249,131251],{"class":103,"line":1181},[101,131250,131027],{"class":1950},[101,131252,15560],{"class":111},[101,131254,131255,131257,131259,131261],{"class":103,"line":1187},[101,131256,131012],{"class":160},[101,131258,51426],{"class":111},[101,131260,72511],{"class":160},[101,131262,1277],{"class":111},[101,131264,131265],{"class":103,"line":1201},[101,131266,1552],{"class":111},[10,131268,131269],{},"优点：没有增加标签，结构更简单",[10,131271,131272],{},"缺点：照顾低版本浏览器",[10,131274,131275],{},"代表网站： 百度、淘宝网、网易等",[10,131277,131278],{},"法四",[10,131280,131281],{},"父级添加双伪元素",[92,131283,131284],{"className":126532,"code":130998,"language":126534,"meta":20,"style":20},[98,131285,131286,131292,131302,131306,131312,131322],{"__ignoreMap":20},[101,131287,131288,131290],{"class":103,"line":104},[101,131289,131005],{"class":1950},[101,131291,15560],{"class":111},[101,131293,131294,131296,131298,131300],{"class":103,"line":21},[101,131295,131012],{"class":160},[101,131297,51426],{"class":111},[101,131299,23725],{"class":160},[101,131301,1277],{"class":111},[101,131303,131304],{"class":103,"line":1166},[101,131305,1552],{"class":111},[101,131307,131308,131310],{"class":103,"line":1181},[101,131309,131027],{"class":1950},[101,131311,15560],{"class":111},[101,131313,131314,131316,131318,131320],{"class":103,"line":1187},[101,131315,131012],{"class":160},[101,131317,51426],{"class":111},[101,131319,72511],{"class":160},[101,131321,1277],{"class":111},[101,131323,131324],{"class":103,"line":1201},[101,131325,1552],{"class":111},[10,131327,131328],{},"优点：代码更简洁",[10,131330,131272],{},[10,131332,131333],{},"代表网站：小米、腾讯等",[43,131335,131337],{"id":131336},"_93-ps切图","9.3 PS切图",[72,131339,131341],{"id":131340},"_931-常见图片格式","9.3.1 常见图片格式",[249,131343,131344,131354],{},[252,131345,131346],{},[255,131347,131348,131351],{},[258,131349,131350],{"align":23725},"jpg图像格式",[258,131352,131353],{"align":23725},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[296,131355,131356,131364,131372],{},[255,131357,131358,131361],{},[301,131359,131360],{"align":23725},"gif图像格式",[301,131362,131363],{"align":23725},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[255,131365,131366,131369],{},[301,131367,131368],{"align":23725},"png图像格式",[301,131370,131371],{"align":23725},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[255,131373,131374,131377],{},[301,131375,131376],{"align":23725},"PSD图像格式",[301,131378,131379],{"align":23725},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[72,131381,131383],{"id":131382},"_932-图层切图","9.3.2 图层切图",[10,131385,131386],{},"最简单的切图方式：右击图层 → 导出 → 切片",[10,131388,131389],{},"按住shift选中两个图层->图层菜单->合并图层",[72,131391,131393],{"id":131392},"_933-切片切图","9.3.3 切片切图",[1118,131395,131396,131399],{},[58,131397,131398],{},"利用切片工具手动划出",[58,131400,131401],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[72,131403,131405],{"id":131404},"_934-切图步骤","9.3.4 切图步骤",[10,131407,131408],{},"用切片工具选中：",[1449,131410],{"style":126388,"src":131411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[10,131413,131414],{},"文件 -> 导出",[1449,131416],{"style":126388,"src":131417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5114,131419,131420],{},"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":20,"searchDepth":21,"depth":21,"links":131422},[131423,131432,131436],{"id":129859,"depth":21,"text":129860,"children":131424},[131425,131426,131427,131428,131429,131430,131431],{"id":129884,"depth":1166,"text":129885},{"id":130175,"depth":1166,"text":130176},{"id":130304,"depth":1166,"text":130305},{"id":130504,"depth":1166,"text":130505},{"id":130546,"depth":1166,"text":130547},{"id":130584,"depth":1166,"text":130585},{"id":130674,"depth":1166,"text":130675},{"id":130954,"depth":21,"text":130955,"children":131433},[131434,131435],{"id":130958,"depth":1166,"text":130959},{"id":130965,"depth":1166,"text":130966},{"id":131336,"depth":21,"text":131337,"children":131437},[131438,131439,131440,131441],{"id":131340,"depth":1166,"text":131341},{"id":131382,"depth":1166,"text":131383},{"id":131392,"depth":1166,"text":131393},{"id":131404,"depth":1166,"text":131405},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129851,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131448,"title":131449,"body":131450,"description":23365,"extension":24,"meta":132091,"navigation":27,"path":132092,"seo":132093,"stem":132094,"__hash__":132095},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131451,"toc":132079},[131452,131455,131459,131485,131519,131523,131527,131530,131572,131579,131589,131597,131599,131602,131605,131608,131615,131629,131633,131636,131665,131669,131672,131686,131690,131693,131721,131725,131728,131754,131758,131763,131796,131801,131829,131833,131850,131896,131901,131945,131962,132069,132077],[39,131453,131449],{"id":131454},"_10-css规范与学成在线案例",[43,131456,131458],{"id":131457},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[55,131460,131461,131467,131473,131479],{},[58,131462,131463,131466],{},[261,131464,131465],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[58,131468,131469,131472],{},[261,131470,131471],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[58,131474,131475,131478],{},[261,131476,131477],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[58,131480,131481,131484],{},[261,131482,131483],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[92,131486,131487],{"className":126532,"code":129896,"language":126534,"meta":20,"style":20},[98,131488,131489,131493,131499,131515],{"__ignoreMap":20},[101,131490,131491],{"class":103,"line":104},[101,131492,129903],{"class":170},[101,131494,131495,131497],{"class":103,"line":21},[101,131496,51600],{"class":51289},[101,131498,15560],{"class":111},[101,131500,131501,131503,131505,131507,131509,131511,131513],{"class":103,"line":1166},[101,131502,70885],{"class":160},[101,131504,51426],{"class":111},[101,131506,329],{"class":160},[101,131508,51481],{"class":107},[101,131510,51510],{"class":160},[101,131512,129924],{"class":160},[101,131514,1277],{"class":111},[101,131516,131517],{"class":103,"line":1181},[101,131518,1552],{"class":111},[43,131520,131522],{"id":131521},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[72,131524,131526],{"id":131525},"_1021-header头部制作","10.2.1 header头部制作",[1449,131528],{"style":126388,"src":131529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1118,131531,131532,131539,131546,131552,131559,131566],{},[58,131533,131534,131535,131538],{},"1号是版心盒子 ",[261,131536,131537],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[58,131540,131541,131542,131545],{},"版心盒子 里面包含 2号盒子 ",[261,131543,131544],{},"logo"," 图标",[58,131547,131548,131549,131551],{},"版心盒子 里面包含 3号盒子 ",[261,131550,53702],{}," 导航栏",[58,131553,131554,131555,131558],{},"版心盒子 里面包含 4号盒子 ",[261,131556,131557],{},"search"," 搜索框",[58,131560,131561,131562,131565],{},"版心盒子 里面包含 5号盒子 ",[261,131563,131564],{},"user"," 个人信息",[58,131567,131568,131569],{},"注意，要求里面的 ",[261,131570,131571],{},"4个子盒子 必须都浮动",[55,131573,131574],{},[58,131575,131576],{},[261,131577,131578],{},"导航栏注意点:",[10,131580,131581,131582,131585,131586],{},"实际开发中， ",[261,131583,131584],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[261,131587,131588],{},"用 li 包含链接(li+a)的做法",[1118,131590,131591,131594],{},[58,131592,131593],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[58,131595,131596],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[10,131598,9013],{},[10,131600,131601],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[10,131603,131604],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[10,131606,131607],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[55,131609,131610],{"start":21},[58,131611,131612],{},[261,131613,131614],{},"4号盒子search的细节：",[1118,131616,131617,131620,131623],{},[58,131618,131619],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[58,131621,131622],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[58,131624,131625,131628],{},[98,131626,131627],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[72,131630,131632],{"id":131631},"_1022-banner制作","10.2.2 banner制作",[1449,131634],{"style":126388,"src":131635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1118,131637,131638,131645,131651,131658],{},[58,131639,131640,131641,131644],{},"1号盒子是通栏的大盒子 ",[261,131642,131643],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[58,131646,131647,131648,131650],{},"2号盒子是版心 ",[261,131649,906],{}," ， 要水平居中对齐",[58,131652,131653,131654,131657],{},"3号盒子版心内，左对齐 ",[261,131655,131656],{},"subnav"," 侧导航栏",[58,131659,131660,131661,131664],{},"4号盒子版心内，右对齐 ",[261,131662,131663],{},"course"," 课程",[72,131666,131668],{"id":131667},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1449,131670],{"style":126388,"src":131671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1118,131673,131674,131677,131680,131683],{},[58,131675,131676],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[58,131678,131679],{},"1号盒子是标题 H3 左侧浮动",[58,131681,131682],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[58,131684,131685],{},"3号盒子 右浮动 mod 修改",[72,131687,131689],{"id":131688},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1449,131691],{"style":126388,"src":131692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1118,131694,131695,131701,131708,131715,131718],{},[58,131696,131697,131698,131700],{},"1号盒子为最大的盒子 ",[261,131699,53703],{}," 版心水平居中对齐",[58,131702,131703,131704,131707],{},"2号盒子为上面部分 ",[261,131705,131706],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[58,131709,131710,131711,131714],{},"3号盒子为底下部分 ",[261,131712,131713],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[58,131716,131717],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[58,131719,131720],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[72,131722,131724],{"id":131723},"_1025-底部模块制作","10.2.5 底部模块制作",[1449,131726],{"style":126388,"src":131727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1118,131729,131730,131737,131740,131747],{},[58,131731,131732,131733,131736],{},"1号盒子通栏大盒子 底部 ",[261,131734,131735],{},"footer"," 给高度 底色是白色",[58,131738,131739],{},"2号盒子版心水平居中",[58,131741,131742,131743,131746],{},"3号盒子版权 ",[261,131744,131745],{},"copyright"," 左对齐",[58,131748,131749,131750,131753],{},"4号盒子 链接组 ",[261,131751,131752],{},"links"," 右对齐",[72,131755,131757],{"id":131756},"_1026-代码模块","10.2.6 代码模块",[55,131759,131760],{},[58,131761,131762],{},"html部分",[92,131764,131766],{"className":127279,"code":131765,"language":127281,"meta":20,"style":20},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[98,131767,131768],{"__ignoreMap":20},[101,131769,131770,131772,131774,131776,131778,131781,131784,131786,131789,131792,131794],{"class":103,"line":104},[101,131771,1021],{"class":111},[101,131773,14],{"class":51289},[101,131775,61046],{"class":1950},[101,131777,157],{"class":111},[101,131779,131780],{"class":216},"\"https:\u002F\u002Fexample.com\"",[101,131782,131783],{"class":1950}," target",[101,131785,157],{"class":111},[101,131787,131788],{"class":216},"\"_blank\"",[101,131790,131791],{"class":111},">链接文字\u003C\u002F",[101,131793,14],{"class":51289},[101,131795,51296],{"class":111},[55,131797,131798],{"start":21},[58,131799,131800],{},"css部分",[92,131802,131803],{"className":127279,"code":131765,"language":127281,"meta":20,"style":20},[98,131804,131805],{"__ignoreMap":20},[101,131806,131807,131809,131811,131813,131815,131817,131819,131821,131823,131825,131827],{"class":103,"line":104},[101,131808,1021],{"class":111},[101,131810,14],{"class":51289},[101,131812,61046],{"class":1950},[101,131814,157],{"class":111},[101,131816,131780],{"class":216},[101,131818,131783],{"class":1950},[101,131820,157],{"class":111},[101,131822,131788],{"class":216},[101,131824,131791],{"class":111},[101,131826,14],{"class":51289},[101,131828,51296],{"class":111},[72,131830,131832],{"id":131831},"_1027-收获","10.2.7 收获",[55,131834,131835,131838,131841,131844,131847],{},[58,131836,131837],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[58,131839,131840],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[58,131842,131843],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[58,131845,131846],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[58,131848,131849],{},"遗忘代码",[92,131851,131853],{"className":126532,"code":131852,"language":126534,"meta":20,"style":20},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[98,131854,131855,131877,131882,131892],{"__ignoreMap":20},[101,131856,131857,131859,131861,131863,131865,131867,131869,131871,131873,131875],{"class":103,"line":104},[101,131858,51600],{"class":51289},[101,131860,12423],{"class":111},[101,131862,10],{"class":51289},[101,131864,12423],{"class":111},[101,131866,39],{"class":51289},[101,131868,12423],{"class":111},[101,131870,1118],{"class":51289},[101,131872,12423],{"class":111},[101,131874,58],{"class":51289},[101,131876,15560],{"class":111},[101,131878,131879],{"class":103,"line":21},[101,131880,131881],{"class":170},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[101,131883,131884,131886,131888,131890],{"class":103,"line":1166},[101,131885,128148],{"class":160},[101,131887,51426],{"class":111},[101,131889,60858],{"class":160},[101,131891,1277],{"class":111},[101,131893,131894],{"class":103,"line":1181},[101,131895,1552],{"class":111},[55,131897,131898],{"start":1201},[58,131899,131900],{},"html引css的程序",[92,131902,131903],{"className":126532,"code":131852,"language":126534,"meta":20,"style":20},[98,131904,131905,131927,131931,131941],{"__ignoreMap":20},[101,131906,131907,131909,131911,131913,131915,131917,131919,131921,131923,131925],{"class":103,"line":104},[101,131908,51600],{"class":51289},[101,131910,12423],{"class":111},[101,131912,10],{"class":51289},[101,131914,12423],{"class":111},[101,131916,39],{"class":51289},[101,131918,12423],{"class":111},[101,131920,1118],{"class":51289},[101,131922,12423],{"class":111},[101,131924,58],{"class":51289},[101,131926,15560],{"class":111},[101,131928,131929],{"class":103,"line":21},[101,131930,131881],{"class":170},[101,131932,131933,131935,131937,131939],{"class":103,"line":1166},[101,131934,128148],{"class":160},[101,131936,51426],{"class":111},[101,131938,60858],{"class":160},[101,131940,1277],{"class":111},[101,131942,131943],{"class":103,"line":1181},[101,131944,1552],{"class":111},[55,131946,131947,131950,131953,131956,131959],{"start":1207},[58,131948,131949],{},"浮动的盒子不会有外边距合并问题",[58,131951,131952],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[58,131954,131955],{},"ctrl+g快速定位行；shift+alt多个光标",[58,131957,131958],{},"学习上方各个模块的选择器起名方法，以后就这样用",[58,131960,131961],{},"在写选择器时尽量写全一些，例如",[92,131963,131965],{"className":126532,"code":131964,"language":126534,"meta":20,"style":20},"\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",[98,131966,131967,131972,131988,131993,132008,132013,132028,132033,132048,132053],{"__ignoreMap":20},[101,131968,131969],{"class":103,"line":104},[101,131970,131971],{"class":170},"\u002F* 静态定位（默认） *\u002F\n",[101,131973,131974,131977,131979,131981,131983,131986],{"class":103,"line":21},[101,131975,131976],{"class":1950},".static",[101,131978,79796],{"class":111},[101,131980,128892],{"class":160},[101,131982,51426],{"class":111},[101,131984,131985],{"class":160},"static",[101,131987,129462],{"class":111},[101,131989,131990],{"class":103,"line":1166},[101,131991,131992],{"class":170},"\u002F* 相对定位 *\u002F\n",[101,131994,131995,131998,132000,132002,132004,132006],{"class":103,"line":1181},[101,131996,131997],{"class":1950},".relative",[101,131999,79796],{"class":111},[101,132001,128892],{"class":160},[101,132003,51426],{"class":111},[101,132005,54753],{"class":160},[101,132007,129462],{"class":111},[101,132009,132010],{"class":103,"line":1187},[101,132011,132012],{"class":170},"\u002F* 绝对定位 *\u002F\n",[101,132014,132015,132018,132020,132022,132024,132026],{"class":103,"line":1201},[101,132016,132017],{"class":1950},".absolute",[101,132019,79796],{"class":111},[101,132021,128892],{"class":160},[101,132023,51426],{"class":111},[101,132025,54820],{"class":160},[101,132027,129462],{"class":111},[101,132029,132030],{"class":103,"line":1207},[101,132031,132032],{"class":170},"\u002F* 固定定位 *\u002F\n",[101,132034,132035,132038,132040,132042,132044,132046],{"class":103,"line":1298},[101,132036,132037],{"class":1950},".fixed",[101,132039,79796],{"class":111},[101,132041,128892],{"class":160},[101,132043,51426],{"class":111},[101,132045,86222],{"class":160},[101,132047,129462],{"class":111},[101,132049,132050],{"class":103,"line":1304},[101,132051,132052],{"class":170},"\u002F* 粘性定位 *\u002F\n",[101,132054,132055,132058,132060,132062,132064,132067],{"class":103,"line":1316},[101,132056,132057],{"class":1950},".sticky",[101,132059,79796],{"class":111},[101,132061,128892],{"class":160},[101,132063,51426],{"class":111},[101,132065,132066],{"class":160},"sticky",[101,132068,129462],{"class":111},[55,132070,132071,132074],{"start":1604},[58,132072,132073],{},"一定要用好注释",[58,132075,132076],{},"浮动的盒子不会有外边距合并的问题",[5114,132078,131420],{},{"title":20,"searchDepth":21,"depth":21,"links":132080},[132081,132082],{"id":131457,"depth":21,"text":131458},{"id":131521,"depth":21,"text":131522,"children":132083},[132084,132085,132086,132087,132088,132089,132090],{"id":131525,"depth":1166,"text":131526},{"id":131631,"depth":1166,"text":131632},{"id":131667,"depth":1166,"text":131668},{"id":131688,"depth":1166,"text":131689},{"id":131723,"depth":1166,"text":131724},{"id":131756,"depth":1166,"text":131757},{"id":131831,"depth":1166,"text":131832},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131449,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132097,"title":132098,"body":132099,"description":23365,"extension":24,"meta":133585,"navigation":27,"path":133586,"seo":133587,"stem":133588,"__hash__":133589},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132100,"toc":133577},[132101,132104,132108,132112,132123,132127,132144,132188,132221,132224,132241,132244,132247,132291,132295,132299,132302,132305,132309,132312,132323,132386,132427,132430,132445,132499,132507,132510,132521,132575,132601,132604,132617,132671,132703,132757,132780,132834,132837,132840,132847,132901,132922,132976,132979,132982,133067,133075,133132,133155,133159,133162,133180,133184,133203,133257,133295,133299,133302,133305,133327,133331,133339,133342,133347,133358,133361,133365,133379,133423,133426,133430,133433,133438,133464,133469,133546,133549,133553,133556,133559,133562,133565,133568,133571,133574],[39,132102,132098],{"id":132103},"_11-传统布局与定位体系",[43,132105,132107],{"id":132106},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[72,132109,132111],{"id":132110},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1118,132113,132114,132117,132120],{},[58,132115,132116],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[58,132118,132119],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[58,132121,132122],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[72,132124,132126],{"id":132125},"_1112-浮动","11.1.2 浮动",[1118,132128,132129,132132,132135,132138,132141],{},[58,132130,132131],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[58,132133,132134],{},"浮动可以改变元素标签默认的排列方式",[58,132136,132137],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[58,132139,132140],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[58,132142,132143],{},"在使用行内块转换时盒子之间是有空隙的",[92,132145,132146],{"className":126532,"code":130998,"language":126534,"meta":20,"style":20},[98,132147,132148,132154,132164,132168,132174,132184],{"__ignoreMap":20},[101,132149,132150,132152],{"class":103,"line":104},[101,132151,131005],{"class":1950},[101,132153,15560],{"class":111},[101,132155,132156,132158,132160,132162],{"class":103,"line":21},[101,132157,131012],{"class":160},[101,132159,51426],{"class":111},[101,132161,23725],{"class":160},[101,132163,1277],{"class":111},[101,132165,132166],{"class":103,"line":1166},[101,132167,1552],{"class":111},[101,132169,132170,132172],{"class":103,"line":1181},[101,132171,131027],{"class":1950},[101,132173,15560],{"class":111},[101,132175,132176,132178,132180,132182],{"class":103,"line":1187},[101,132177,131012],{"class":160},[101,132179,51426],{"class":111},[101,132181,72511],{"class":160},[101,132183,1277],{"class":111},[101,132185,132186],{"class":103,"line":1201},[101,132187,1552],{"class":111},[249,132189,132190,132198],{},[252,132191,132192],{},[255,132193,132194,132196],{},[258,132195,126996],{"align":23725},[258,132197,27478],{"align":23725},[296,132199,132200,132207,132214],{},[255,132201,132202,132204],{},[301,132203,54726],{"align":23725},[301,132205,132206],{"align":23725},"元素不浮动（默认值）",[255,132208,132209,132211],{},[301,132210,23725],{"align":23725},[301,132212,132213],{"align":23725},"元素向左浮动",[255,132215,132216,132218],{},[301,132217,72511],{"align":23725},[301,132219,132220],{"align":23725},"元素向右浮动",[10,132222,132223],{},"浮动重点：",[1118,132225,132226,132229,132232,132235,132238],{},[58,132227,132228],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[58,132230,132231],{},"浮动的元素会一行内显示并且元素顶部对齐",[58,132233,132234],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[58,132236,132237],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[58,132239,132240],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[10,132242,132243],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[10,132245,132246],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[92,132248,132249],{"className":126532,"code":130998,"language":126534,"meta":20,"style":20},[98,132250,132251,132257,132267,132271,132277,132287],{"__ignoreMap":20},[101,132252,132253,132255],{"class":103,"line":104},[101,132254,131005],{"class":1950},[101,132256,15560],{"class":111},[101,132258,132259,132261,132263,132265],{"class":103,"line":21},[101,132260,131012],{"class":160},[101,132262,51426],{"class":111},[101,132264,23725],{"class":160},[101,132266,1277],{"class":111},[101,132268,132269],{"class":103,"line":1166},[101,132270,1552],{"class":111},[101,132272,132273,132275],{"class":103,"line":1181},[101,132274,131027],{"class":1950},[101,132276,15560],{"class":111},[101,132278,132279,132281,132283,132285],{"class":103,"line":1187},[101,132280,131012],{"class":160},[101,132282,51426],{"class":111},[101,132284,72511],{"class":160},[101,132286,1277],{"class":111},[101,132288,132289],{"class":103,"line":1201},[101,132290,1552],{"class":111},[72,132292,132294],{"id":132293},"_1113-定位","11.1.3 定位",[21986,132296,132298],{"id":132297},"_11131-使用场景","11.1.3.1 使用场景",[10,132300,132301],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[10,132303,132304],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21986,132306,132308],{"id":132307},"_11132-定位组成","11.1.3.2 定位组成",[10,132310,132311],{},"定位 = 定位模式 + 边偏移",[55,132313,132314],{},[58,132315,132316,132319,132320],{},[261,132317,132318],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[261,132321,132322],{},"定位模式",[92,132324,132326],{"className":126532,"code":132325,"language":126534,"meta":20,"style":20},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[98,132327,132328,132334,132348,132365,132382],{"__ignoreMap":20},[101,132329,132330,132332],{"class":103,"line":104},[101,132331,130380],{"class":1950},[101,132333,15560],{"class":111},[101,132335,132336,132339,132341,132343,132345],{"class":103,"line":21},[101,132337,132338],{"class":160},"  position",[101,132340,51426],{"class":111},[101,132342,54753],{"class":160},[101,132344,130395],{"class":111},[101,132346,132347],{"class":170},"\u002F* 定位模式 *\u002F\n",[101,132349,132350,132353,132355,132357,132359,132362],{"class":103,"line":1166},[101,132351,132352],{"class":160},"  top",[101,132354,51426],{"class":111},[101,132356,557],{"class":160},[101,132358,51481],{"class":107},[101,132360,132361],{"class":111},";           ",[101,132363,132364],{"class":170},"\u002F* 边偏移：上 *\u002F\n",[101,132366,132367,132370,132372,132374,132376,132379],{"class":103,"line":1181},[101,132368,132369],{"class":160},"  left",[101,132371,51426],{"class":111},[101,132373,811],{"class":160},[101,132375,51481],{"class":107},[101,132377,132378],{"class":111},";          ",[101,132380,132381],{"class":170},"\u002F* 边偏移：左 *\u002F\n",[101,132383,132384],{"class":103,"line":1187},[101,132385,1552],{"class":111},[249,132387,132388,132397],{},[252,132389,132390],{},[255,132391,132392,132394],{},[258,132393,264],{"align":23725},[258,132395,132396],{"align":23725},"语义",[296,132398,132399,132406,132413,132420],{},[255,132400,132401,132403],{},[301,132402,131985],{"align":23725},[301,132404,132405],{"align":23725},"静态定位",[255,132407,132408,132410],{},[301,132409,54753],{"align":23725},[301,132411,132412],{"align":23725},"相对定位",[255,132414,132415,132417],{},[301,132416,54820],{"align":23725},[301,132418,132419],{"align":23725},"绝对定位",[255,132421,132422,132424],{},[301,132423,86222],{"align":23725},[301,132425,132426],{"align":23725},"固定定位",[10,132428,132429],{},"（1）静态定位：",[1118,132431,132432,132443],{},[58,132433,132434,132435,132438,132439,132442],{},"静态定位是元素的 ",[261,132436,132437],{},"默认定位方式"," ， ",[261,132440,132441],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[58,132444,5169],{},[92,132446,132447],{"className":126532,"code":132325,"language":126534,"meta":20,"style":20},[98,132448,132449,132455,132467,132481,132495],{"__ignoreMap":20},[101,132450,132451,132453],{"class":103,"line":104},[101,132452,130380],{"class":1950},[101,132454,15560],{"class":111},[101,132456,132457,132459,132461,132463,132465],{"class":103,"line":21},[101,132458,132338],{"class":160},[101,132460,51426],{"class":111},[101,132462,54753],{"class":160},[101,132464,130395],{"class":111},[101,132466,132347],{"class":170},[101,132468,132469,132471,132473,132475,132477,132479],{"class":103,"line":1166},[101,132470,132352],{"class":160},[101,132472,51426],{"class":111},[101,132474,557],{"class":160},[101,132476,51481],{"class":107},[101,132478,132361],{"class":111},[101,132480,132364],{"class":170},[101,132482,132483,132485,132487,132489,132491,132493],{"class":103,"line":1181},[101,132484,132369],{"class":160},[101,132486,51426],{"class":111},[101,132488,811],{"class":160},[101,132490,51481],{"class":107},[101,132492,132378],{"class":111},[101,132494,132381],{"class":170},[101,132496,132497],{"class":103,"line":1187},[101,132498,1552],{"class":111},[1118,132500,132501,132504],{},[58,132502,132503],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[58,132505,132506],{},"静态定位在布局时我们几乎不用的",[10,132508,132509],{},"（2）相对定位",[1118,132511,132512,132519],{},[58,132513,132514,132515,132518],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[261,132516,132517],{},"原来的位置"," 来说的（自恋型）",[58,132520,5169],{},[92,132522,132523],{"className":126532,"code":132325,"language":126534,"meta":20,"style":20},[98,132524,132525,132531,132543,132557,132571],{"__ignoreMap":20},[101,132526,132527,132529],{"class":103,"line":104},[101,132528,130380],{"class":1950},[101,132530,15560],{"class":111},[101,132532,132533,132535,132537,132539,132541],{"class":103,"line":21},[101,132534,132338],{"class":160},[101,132536,51426],{"class":111},[101,132538,54753],{"class":160},[101,132540,130395],{"class":111},[101,132542,132347],{"class":170},[101,132544,132545,132547,132549,132551,132553,132555],{"class":103,"line":1166},[101,132546,132352],{"class":160},[101,132548,51426],{"class":111},[101,132550,557],{"class":160},[101,132552,51481],{"class":107},[101,132554,132361],{"class":111},[101,132556,132364],{"class":170},[101,132558,132559,132561,132563,132565,132567,132569],{"class":103,"line":1181},[101,132560,132369],{"class":160},[101,132562,51426],{"class":111},[101,132564,811],{"class":160},[101,132566,51481],{"class":107},[101,132568,132378],{"class":111},[101,132570,132381],{"class":170},[101,132572,132573],{"class":103,"line":1187},[101,132574,1552],{"class":111},[1118,132576,132577],{},[58,132578,132579,132580,132582,132583,132585,132586,132589,132590,132593,132594,132596,132597,132600],{},"相对定位的特点：",[53705,132581],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53705,132584],{},"  ② ",[261,132587,132588],{},"原来"," 在标准流的 ",[261,132591,132592],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53705,132595],{},"  ③因此， ",[261,132598,132599],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[10,132602,132603],{},"（3）绝对定位",[1118,132605,132606,132615],{},[58,132607,132608,132610,132611,132614],{},[261,132609,132419],{}," 是元素在移动位置的时候，是相对于它 ",[261,132612,132613],{},"祖先元素"," 来说的（拼爹型）",[58,132616,5169],{},[92,132618,132619],{"className":126532,"code":132325,"language":126534,"meta":20,"style":20},[98,132620,132621,132627,132639,132653,132667],{"__ignoreMap":20},[101,132622,132623,132625],{"class":103,"line":104},[101,132624,130380],{"class":1950},[101,132626,15560],{"class":111},[101,132628,132629,132631,132633,132635,132637],{"class":103,"line":21},[101,132630,132338],{"class":160},[101,132632,51426],{"class":111},[101,132634,54753],{"class":160},[101,132636,130395],{"class":111},[101,132638,132347],{"class":170},[101,132640,132641,132643,132645,132647,132649,132651],{"class":103,"line":1166},[101,132642,132352],{"class":160},[101,132644,51426],{"class":111},[101,132646,557],{"class":160},[101,132648,51481],{"class":107},[101,132650,132361],{"class":111},[101,132652,132364],{"class":170},[101,132654,132655,132657,132659,132661,132663,132665],{"class":103,"line":1181},[101,132656,132369],{"class":160},[101,132658,51426],{"class":111},[101,132660,811],{"class":160},[101,132662,51481],{"class":107},[101,132664,132378],{"class":111},[101,132666,132381],{"class":170},[101,132668,132669],{"class":103,"line":1187},[101,132670,1552],{"class":111},[1118,132672,132673,132688,132697,132700],{},[58,132674,132675,132676,132678,132679,132681,132682,132684,132685,132687],{},"绝对定位的特点：",[53705,132677],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53705,132680],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53705,132683],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53705,132686],{},"  (4)固定定位",[58,132689,132690,132692,132693,132696],{},[261,132691,132426],{}," 是元素 ",[261,132694,132695],{},"固定于浏览器可视区的位置"," 。（认死理型）",[58,132698,132699],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[58,132701,132702],{},"语法:",[92,132704,132705],{"className":126532,"code":132325,"language":126534,"meta":20,"style":20},[98,132706,132707,132713,132725,132739,132753],{"__ignoreMap":20},[101,132708,132709,132711],{"class":103,"line":104},[101,132710,130380],{"class":1950},[101,132712,15560],{"class":111},[101,132714,132715,132717,132719,132721,132723],{"class":103,"line":21},[101,132716,132338],{"class":160},[101,132718,51426],{"class":111},[101,132720,54753],{"class":160},[101,132722,130395],{"class":111},[101,132724,132347],{"class":170},[101,132726,132727,132729,132731,132733,132735,132737],{"class":103,"line":1166},[101,132728,132352],{"class":160},[101,132730,51426],{"class":111},[101,132732,557],{"class":160},[101,132734,51481],{"class":107},[101,132736,132361],{"class":111},[101,132738,132364],{"class":170},[101,132740,132741,132743,132745,132747,132749,132751],{"class":103,"line":1181},[101,132742,132369],{"class":160},[101,132744,51426],{"class":111},[101,132746,811],{"class":160},[101,132748,51481],{"class":107},[101,132750,132378],{"class":111},[101,132752,132381],{"class":170},[101,132754,132755],{"class":103,"line":1187},[101,132756,1552],{"class":111},[1118,132758,132759,132768],{},[58,132760,132761,132762,132764,132765,132767],{},"特点:",[53705,132763],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53705,132766],{},"  ②固定定位不再占有原先的位置,完全脱标",[58,132769,132770,132771,132773,132774,132776,132777,132779],{},"固定在版心位置的方法:",[53705,132772],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53705,132775],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53705,132778],{},"  实例：",[92,132781,132782],{"className":126532,"code":132325,"language":126534,"meta":20,"style":20},[98,132783,132784,132790,132802,132816,132830],{"__ignoreMap":20},[101,132785,132786,132788],{"class":103,"line":104},[101,132787,130380],{"class":1950},[101,132789,15560],{"class":111},[101,132791,132792,132794,132796,132798,132800],{"class":103,"line":21},[101,132793,132338],{"class":160},[101,132795,51426],{"class":111},[101,132797,54753],{"class":160},[101,132799,130395],{"class":111},[101,132801,132347],{"class":170},[101,132803,132804,132806,132808,132810,132812,132814],{"class":103,"line":1166},[101,132805,132352],{"class":160},[101,132807,51426],{"class":111},[101,132809,557],{"class":160},[101,132811,51481],{"class":107},[101,132813,132361],{"class":111},[101,132815,132364],{"class":170},[101,132817,132818,132820,132822,132824,132826,132828],{"class":103,"line":1181},[101,132819,132369],{"class":160},[101,132821,51426],{"class":111},[101,132823,811],{"class":160},[101,132825,51481],{"class":107},[101,132827,132378],{"class":111},[101,132829,132381],{"class":170},[101,132831,132832],{"class":103,"line":1187},[101,132833,1552],{"class":111},[1449,132835],{"style":126388,"src":132836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[10,132838,132839],{},"(5)粘性定位",[1118,132841,132842,132845],{},[58,132843,132844],{},"粘性定位可以被认为是相对定位和固定定位的混合",[58,132846,5169],{},[92,132848,132849],{"className":126532,"code":132325,"language":126534,"meta":20,"style":20},[98,132850,132851,132857,132869,132883,132897],{"__ignoreMap":20},[101,132852,132853,132855],{"class":103,"line":104},[101,132854,130380],{"class":1950},[101,132856,15560],{"class":111},[101,132858,132859,132861,132863,132865,132867],{"class":103,"line":21},[101,132860,132338],{"class":160},[101,132862,51426],{"class":111},[101,132864,54753],{"class":160},[101,132866,130395],{"class":111},[101,132868,132347],{"class":170},[101,132870,132871,132873,132875,132877,132879,132881],{"class":103,"line":1166},[101,132872,132352],{"class":160},[101,132874,51426],{"class":111},[101,132876,557],{"class":160},[101,132878,51481],{"class":107},[101,132880,132361],{"class":111},[101,132882,132364],{"class":170},[101,132884,132885,132887,132889,132891,132893,132895],{"class":103,"line":1181},[101,132886,132369],{"class":160},[101,132888,51426],{"class":111},[101,132890,811],{"class":160},[101,132892,51481],{"class":107},[101,132894,132378],{"class":111},[101,132896,132381],{"class":170},[101,132898,132899],{"class":103,"line":1187},[101,132900,1552],{"class":111},[1118,132902,132903],{},[58,132904,132905,132906,132908,132909,132911,132912,132914,132915,132918,132919,132921],{},"粘性定位的特点：",[53705,132907],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53705,132910],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53705,132913],{},"  ③必须添加 top 、left、right、bottom ",[261,132916,132917],{},"其中一个"," 才有效",[53705,132920],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[92,132923,132924],{"className":126532,"code":132325,"language":126534,"meta":20,"style":20},[98,132925,132926,132932,132944,132958,132972],{"__ignoreMap":20},[101,132927,132928,132930],{"class":103,"line":104},[101,132929,130380],{"class":1950},[101,132931,15560],{"class":111},[101,132933,132934,132936,132938,132940,132942],{"class":103,"line":21},[101,132935,132338],{"class":160},[101,132937,51426],{"class":111},[101,132939,54753],{"class":160},[101,132941,130395],{"class":111},[101,132943,132347],{"class":170},[101,132945,132946,132948,132950,132952,132954,132956],{"class":103,"line":1166},[101,132947,132352],{"class":160},[101,132949,51426],{"class":111},[101,132951,557],{"class":160},[101,132953,51481],{"class":107},[101,132955,132361],{"class":111},[101,132957,132364],{"class":170},[101,132959,132960,132962,132964,132966,132968,132970],{"class":103,"line":1181},[101,132961,132369],{"class":160},[101,132963,51426],{"class":111},[101,132965,811],{"class":160},[101,132967,51481],{"class":107},[101,132969,132378],{"class":111},[101,132971,132381],{"class":170},[101,132973,132974],{"class":103,"line":1187},[101,132975,1552],{"class":111},[1449,132977],{"style":126388,"src":132978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[10,132980,132981],{},"(6)总结",[249,132983,132984,132999],{},[252,132985,132986],{},[255,132987,132988,132990,132993,132996],{},[258,132989,132322],{"align":23725},[258,132991,132992],{"align":23725},"是否脱标",[258,132994,132995],{"align":23725},"移动位置",[258,132997,132998],{"align":23725},"是否常用",[296,133000,133001,133014,133028,133042,133055],{},[255,133002,133003,133006,133008,133011],{},[301,133004,133005],{"align":23725},"Static 静态定位",[301,133007,104658],{"align":23725},[301,133009,133010],{"align":23725},"不能使用边偏移",[301,133012,133013],{"align":23725},"很少",[255,133015,133016,133019,133022,133025],{},[301,133017,133018],{"align":23725},"Relative 相对定位",[301,133020,133021],{"align":23725},"否(占有位置)",[301,133023,133024],{"align":23725},"相对于自身位置移动",[301,133026,133027],{"align":23725},"基本单独使用",[255,133029,133030,133033,133036,133039],{},[301,133031,133032],{"align":23725},"Absolute 绝对定位",[301,133034,133035],{"align":23725},"是(不占有位置)",[301,133037,133038],{"align":23725},"带有定位的父级",[301,133040,133041],{"align":23725},"要和定位父级元素搭配使用",[255,133043,133044,133047,133049,133052],{},[301,133045,133046],{"align":23725},"Fixed 固定定位",[301,133048,133035],{"align":23725},[301,133050,133051],{"align":23725},"浏览器可视区",[301,133053,133054],{"align":23725},"单独使用,不需要父级",[255,133056,133057,133060,133062,133064],{},[301,133058,133059],{"align":23725},"Sticky 粘性定位",[301,133061,133021],{"align":23725},[301,133063,133051],{"align":23725},[301,133065,133066],{"align":23725},"当前阶段少",[55,133068,133069],{"start":21},[58,133070,133071,133074],{},[261,133072,133073],{},"边偏移"," 则决定了该元素的最终位置",[249,133076,133077,133088],{},[252,133078,133079],{},[255,133080,133081,133084,133086],{},[258,133082,133083],{"align":23725},"边偏移属性",[258,133085,27481],{"align":23725},[258,133087,27478],{"align":23725},[296,133089,133090,133101,133112,133122],{},[255,133091,133092,133095,133098],{},[301,133093,133094],{"align":23725},"top",[301,133096,133097],{"align":23725},"top: 80px;",[301,133099,133100],{"align":23725},"顶端偏移量，定义元素相对于父元素上边线的距离",[255,133102,133103,133106,133109],{},[301,133104,133105],{"align":23725},"bottom",[301,133107,133108],{"align":23725},"bottom: 80px ;",[301,133110,133111],{"align":23725},"底部偏移量，定义元素相对于其父元素下边线的距离",[255,133113,133114,133116,133119],{},[301,133115,23725],{"align":23725},[301,133117,133118],{"align":23725},"left: 80px ;",[301,133120,133121],{"align":23725},"左侧偏移量，定义元素相对于其父元素左边线的距离",[255,133123,133124,133126,133129],{},[301,133125,72511],{"align":23725},[301,133127,133128],{"align":23725},"right: 80px ;",[301,133130,133131],{"align":23725},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1118,133133,133134],{},[58,133135,9013,133136,133138,133139,133141,133142,133144,133145,133148,133149,133151,133152,133154],{},[53705,133137],{},"  ① ",[261,133140,133073],{}," 需要和 ",[261,133143,132322],{}," 联合使用， ",[261,133146,133147],{},"单独使用无效"," ；",[53705,133150],{},"  ②top和bottom不要同时使用",[53705,133153],{},"  ③left和right不要同时使用",[21986,133156,133158],{"id":133157},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[10,133160,133161],{},"子级是绝对定位的话，父级要用相对定位",[1118,133163,133164,133167,133170,133173],{},[58,133165,133166],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[58,133168,133169],{},"父盒子需要加定位限制子盒子在父盒子内显示",[58,133171,133172],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[58,133174,133175,133176,133179],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[261,133177,133178],{},"子绝父绝"," 也会遇到",[21986,133181,133183],{"id":133182},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1118,133185,133186,133201],{},[58,133187,133188,133189,133192,133193,133196,133197,133200],{},"在使用 ",[261,133190,133191],{},"定位"," 布局时，可能会 ",[261,133194,133195],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[261,133198,133199],{},"z-index"," 来控制盒子的前后次序 (z轴)",[58,133202,5169],{},[92,133204,133205],{"className":126532,"code":132325,"language":126534,"meta":20,"style":20},[98,133206,133207,133213,133225,133239,133253],{"__ignoreMap":20},[101,133208,133209,133211],{"class":103,"line":104},[101,133210,130380],{"class":1950},[101,133212,15560],{"class":111},[101,133214,133215,133217,133219,133221,133223],{"class":103,"line":21},[101,133216,132338],{"class":160},[101,133218,51426],{"class":111},[101,133220,54753],{"class":160},[101,133222,130395],{"class":111},[101,133224,132347],{"class":170},[101,133226,133227,133229,133231,133233,133235,133237],{"class":103,"line":1166},[101,133228,132352],{"class":160},[101,133230,51426],{"class":111},[101,133232,557],{"class":160},[101,133234,51481],{"class":107},[101,133236,132361],{"class":111},[101,133238,132364],{"class":170},[101,133240,133241,133243,133245,133247,133249,133251],{"class":103,"line":1181},[101,133242,132369],{"class":160},[101,133244,51426],{"class":111},[101,133246,811],{"class":160},[101,133248,51481],{"class":107},[101,133250,132378],{"class":111},[101,133252,132381],{"class":170},[101,133254,133255],{"class":103,"line":1187},[101,133256,1552],{"class":111},[1118,133258,133259],{},[58,133260,133261,133262,133138,133264,133266,133267,127695,133270,82528,133273,133275,133276,133278,133279,133282,133283,133148,133286,133288,133289,133292,133294],{},"z-index的特性",[53705,133263],{},[261,133265,126996],{}," ： ",[261,133268,133269],{},"正整数",[261,133271,133272],{},"负整数",[261,133274,303],{}," ，默认值是 0，数值越大，盒子越靠上；",[53705,133277],{},"  ②如果 ",[261,133280,133281],{},"属性值相同"," ，则按照书写顺序， ",[261,133284,133285],{},"后来居上",[53705,133287],{},"  ③数字后面 ",[261,133290,133291],{},"不能加单位",[53705,133293],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21986,133296,133298],{"id":133297},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[10,133300,133301],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[10,133303,133304],{},"方法:",[1118,133306,133307,133317],{},[58,133308,133309,133310,133313,133314],{},"left: 50%; 让 ",[261,133311,133312],{},"盒子的左侧"," 移动到 ",[261,133315,133316],{},"父级元素的水平中心位置",[58,133318,133319,133320,133323,133324],{},"margin-left: -100px; 让盒子 ",[261,133321,133322],{},"向左"," 移动 ",[261,133325,133326],{},"自身宽度的一半",[21986,133328,133330],{"id":133329},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[55,133332,133333,133336],{},[58,133334,133335],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[58,133337,133338],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[10,133340,133341],{},"也就是说绝对定位和固定定位和浮动类似",[55,133343,133344],{"start":1166},[58,133345,133346],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1118,133348,133349,133352,133355],{},[58,133350,133351],{},"可以用inline-block 转换为行内块",[58,133353,133354],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[58,133356,133357],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[10,133359,133360],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21986,133362,133364],{"id":133363},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[55,133366,133367,133370,133373,133376],{},[58,133368,133369],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[58,133371,133372],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[58,133374,133375],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[58,133377,133378],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[92,133380,133381],{"className":126532,"code":130998,"language":126534,"meta":20,"style":20},[98,133382,133383,133389,133399,133403,133409,133419],{"__ignoreMap":20},[101,133384,133385,133387],{"class":103,"line":104},[101,133386,131005],{"class":1950},[101,133388,15560],{"class":111},[101,133390,133391,133393,133395,133397],{"class":103,"line":21},[101,133392,131012],{"class":160},[101,133394,51426],{"class":111},[101,133396,23725],{"class":160},[101,133398,1277],{"class":111},[101,133400,133401],{"class":103,"line":1166},[101,133402,1552],{"class":111},[101,133404,133405,133407],{"class":103,"line":1181},[101,133406,131027],{"class":1950},[101,133408,15560],{"class":111},[101,133410,133411,133413,133415,133417],{"class":103,"line":1187},[101,133412,131012],{"class":160},[101,133414,51426],{"class":111},[101,133416,72511],{"class":160},[101,133418,1277],{"class":111},[101,133420,133421],{"class":103,"line":1201},[101,133422,1552],{"class":111},[1449,133424],{"style":126388,"src":133425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21986,133427,133429],{"id":133428},"_11138-轮播图","11.1.3.8 轮播图",[1449,133431],{"style":126388,"src":133432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[55,133434,133435],{},[58,133436,133437],{},"制作顺序:",[1118,133439,133440,133443,133446,133455],{},[58,133441,133442],{},"大盒子我们类名为： tb-promo 淘宝广告",[58,133444,133445],{},"里面先放一张图片",[58,133447,133448,133449,133451,133452,133454],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53705,133450],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53705,133453],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[58,133456,133457,133458,133460,133461,133463],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53705,133459],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53705,133462],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[55,133465,133466],{"start":21},[58,133467,133468],{},"代码模块",[92,133470,133472],{"className":126532,"code":133471,"language":126534,"meta":20,"style":20},"\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",[98,133473,133474,133479,133486,133496,133506,133516,133520,133525,133532,133542],{"__ignoreMap":20},[101,133475,133476],{"class":103,"line":104},[101,133477,133478],{"class":170},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[101,133480,133481,133484],{"class":103,"line":21},[101,133482,133483],{"class":1950},".son",[101,133485,15560],{"class":111},[101,133487,133488,133490,133492,133494],{"class":103,"line":1166},[101,133489,132338],{"class":160},[101,133491,51426],{"class":111},[101,133493,54820],{"class":160},[101,133495,1277],{"class":111},[101,133497,133498,133500,133502,133504],{"class":103,"line":1181},[101,133499,132352],{"class":160},[101,133501,51426],{"class":111},[101,133503,303],{"class":160},[101,133505,1277],{"class":111},[101,133507,133508,133510,133512,133514],{"class":103,"line":1187},[101,133509,132369],{"class":160},[101,133511,51426],{"class":111},[101,133513,303],{"class":160},[101,133515,1277],{"class":111},[101,133517,133518],{"class":103,"line":1201},[101,133519,1552],{"class":111},[101,133521,133522],{"class":103,"line":1207},[101,133523,133524],{"class":170},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[101,133526,133527,133530],{"class":103,"line":1298},[101,133528,133529],{"class":1950},".father",[101,133531,15560],{"class":111},[101,133533,133534,133536,133538,133540],{"class":103,"line":1304},[101,133535,132338],{"class":160},[101,133537,51426],{"class":111},[101,133539,54753],{"class":160},[101,133541,1277],{"class":111},[101,133543,133544],{"class":103,"line":1316},[101,133545,1552],{"class":111},[10,133547,133548],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[72,133550,133552],{"id":133551},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1449,133554],{"style":126388,"src":133555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[10,133557,133558],{},"✨ 黄金口诀：",[10,133560,133561],{},"\"TOP正下负上，LEFT正右负左\"",[10,133563,133564],{},"\"RIGHT正左负右，BOTTOM正上负下",[10,133566,133567],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[10,133569,133570],{},"✨ 简单记：",[10,133572,133573],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5114,133575,133576],{},"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":20,"searchDepth":21,"depth":21,"links":133578},[133579],{"id":132106,"depth":21,"text":132107,"children":133580},[133581,133582,133583,133584],{"id":132110,"depth":1166,"text":132111},{"id":132125,"depth":1166,"text":132126},{"id":132293,"depth":1166,"text":132294},{"id":133551,"depth":1166,"text":133552},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132098,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133591,"title":133592,"body":133593,"description":23365,"extension":24,"meta":135016,"navigation":27,"path":135017,"seo":135018,"stem":135019,"__hash__":135020},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133594,"toc":134995},[133595,133598,133602,133610,133614,133619,133627,133639,133643,133648,133656,133667,133671,133676,133717,133725,133729,133732,133735,133738,133832,133835,133929,133932,134026,134029,134032,134067,134070,134073,134103,134106,134109,134112,134115,134118,134121,134124,134194,134197,134201,134205,134246,134250,134256,134259,134262,134266,134269,134272,134275,134356,134359,134362,134366,134370,134373,134376,134379,134382,134385,134391,134400,134404,134423,134427,134437,134440,134443,134446,134449,134452,134455,134458,134461,134470,134474,134483,134486,134491,134544,134549,134715,134718,134721,134726,134729,134732,134735,134738,134743,134891,134894,134897,134902,134905,134910,134944,134947,134950,134954,134957,134964,134967,134970,134973,134976,134979,134982,134985,134989,134992],[39,133596,133592],{"id":133597},"_12-显示隐藏与图形资源",[43,133599,133601],{"id":133600},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1118,133603,133604,133607],{},[58,133605,133606],{},"目的:让一个元素在页面中消失或者显示出来",[58,133608,133609],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[72,133611,133613],{"id":133612},"_1211-display-显示","12.1.1 display 显示",[55,133615,133616],{},[58,133617,133618],{},"display 设置或检索对象是否及如何显示",[1118,133620,133621,133624],{},[58,133622,133623],{},"display: none;隐藏对象",[58,133625,133626],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[55,133628,133629,133636],{"start":21},[58,133630,133631,133632,133635],{},"特点： display 隐藏元素后， ",[261,133633,133634],{},"不再占"," 有原来的位置",[58,133637,133638],{},"在js中使用非常的广泛",[72,133640,133642],{"id":133641},"_1212-visibility可见性","12.1.2 visibility可见性",[55,133644,133645],{},[58,133646,133647],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1118,133649,133650,133653],{},[58,133651,133652],{},"visibility： visible；元素可见",[58,133654,133655],{},"visibility：hidden；元素隐藏",[55,133657,133658,133661,133664],{"start":21},[58,133659,133660],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[58,133662,133663],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[58,133665,133666],{},"隐藏后继续占有原有位置",[72,133668,133670],{"id":133669},"_1213-overflow溢出","12.1.3 overflow溢出",[1118,133672,133673],{},[58,133674,133675],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[249,133677,133678,133686],{},[252,133679,133680],{},[255,133681,133682,133684],{},[258,133683,126996],{"align":23725},[258,133685,27478],{"align":23725},[296,133687,133688,133696,133703,133710],{},[255,133689,133690,133693],{},[301,133691,133692],{"align":23725},"visible",[301,133694,133695],{"align":23725},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[255,133697,133698,133700],{},[301,133699,61703],{"align":23725},[301,133701,133702],{"align":23725},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[255,133704,133705,133707],{},[301,133706,128952],{"align":23725},[301,133708,133709],{"align":23725},"不管超出内容否，总是显示滚动条",[255,133711,133712,133714],{},[301,133713,72652],{"align":23725},[301,133715,133716],{"align":23725},"超出自动显示滚动条，不超出不显示滚动条",[1118,133718,133719,133722],{},[58,133720,133721],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[58,133723,133724],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[72,133726,133728],{"id":133727},"_1214-案例收获","12.1.4 案例收获",[1449,133730],{"style":126388,"src":133731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[10,133733,133734],{},"问题：没做出来动态效果，使用hover没实现",[10,133736,133737],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[92,133739,133740],{"className":126532,"code":131964,"language":126534,"meta":20,"style":20},[98,133741,133742,133746,133760,133764,133778,133782,133796,133800,133814,133818],{"__ignoreMap":20},[101,133743,133744],{"class":103,"line":104},[101,133745,131971],{"class":170},[101,133747,133748,133750,133752,133754,133756,133758],{"class":103,"line":21},[101,133749,131976],{"class":1950},[101,133751,79796],{"class":111},[101,133753,128892],{"class":160},[101,133755,51426],{"class":111},[101,133757,131985],{"class":160},[101,133759,129462],{"class":111},[101,133761,133762],{"class":103,"line":1166},[101,133763,131992],{"class":170},[101,133765,133766,133768,133770,133772,133774,133776],{"class":103,"line":1181},[101,133767,131997],{"class":1950},[101,133769,79796],{"class":111},[101,133771,128892],{"class":160},[101,133773,51426],{"class":111},[101,133775,54753],{"class":160},[101,133777,129462],{"class":111},[101,133779,133780],{"class":103,"line":1187},[101,133781,132012],{"class":170},[101,133783,133784,133786,133788,133790,133792,133794],{"class":103,"line":1201},[101,133785,132017],{"class":1950},[101,133787,79796],{"class":111},[101,133789,128892],{"class":160},[101,133791,51426],{"class":111},[101,133793,54820],{"class":160},[101,133795,129462],{"class":111},[101,133797,133798],{"class":103,"line":1207},[101,133799,132032],{"class":170},[101,133801,133802,133804,133806,133808,133810,133812],{"class":103,"line":1298},[101,133803,132037],{"class":1950},[101,133805,79796],{"class":111},[101,133807,128892],{"class":160},[101,133809,51426],{"class":111},[101,133811,86222],{"class":160},[101,133813,129462],{"class":111},[101,133815,133816],{"class":103,"line":1304},[101,133817,132052],{"class":170},[101,133819,133820,133822,133824,133826,133828,133830],{"class":103,"line":1316},[101,133821,132057],{"class":1950},[101,133823,79796],{"class":111},[101,133825,128892],{"class":160},[101,133827,51426],{"class":111},[101,133829,132066],{"class":160},[101,133831,129462],{"class":111},[10,133833,133834],{},"完整代码：",[92,133836,133837],{"className":126532,"code":131964,"language":126534,"meta":20,"style":20},[98,133838,133839,133843,133857,133861,133875,133879,133893,133897,133911,133915],{"__ignoreMap":20},[101,133840,133841],{"class":103,"line":104},[101,133842,131971],{"class":170},[101,133844,133845,133847,133849,133851,133853,133855],{"class":103,"line":21},[101,133846,131976],{"class":1950},[101,133848,79796],{"class":111},[101,133850,128892],{"class":160},[101,133852,51426],{"class":111},[101,133854,131985],{"class":160},[101,133856,129462],{"class":111},[101,133858,133859],{"class":103,"line":1166},[101,133860,131992],{"class":170},[101,133862,133863,133865,133867,133869,133871,133873],{"class":103,"line":1181},[101,133864,131997],{"class":1950},[101,133866,79796],{"class":111},[101,133868,128892],{"class":160},[101,133870,51426],{"class":111},[101,133872,54753],{"class":160},[101,133874,129462],{"class":111},[101,133876,133877],{"class":103,"line":1187},[101,133878,132012],{"class":170},[101,133880,133881,133883,133885,133887,133889,133891],{"class":103,"line":1201},[101,133882,132017],{"class":1950},[101,133884,79796],{"class":111},[101,133886,128892],{"class":160},[101,133888,51426],{"class":111},[101,133890,54820],{"class":160},[101,133892,129462],{"class":111},[101,133894,133895],{"class":103,"line":1207},[101,133896,132032],{"class":170},[101,133898,133899,133901,133903,133905,133907,133909],{"class":103,"line":1298},[101,133900,132037],{"class":1950},[101,133902,79796],{"class":111},[101,133904,128892],{"class":160},[101,133906,51426],{"class":111},[101,133908,86222],{"class":160},[101,133910,129462],{"class":111},[101,133912,133913],{"class":103,"line":1304},[101,133914,132052],{"class":170},[101,133916,133917,133919,133921,133923,133925,133927],{"class":103,"line":1316},[101,133918,132057],{"class":1950},[101,133920,79796],{"class":111},[101,133922,128892],{"class":160},[101,133924,51426],{"class":111},[101,133926,132066],{"class":160},[101,133928,129462],{"class":111},[10,133930,133931],{},"分布思路重点详解：",[92,133933,133934],{"className":126532,"code":131964,"language":126534,"meta":20,"style":20},[98,133935,133936,133940,133954,133958,133972,133976,133990,133994,134008,134012],{"__ignoreMap":20},[101,133937,133938],{"class":103,"line":104},[101,133939,131971],{"class":170},[101,133941,133942,133944,133946,133948,133950,133952],{"class":103,"line":21},[101,133943,131976],{"class":1950},[101,133945,79796],{"class":111},[101,133947,128892],{"class":160},[101,133949,51426],{"class":111},[101,133951,131985],{"class":160},[101,133953,129462],{"class":111},[101,133955,133956],{"class":103,"line":1166},[101,133957,131992],{"class":170},[101,133959,133960,133962,133964,133966,133968,133970],{"class":103,"line":1181},[101,133961,131997],{"class":1950},[101,133963,79796],{"class":111},[101,133965,128892],{"class":160},[101,133967,51426],{"class":111},[101,133969,54753],{"class":160},[101,133971,129462],{"class":111},[101,133973,133974],{"class":103,"line":1187},[101,133975,132012],{"class":170},[101,133977,133978,133980,133982,133984,133986,133988],{"class":103,"line":1201},[101,133979,132017],{"class":1950},[101,133981,79796],{"class":111},[101,133983,128892],{"class":160},[101,133985,51426],{"class":111},[101,133987,54820],{"class":160},[101,133989,129462],{"class":111},[101,133991,133992],{"class":103,"line":1207},[101,133993,132032],{"class":170},[101,133995,133996,133998,134000,134002,134004,134006],{"class":103,"line":1298},[101,133997,132037],{"class":1950},[101,133999,79796],{"class":111},[101,134001,128892],{"class":160},[101,134003,51426],{"class":111},[101,134005,86222],{"class":160},[101,134007,129462],{"class":111},[101,134009,134010],{"class":103,"line":1304},[101,134011,132052],{"class":170},[101,134013,134014,134016,134018,134020,134022,134024],{"class":103,"line":1316},[101,134015,132057],{"class":1950},[101,134017,79796],{"class":111},[101,134019,128892],{"class":160},[101,134021,51426],{"class":111},[101,134023,132066],{"class":160},[101,134025,129462],{"class":111},[1449,134027],{"style":126388,"src":134028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[10,134030,134031],{},"图片太大，盒子太小，此时需要修改图片的大小",[92,134033,134035],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[98,134036,134037],{"__ignoreMap":20},[101,134038,134039,134041,134043,134045,134047,134050,134052,134054,134057,134060,134062,134065],{"class":103,"line":104},[101,134040,1021],{"class":111},[101,134042,1449],{"class":51289},[101,134044,55228],{"class":1950},[101,134046,157],{"class":111},[101,134048,134049],{"class":216},"\"images\u002Fpic.jpg\"",[101,134051,55236],{"class":1950},[101,134053,157],{"class":111},[101,134055,134056],{"class":216},"\"描述文字\"",[101,134058,134059],{"class":1950}," title",[101,134061,157],{"class":111},[101,134063,134064],{"class":216},"\"悬停提示\"",[101,134066,51296],{"class":111},[1449,134068],{"style":126388,"src":134069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[10,134071,134072],{},"制造遮罩层",[92,134074,134075],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,134076,134077],{"__ignoreMap":20},[101,134078,134079,134081,134083,134085,134087,134089,134091,134093,134095,134097,134099,134101],{"class":103,"line":104},[101,134080,1021],{"class":111},[101,134082,1449],{"class":51289},[101,134084,55228],{"class":1950},[101,134086,157],{"class":111},[101,134088,134049],{"class":216},[101,134090,55236],{"class":1950},[101,134092,157],{"class":111},[101,134094,134056],{"class":216},[101,134096,134059],{"class":1950},[101,134098,157],{"class":111},[101,134100,134064],{"class":216},[101,134102,51296],{"class":111},[10,134104,134105],{},"此时是这样的为标准流",[1449,134107],{"style":126388,"src":134108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[10,134110,134111],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[10,134113,134114],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[10,134116,134117],{},"让他在中间，用center(background-position)",[10,134119,134120],{},"将需要变的尽可能放到一个盒子中",[10,134122,134123],{},"放大盒子上内部盒子发生变化",[92,134125,134127],{"className":126532,"code":134126,"language":126534,"meta":20,"style":20},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[98,134128,134129,134135,134145,134149,134156,134166,134178,134190],{"__ignoreMap":20},[101,134130,134131,134133],{"class":103,"line":104},[101,134132,127599],{"class":1950},[101,134134,15560],{"class":111},[101,134136,134137,134139,134141,134143],{"class":103,"line":21},[101,134138,132338],{"class":160},[101,134140,51426],{"class":111},[101,134142,54753],{"class":160},[101,134144,1277],{"class":111},[101,134146,134147],{"class":103,"line":1166},[101,134148,1552],{"class":111},[101,134150,134151,134154],{"class":103,"line":1181},[101,134152,134153],{"class":1950},".child",[101,134155,15560],{"class":111},[101,134157,134158,134160,134162,134164],{"class":103,"line":1187},[101,134159,132338],{"class":160},[101,134161,51426],{"class":111},[101,134163,54820],{"class":160},[101,134165,1277],{"class":111},[101,134167,134168,134170,134172,134174,134176],{"class":103,"line":1201},[101,134169,132352],{"class":160},[101,134171,51426],{"class":111},[101,134173,767],{"class":160},[101,134175,439],{"class":107},[101,134177,1277],{"class":111},[101,134179,134180,134182,134184,134186,134188],{"class":103,"line":1207},[101,134181,132369],{"class":160},[101,134183,51426],{"class":111},[101,134185,767],{"class":160},[101,134187,439],{"class":107},[101,134189,1277],{"class":111},[101,134191,134192],{"class":103,"line":1298},[101,134193,1552],{"class":111},[10,134195,134196],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[43,134198,134200],{"id":134199},"_122-精灵图","12.2 精灵图",[72,134202,134204],{"id":134203},"_1221-理解","12.2.1 理解",[55,134206,134207,134225],{},[58,134208,134209,134210,132438,134213,134216,134217,134220,134221,134224],{},"目的： ",[261,134211,134212],{},"为了有效地减少服务器接收和发送请求的次数",[261,134214,134215],{},"提高"," 页面的 ",[261,134218,134219],{},"加载速度"," ，出现了 ",[261,134222,134223],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[58,134226,134227,134228,134230,134231,134233,134234,134236,134237,134239,134240,134242,134243,134245],{},"使用精灵图核心：",[53705,134229],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53705,134232],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53705,134235],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53705,134238],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53705,134241],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53705,134244],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[72,134247,134249],{"id":134248},"_1222-扒图","12.2.2 扒图",[92,134251,134254],{"className":134252,"code":134253,"language":5175},[5173],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[98,134255,134253],{"__ignoreMap":20},[1449,134257],{"style":126388,"src":134258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1449,134260],{"style":126388,"src":134261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[72,134263,134265],{"id":134264},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1449,134267],{"style":126388,"src":134268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[10,134270,134271],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1449,134273],{"style":126388,"src":134274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[92,134276,134278],{"className":126532,"code":134277,"language":126534,"meta":20,"style":20},"\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",[98,134279,134280,134285,134292,134304,134316,134335,134352],{"__ignoreMap":20},[101,134281,134282],{"class":103,"line":104},[101,134283,134284],{"class":170},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[101,134286,134287,134290],{"class":103,"line":21},[101,134288,134289],{"class":1950},".icon",[101,134291,15560],{"class":111},[101,134293,134294,134296,134298,134300,134302],{"class":103,"line":1166},[101,134295,70557],{"class":160},[101,134297,51426],{"class":111},[101,134299,811],{"class":160},[101,134301,51481],{"class":107},[101,134303,1277],{"class":111},[101,134305,134306,134308,134310,134312,134314],{"class":103,"line":1181},[101,134307,70777],{"class":160},[101,134309,51426],{"class":111},[101,134311,811],{"class":160},[101,134313,51481],{"class":107},[101,134315,1277],{"class":111},[101,134317,134318,134320,134322,134324,134326,134329,134331,134333],{"class":103,"line":1187},[101,134319,70600],{"class":160},[101,134321,51426],{"class":111},[101,134323,61715],{"class":160},[101,134325,112],{"class":111},[101,134327,134328],{"class":5204},"sprites.png",[101,134330,13702],{"class":111},[101,134332,61725],{"class":160},[101,134334,1277],{"class":111},[101,134336,134337,134339,134341,134343,134345,134348,134350],{"class":103,"line":1201},[101,134338,128792],{"class":160},[101,134340,51426],{"class":111},[101,134342,51752],{"class":160},[101,134344,51481],{"class":107},[101,134346,134347],{"class":160}," -20",[101,134349,51481],{"class":107},[101,134351,1277],{"class":111},[101,134353,134354],{"class":103,"line":1207},[101,134355,1552],{"class":111},[1449,134357],{"style":126388,"src":134358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[10,134360,134361],{},"在前端中坐标轴的正方向是右和下",[43,134363,134365],{"id":134364},"_123-字体图标","12.3 字体图标",[72,134367,134369],{"id":134368},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[10,134371,134372],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[10,134374,134375],{},"精灵图是有诸多优点的，但是缺点很明显。",[10,134377,134378],{},"1.图片文件还是比较大的。",[10,134380,134381],{},"2.图片本身放大和缩小会失真。",[10,134383,134384],{},"3.一旦图片制作完毕想要更换非常复杂。",[10,134386,134387,134388,25729],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[261,134389,134390],{},"字体图标 iconfont",[10,134392,134393,134396,134397,28374],{},[261,134394,134395],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[261,134398,134399],{},"展示的是图标，本质属于字体",[72,134401,134403],{"id":134402},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1118,134405,134406,134411,134414,134417,134420],{},[58,134407,134408,134410],{},[261,134409,25865],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[58,134412,134413],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[58,134415,134416],{},"兼容性：几乎支持所有的浏览器，请放心使用",[58,134418,134419],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[58,134421,134422],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[72,134424,134426],{"id":134425},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1118,134428,134429],{},[58,134430,134431,134432],{},"icomoon字体库：",[14,134433,134436],{"href":134434,"rel":134435},"http:\u002F\u002Ficomoon.io\u002F",[18],"http:\u002F\u002Ficomoon.io",[10,134438,134439],{},"进去之后点icomoon app",[1449,134441],{"style":126388,"src":134442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[10,134444,134445],{},"可以对其编辑：",[1449,134447],{"style":126388,"src":134448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[10,134450,134451],{},"生成字体：",[1449,134453],{"style":126388,"src":134454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[10,134456,134457],{},"下载：",[1449,134459],{"style":126388,"src":134460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1118,134462,134463],{},[58,134464,134465,134466],{},"阿里iconfont字体库： ",[14,134467,134468],{"href":134468,"rel":134469},"http:\u002F\u002Fwww.iconfont.cn\u002F",[18],[72,134471,134473],{"id":134472},"_1234-字体图标的引入","12.3.4 字体图标的引入",[55,134475,134476],{},[58,134477,134478,134479,134482],{},"把下载包里面的 ",[261,134480,134481],{},"fonts"," 文件夹放入页面根目录下",[1449,134484],{"style":126388,"src":134485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[55,134487,134488],{"start":21},[58,134489,134490],{},"字体文件格式",[249,134492,134493,134502],{},[252,134494,134495],{},[255,134496,134497,134500],{},[258,134498,134499],{"align":23725},"格式",[258,134501,23729],{"align":23725},[296,134503,134504,134514,134524,134534],{},[255,134505,134506,134511],{},[301,134507,134508],{"align":23725},[261,134509,134510],{},".ttf",[301,134512,134513],{"align":23725},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[255,134515,134516,134521],{},[301,134517,134518],{"align":23725},[261,134519,134520],{},".woff",[301,134522,134523],{"align":23725},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[255,134525,134526,134531],{},[301,134527,134528],{"align":23725},[261,134529,134530],{},".eot",[301,134532,134533],{"align":23725},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[255,134535,134536,134541],{},[301,134537,134538],{"align":23725},[261,134539,134540],{},"svg",[301,134542,134543],{"align":23725},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[55,134545,134546],{"start":1166},[58,134547,134548],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[92,134550,134552],{"className":126532,"code":134551,"language":126534,"meta":20,"style":20},"\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",[98,134553,134554,134559,134566,134578,134594,134619,134640,134660,134680,134684,134690,134700,134711],{"__ignoreMap":20},[101,134555,134556],{"class":103,"line":104},[101,134557,134558],{"class":170},"\u002F* 引入字体图标 *\u002F\n",[101,134560,134561,134564],{"class":103,"line":21},[101,134562,134563],{"class":107},"@font-face",[101,134565,15560],{"class":111},[101,134567,134568,134571,134573,134576],{"class":103,"line":1166},[101,134569,134570],{"class":160},"  font-family",[101,134572,51426],{"class":111},[101,134574,134575],{"class":216},"'icomoon'",[101,134577,1277],{"class":111},[101,134579,134580,134583,134585,134587,134589,134592],{"class":103,"line":1181},[101,134581,134582],{"class":160},"  src",[101,134584,51426],{"class":111},[101,134586,61715],{"class":160},[101,134588,112],{"class":111},[101,134590,134591],{"class":216},"'fonts\u002Ficomoon.eot'",[101,134593,2706],{"class":111},[101,134595,134596,134598,134600,134602,134604,134607,134609,134612,134614,134617],{"class":103,"line":1187},[101,134597,134582],{"class":160},[101,134599,51426],{"class":111},[101,134601,61715],{"class":160},[101,134603,112],{"class":111},[101,134605,134606],{"class":216},"'fonts\u002Ficomoon.eot?#iefix'",[101,134608,13702],{"class":111},[101,134610,134611],{"class":160},"format",[101,134613,112],{"class":111},[101,134615,134616],{"class":216},"'embedded-opentype'",[101,134618,38036],{"class":111},[101,134620,134621,134624,134626,134629,134631,134633,134635,134638],{"class":103,"line":1201},[101,134622,134623],{"class":160},"       url",[101,134625,112],{"class":111},[101,134627,134628],{"class":216},"'fonts\u002Ficomoon.woff'",[101,134630,13702],{"class":111},[101,134632,134611],{"class":160},[101,134634,112],{"class":111},[101,134636,134637],{"class":216},"'woff'",[101,134639,38036],{"class":111},[101,134641,134642,134644,134646,134649,134651,134653,134655,134658],{"class":103,"line":1207},[101,134643,134623],{"class":160},[101,134645,112],{"class":111},[101,134647,134648],{"class":216},"'fonts\u002Ficomoon.ttf'",[101,134650,13702],{"class":111},[101,134652,134611],{"class":160},[101,134654,112],{"class":111},[101,134656,134657],{"class":216},"'truetype'",[101,134659,38036],{"class":111},[101,134661,134662,134664,134666,134669,134671,134673,134675,134678],{"class":103,"line":1298},[101,134663,134623],{"class":160},[101,134665,112],{"class":111},[101,134667,134668],{"class":216},"'fonts\u002Ficomoon.svg#icomoon'",[101,134670,13702],{"class":111},[101,134672,134611],{"class":160},[101,134674,112],{"class":111},[101,134676,134677],{"class":216},"'svg'",[101,134679,2706],{"class":111},[101,134681,134682],{"class":103,"line":1304},[101,134683,1552],{"class":111},[101,134685,134686,134688],{"class":103,"line":1316},[101,134687,134289],{"class":1950},[101,134689,15560],{"class":111},[101,134691,134692,134694,134696,134698],{"class":103,"line":1599},[101,134693,134570],{"class":160},[101,134695,51426],{"class":111},[101,134697,134575],{"class":216},[101,134699,1277],{"class":111},[101,134701,134702,134705,134707,134709],{"class":103,"line":1604},[101,134703,134704],{"class":160},"  font-style",[101,134706,51426],{"class":111},[101,134708,63830],{"class":160},[101,134710,1277],{"class":111},[101,134712,134713],{"class":103,"line":1610},[101,134714,1552],{"class":111},[10,134716,134717],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1449,134719],{"style":126388,"src":134720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[55,134722,134723],{"start":1181},[58,134724,134725],{},"添加字体",[1449,134727],{"style":126388,"src":134728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[10,134730,134731],{},"复制：",[1449,134733],{"style":126388,"src":134734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[10,134736,134737],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[55,134739,134740],{"start":1187},[58,134741,134742],{},"代码展示：",[92,134744,134745],{"className":126532,"code":134551,"language":126534,"meta":20,"style":20},[98,134746,134747,134751,134757,134767,134781,134803,134821,134839,134857,134861,134867,134877,134887],{"__ignoreMap":20},[101,134748,134749],{"class":103,"line":104},[101,134750,134558],{"class":170},[101,134752,134753,134755],{"class":103,"line":21},[101,134754,134563],{"class":107},[101,134756,15560],{"class":111},[101,134758,134759,134761,134763,134765],{"class":103,"line":1166},[101,134760,134570],{"class":160},[101,134762,51426],{"class":111},[101,134764,134575],{"class":216},[101,134766,1277],{"class":111},[101,134768,134769,134771,134773,134775,134777,134779],{"class":103,"line":1181},[101,134770,134582],{"class":160},[101,134772,51426],{"class":111},[101,134774,61715],{"class":160},[101,134776,112],{"class":111},[101,134778,134591],{"class":216},[101,134780,2706],{"class":111},[101,134782,134783,134785,134787,134789,134791,134793,134795,134797,134799,134801],{"class":103,"line":1187},[101,134784,134582],{"class":160},[101,134786,51426],{"class":111},[101,134788,61715],{"class":160},[101,134790,112],{"class":111},[101,134792,134606],{"class":216},[101,134794,13702],{"class":111},[101,134796,134611],{"class":160},[101,134798,112],{"class":111},[101,134800,134616],{"class":216},[101,134802,38036],{"class":111},[101,134804,134805,134807,134809,134811,134813,134815,134817,134819],{"class":103,"line":1201},[101,134806,134623],{"class":160},[101,134808,112],{"class":111},[101,134810,134628],{"class":216},[101,134812,13702],{"class":111},[101,134814,134611],{"class":160},[101,134816,112],{"class":111},[101,134818,134637],{"class":216},[101,134820,38036],{"class":111},[101,134822,134823,134825,134827,134829,134831,134833,134835,134837],{"class":103,"line":1207},[101,134824,134623],{"class":160},[101,134826,112],{"class":111},[101,134828,134648],{"class":216},[101,134830,13702],{"class":111},[101,134832,134611],{"class":160},[101,134834,112],{"class":111},[101,134836,134657],{"class":216},[101,134838,38036],{"class":111},[101,134840,134841,134843,134845,134847,134849,134851,134853,134855],{"class":103,"line":1298},[101,134842,134623],{"class":160},[101,134844,112],{"class":111},[101,134846,134668],{"class":216},[101,134848,13702],{"class":111},[101,134850,134611],{"class":160},[101,134852,112],{"class":111},[101,134854,134677],{"class":216},[101,134856,2706],{"class":111},[101,134858,134859],{"class":103,"line":1304},[101,134860,1552],{"class":111},[101,134862,134863,134865],{"class":103,"line":1316},[101,134864,134289],{"class":1950},[101,134866,15560],{"class":111},[101,134868,134869,134871,134873,134875],{"class":103,"line":1599},[101,134870,134570],{"class":160},[101,134872,51426],{"class":111},[101,134874,134575],{"class":216},[101,134876,1277],{"class":111},[101,134878,134879,134881,134883,134885],{"class":103,"line":1604},[101,134880,134704],{"class":160},[101,134882,51426],{"class":111},[101,134884,63830],{"class":160},[101,134886,1277],{"class":111},[101,134888,134889],{"class":103,"line":1610},[101,134890,1552],{"class":111},[1449,134892],{"style":126388,"src":134893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[10,134895,134896],{},"更加细节展示：",[55,134898,134899],{},[58,134900,134901],{},"html 标签内添加小图标",[1449,134903],{"style":126388,"src":134904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[55,134906,134907],{"start":21},[58,134908,134909],{},"给标签定义字体",[92,134911,134912],{"className":127279,"code":130636,"language":127281,"meta":20,"style":20},[98,134913,134914,134918,134932,134936],{"__ignoreMap":20},[101,134915,134916],{"class":103,"line":104},[101,134917,130643],{"class":170},[101,134919,134920,134922,134924,134926,134928,134930],{"class":103,"line":21},[101,134921,1021],{"class":111},[101,134923,51600],{"class":51289},[101,134925,53475],{"class":1950},[101,134927,157],{"class":111},[101,134929,130656],{"class":216},[101,134931,51296],{"class":111},[101,134933,134934],{"class":103,"line":1166},[101,134935,130663],{"class":111},[101,134937,134938,134940,134942],{"class":103,"line":1181},[101,134939,51774],{"class":111},[101,134941,51600],{"class":51289},[101,134943,51296],{"class":111},[10,134945,134946],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1449,134948],{"style":126388,"src":134949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[72,134951,134953],{"id":134952},"_1235-字体图标的追加","12.3.5 字体图标的追加",[10,134955,134956],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[10,134958,134959,134960,134963],{},"把压缩包里面的 ",[261,134961,134962],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[10,134965,134966],{},"打开网站，点下方：",[1449,134968],{"style":126388,"src":134969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1449,134971],{"style":126388,"src":134972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1449,134974],{"style":126388,"src":134975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[10,134977,134978],{},"点yes重新加载",[10,134980,134981],{},"然后重复之前的操作就可以实现了",[10,134983,134984],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[72,134986,134988],{"id":134987},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1449,134990],{"style":126388,"src":134991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5114,134993,134994],{},"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":20,"searchDepth":21,"depth":21,"links":134996},[134997,135003,135008],{"id":133600,"depth":21,"text":133601,"children":134998},[134999,135000,135001,135002],{"id":133612,"depth":1166,"text":133613},{"id":133641,"depth":1166,"text":133642},{"id":133669,"depth":1166,"text":133670},{"id":133727,"depth":1166,"text":133728},{"id":134199,"depth":21,"text":134200,"children":135004},[135005,135006,135007],{"id":134203,"depth":1166,"text":134204},{"id":134248,"depth":1166,"text":134249},{"id":134264,"depth":1166,"text":134265},{"id":134364,"depth":21,"text":134365,"children":135009},[135010,135011,135012,135013,135014,135015],{"id":134368,"depth":1166,"text":134369},{"id":134402,"depth":1166,"text":134403},{"id":134425,"depth":1166,"text":134426},{"id":134472,"depth":1166,"text":134473},{"id":134952,"depth":1166,"text":134953},{"id":134987,"depth":1166,"text":134988},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133592,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135022,"title":135023,"body":135024,"description":23365,"extension":24,"meta":136251,"navigation":27,"path":136252,"seo":136253,"stem":136254,"__hash__":136255},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135025,"toc":136232},[135026,135029,135033,135036,135050,135118,135148,135151,135155,135159,135261,135308,135312,135315,135318,135352,135355,135358,135361,135364,135367,135370,135373,135375,135378,135381,135384,135387,135390,135393,135396,135424,135427,135431,135434,135441,135444,135447,135473,135476,135480,135483,135486,135493,135497,135500,135502,135534,135537,135540,135552,135558,135561,135564,135567,135569,135573,135576,135579,135582,135627,135631,135633,135636,135643,135685,135688,135692,135697,135711,135715,135718,135721,135724,135727,135730,135764,135767,135770,135824,135827,135830,135833,135836,135888,135891,135894,135943,135947,135949,135952,135955,135958,135961,135964,136022,136025,136031,136034,136037,136069,136072,136076,136080,136083,136115,136119,136122,136166,136170,136173,136176,136179,136182,136185,136188,136191,136193,136196,136198,136201,136204,136207,136210,136215,136218,136220,136223,136226,136229],[39,135027,135023],{"id":135028},"_13-界面样式与布局技巧",[43,135030,135032],{"id":135031},"_131-css三角","13.1 css三角",[10,135034,135035],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1118,135037,135038,135041,135044,135047],{},[58,135039,135040],{},"用css 边框可以模拟三角效果",[58,135042,135043],{},"宽度高度为0",[58,135045,135046],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[58,135048,135049],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[92,135051,135053],{"className":126532,"code":135052,"language":126534,"meta":20,"style":20},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[98,135054,135055,135060,135067,135077,135087,135103,135114],{"__ignoreMap":20},[101,135056,135057],{"class":103,"line":104},[101,135058,135059],{"class":170},"\u002F* CSS 实现三角形 *\u002F\n",[101,135061,135062,135065],{"class":103,"line":21},[101,135063,135064],{"class":1950},".triangle",[101,135066,15560],{"class":111},[101,135068,135069,135071,135073,135075],{"class":103,"line":1166},[101,135070,70557],{"class":160},[101,135072,51426],{"class":111},[101,135074,303],{"class":160},[101,135076,1277],{"class":111},[101,135078,135079,135081,135083,135085],{"class":103,"line":1181},[101,135080,70777],{"class":160},[101,135082,51426],{"class":111},[101,135084,303],{"class":160},[101,135086,1277],{"class":111},[101,135088,135089,135091,135093,135095,135097,135099,135101],{"class":103,"line":1187},[101,135090,70885],{"class":160},[101,135092,51426],{"class":111},[101,135094,557],{"class":160},[101,135096,51481],{"class":107},[101,135098,51510],{"class":160},[101,135100,63980],{"class":160},[101,135102,1277],{"class":111},[101,135104,135105,135108,135110,135112],{"class":103,"line":1201},[101,135106,135107],{"class":160},"  border-bottom-color",[101,135109,51426],{"class":111},[101,135111,62358],{"class":160},[101,135113,1277],{"class":111},[101,135115,135116],{"class":103,"line":1207},[101,135117,1552],{"class":111},[92,135119,135120],{"className":126532,"code":130689,"language":126534,"meta":20,"style":20},[98,135121,135122,135128,135144],{"__ignoreMap":20},[101,135123,135124,135126],{"class":103,"line":104},[101,135125,51600],{"class":51289},[101,135127,15560],{"class":111},[101,135129,135130,135132,135134,135136,135138,135140,135142],{"class":103,"line":21},[101,135131,70885],{"class":160},[101,135133,51426],{"class":111},[101,135135,329],{"class":160},[101,135137,51481],{"class":107},[101,135139,51510],{"class":160},[101,135141,129924],{"class":160},[101,135143,1277],{"class":111},[101,135145,135146],{"class":103,"line":1166},[101,135147,1552],{"class":111},[1449,135149],{"style":126388,"src":135150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[43,135152,135154],{"id":135153},"_132-css用户界面样式","13.2 css用户界面样式",[72,135156,135158],{"id":135157},"_1321-鼠标样式","13.2.1 鼠标样式",[92,135160,135162],{"className":126532,"code":135161,"language":126534,"meta":20,"style":20},"\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",[98,135163,135164,135169,135188,135206,135225,135242],{"__ignoreMap":20},[101,135165,135166],{"class":103,"line":104},[101,135167,135168],{"class":170},"\u002F* 鼠标样式 *\u002F\n",[101,135170,135171,135173,135175,135178,135180,135182,135185],{"class":103,"line":21},[101,135172,51600],{"class":51289},[101,135174,79796],{"class":111},[101,135176,135177],{"class":160},"cursor",[101,135179,51426],{"class":111},[101,135181,62019],{"class":160},[101,135183,135184],{"class":111},"; }   ",[101,135186,135187],{"class":170},"\u002F* 手型 *\u002F\n",[101,135189,135190,135192,135194,135196,135198,135201,135203],{"class":103,"line":1166},[101,135191,51600],{"class":51289},[101,135193,79796],{"class":111},[101,135195,135177],{"class":160},[101,135197,51426],{"class":111},[101,135199,135200],{"class":160},"default",[101,135202,135184],{"class":111},[101,135204,135205],{"class":170},"\u002F* 默认 *\u002F\n",[101,135207,135208,135210,135212,135214,135216,135219,135222],{"class":103,"line":1181},[101,135209,51600],{"class":51289},[101,135211,79796],{"class":111},[101,135213,135177],{"class":160},[101,135215,51426],{"class":111},[101,135217,135218],{"class":160},"move",[101,135220,135221],{"class":111},"; }      ",[101,135223,135224],{"class":170},"\u002F* 移动 *\u002F\n",[101,135226,135227,135229,135231,135233,135235,135237,135239],{"class":103,"line":1187},[101,135228,51600],{"class":51289},[101,135230,79796],{"class":111},[101,135232,135177],{"class":160},[101,135234,51426],{"class":111},[101,135236,5175],{"class":160},[101,135238,135221],{"class":111},[101,135240,135241],{"class":170},"\u002F* 文本 *\u002F\n",[101,135243,135244,135246,135248,135250,135252,135255,135258],{"class":103,"line":1201},[101,135245,51600],{"class":51289},[101,135247,79796],{"class":111},[101,135249,135177],{"class":160},[101,135251,51426],{"class":111},[101,135253,135254],{"class":160},"not-allowed",[101,135256,135257],{"class":111},"; } ",[101,135259,135260],{"class":170},"\u002F* 禁止 *\u002F\n",[249,135262,135263,135271],{},[252,135264,135265],{},[255,135266,135267,135269],{},[258,135268,126996],{"align":23725},[258,135270,27478],{"align":23725},[296,135272,135273,135280,135287,135294,135301],{},[255,135274,135275,135277],{},[301,135276,135200],{"align":23725},[301,135278,135279],{"align":23725},"小白 默认",[255,135281,135282,135284],{},[301,135283,62019],{"align":23725},[301,135285,135286],{"align":23725},"小手",[255,135288,135289,135291],{},[301,135290,135218],{"align":23725},[301,135292,135293],{"align":23725},"移动",[255,135295,135296,135298],{},[301,135297,5175],{"align":23725},[301,135299,135300],{"align":23725},"文本",[255,135302,135303,135305],{},[301,135304,135254],{"align":23725},[301,135306,135307],{"align":23725},"禁止",[72,135309,135311],{"id":135310},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[10,135313,135314],{},"去除表单轮廓线",[10,135316,135317],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[92,135319,135320],{"className":126532,"code":129896,"language":126534,"meta":20,"style":20},[98,135321,135322,135326,135332,135348],{"__ignoreMap":20},[101,135323,135324],{"class":103,"line":104},[101,135325,129903],{"class":170},[101,135327,135328,135330],{"class":103,"line":21},[101,135329,51600],{"class":51289},[101,135331,15560],{"class":111},[101,135333,135334,135336,135338,135340,135342,135344,135346],{"class":103,"line":1166},[101,135335,70885],{"class":160},[101,135337,51426],{"class":111},[101,135339,329],{"class":160},[101,135341,51481],{"class":107},[101,135343,51510],{"class":160},[101,135345,129924],{"class":160},[101,135347,1277],{"class":111},[101,135349,135350],{"class":103,"line":1181},[101,135351,1552],{"class":111},[10,135353,135354],{},"文本域：",[1449,135356],{"style":126388,"src":135357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[10,135359,135360],{},"此时会有一个空白区域",[1449,135362],{"style":126388,"src":135363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[10,135365,135366],{},"写在同一行就不会出现这个问题",[1449,135368],{"style":126388,"src":135369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[10,135371,135372],{},"文本域是行内块元素，一定记住！！！",[10,135374,98213],{},[1449,135376],{"style":126388,"src":135377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[10,135379,135380],{},"文本域尽量放在一行",[10,135382,135383],{},"知识回顾：cols是列，rols是行",[1449,135385],{"style":126388,"src":135386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[10,135388,135389],{},"它可以进行拖动，显然这是我们不愿意看到的",[1449,135391],{"style":126388,"src":135392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[10,135394,135395],{},"使用resize进行解决",[92,135397,135399],{"className":126532,"code":135398,"language":126534,"meta":20,"style":20},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[98,135400,135401,135407,135420],{"__ignoreMap":20},[101,135402,135403,135405],{"class":103,"line":104},[101,135404,53810],{"class":51289},[101,135406,15560],{"class":111},[101,135408,135409,135411,135413,135415,135417],{"class":103,"line":21},[101,135410,70787],{"class":160},[101,135412,51426],{"class":111},[101,135414,54726],{"class":160},[101,135416,130395],{"class":111},[101,135418,135419],{"class":170},"\u002F* 取消表单轮廓线 *\u002F\n",[101,135421,135422],{"class":103,"line":1166},[101,135423,1552],{"class":111},[10,135425,135426],{},"此时就无法通过右下方实现拖动了",[72,135428,135430],{"id":135429},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[10,135432,135433],{},"实现一个盒子中的文字和图片对齐",[10,135435,135436,135437,135440],{},"用于设置一个元素的 ",[261,135438,135439],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[10,135442,135443],{},"图片和文字默认是基线对齐",[1449,135445],{"style":126388,"src":135446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[92,135448,135449],{"className":126532,"code":135398,"language":126534,"meta":20,"style":20},[98,135450,135451,135457,135469],{"__ignoreMap":20},[101,135452,135453,135455],{"class":103,"line":104},[101,135454,53810],{"class":51289},[101,135456,15560],{"class":111},[101,135458,135459,135461,135463,135465,135467],{"class":103,"line":21},[101,135460,70787],{"class":160},[101,135462,51426],{"class":111},[101,135464,54726],{"class":160},[101,135466,130395],{"class":111},[101,135468,135419],{"class":170},[101,135470,135471],{"class":103,"line":1166},[101,135472,1552],{"class":111},[1449,135474],{"style":126388,"src":135475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21986,135477,135479],{"id":135478},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[10,135481,135482],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1449,135484],{"style":126388,"src":135485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[10,135487,135488,135489,135492],{},"此时可以给图片、表单这些行内块元素的 ",[261,135490,135491],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21986,135494,135496],{"id":135495},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[10,135498,135499],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[10,135501,14621],{},[92,135503,135505],{"className":126532,"code":135504,"language":126534,"meta":20,"style":20},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[98,135506,135507,135512,135518,135530],{"__ignoreMap":20},[101,135508,135509],{"class":103,"line":104},[101,135510,135511],{"class":170},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[101,135513,135514,135516],{"class":103,"line":21},[101,135515,1449],{"class":51289},[101,135517,15560],{"class":111},[101,135519,135520,135523,135525,135528],{"class":103,"line":1166},[101,135521,135522],{"class":160},"  vertical-align",[101,135524,51426],{"class":111},[101,135526,135527],{"class":160},"middle",[101,135529,1277],{"class":111},[101,135531,135532],{"class":103,"line":1181},[101,135533,1552],{"class":111},[1449,135535],{"style":126388,"src":135536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[10,135538,135539],{},"主要解决方法有两种：",[55,135541,135542],{},[58,135543,135544,135547,135548,135551],{},[261,135545,135546],{},"给图片"," 添加 ",[261,135549,135550],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[10,135553,135554,135555],{},"2.把图片转换为块级元素 ",[261,135556,135557],{},"display: block",[10,135559,135560],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[10,135562,135563],{},"img {",[10,135565,135566],{},"vertical-align:middle;",[10,135568,1057],{},[72,135570,135572],{"id":135571},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[10,135574,135575],{},"效果：",[1449,135577],{"style":126388,"src":135578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[10,135580,135581],{},"单行文本溢出显示省略号--必须满足三个条件：",[92,135583,135585],{"className":126532,"code":135584,"language":126534,"meta":20,"style":20},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[98,135586,135587,135592,135598,135608,135613,135623],{"__ignoreMap":20},[101,135588,135589],{"class":103,"line":104},[101,135590,135591],{"class":170},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[101,135593,135594,135596],{"class":103,"line":21},[101,135595,1449],{"class":51289},[101,135597,15560],{"class":111},[101,135599,135600,135602,135604,135606],{"class":103,"line":1166},[101,135601,135522],{"class":160},[101,135603,51426],{"class":111},[101,135605,135527],{"class":160},[101,135607,1277],{"class":111},[101,135609,135610],{"class":103,"line":1181},[101,135611,135612],{"class":170},"  \u002F* 或 *\u002F\n",[101,135614,135615,135617,135619,135621],{"class":103,"line":1187},[101,135616,128148],{"class":160},[101,135618,51426],{"class":111},[101,135620,60858],{"class":160},[101,135622,1277],{"class":111},[101,135624,135625],{"class":103,"line":1201},[101,135626,1552],{"class":111},[72,135628,135630],{"id":135629},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[10,135632,135575],{},[1449,135634],{"style":126388,"src":135635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[10,135637,135638,135639,135642],{},"多行文本溢出显示省略号， ",[261,135640,135641],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[92,135644,135645],{"className":126532,"code":135584,"language":126534,"meta":20,"style":20},[98,135646,135647,135651,135657,135667,135671,135681],{"__ignoreMap":20},[101,135648,135649],{"class":103,"line":104},[101,135650,135591],{"class":170},[101,135652,135653,135655],{"class":103,"line":21},[101,135654,1449],{"class":51289},[101,135656,15560],{"class":111},[101,135658,135659,135661,135663,135665],{"class":103,"line":1166},[101,135660,135522],{"class":160},[101,135662,51426],{"class":111},[101,135664,135527],{"class":160},[101,135666,1277],{"class":111},[101,135668,135669],{"class":103,"line":1181},[101,135670,135612],{"class":170},[101,135672,135673,135675,135677,135679],{"class":103,"line":1187},[101,135674,128148],{"class":160},[101,135676,51426],{"class":111},[101,135678,60858],{"class":160},[101,135680,1277],{"class":111},[101,135682,135683],{"class":103,"line":1201},[101,135684,1552],{"class":111},[10,135686,135687],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[43,135689,135691],{"id":135690},"_133-常见布局技巧","13.3 常见布局技巧",[10,135693,135694],{},[261,135695,135696],{},"巧妙利用一个技术更快更好的布局：",[55,135698,135699,135702,135705,135708],{},[58,135700,135701],{},"margin负值的运用",[58,135703,135704],{},"文字围绕浮动元素",[58,135706,135707],{},"行内块的巧妙运用",[58,135709,135710],{},"CSS三角强化",[72,135712,135714],{"id":135713},"_1331-margin负值的运用","13.3.1 margin负值的运用",[10,135716,135717],{},"应用场景：",[1449,135719],{"style":126388,"src":135720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1449,135722],{"style":126388,"src":135723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[10,135725,135726],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[10,135728,135729],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[92,135731,135732],{"className":126532,"code":129896,"language":126534,"meta":20,"style":20},[98,135733,135734,135738,135744,135760],{"__ignoreMap":20},[101,135735,135736],{"class":103,"line":104},[101,135737,129903],{"class":170},[101,135739,135740,135742],{"class":103,"line":21},[101,135741,51600],{"class":51289},[101,135743,15560],{"class":111},[101,135745,135746,135748,135750,135752,135754,135756,135758],{"class":103,"line":1166},[101,135747,70885],{"class":160},[101,135749,51426],{"class":111},[101,135751,329],{"class":160},[101,135753,51481],{"class":107},[101,135755,51510],{"class":160},[101,135757,129924],{"class":160},[101,135759,1277],{"class":111},[101,135761,135762],{"class":103,"line":1181},[101,135763,1552],{"class":111},[1449,135765],{"style":126388,"src":135766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[10,135768,135769],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[92,135771,135773],{"className":126532,"code":135772,"language":126534,"meta":20,"style":20},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[98,135774,135775,135780,135786,135796,135808,135820],{"__ignoreMap":20},[101,135776,135777],{"class":103,"line":104},[101,135778,135779],{"class":170},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[101,135781,135782,135784],{"class":103,"line":21},[101,135783,130380],{"class":1950},[101,135785,15560],{"class":111},[101,135787,135788,135790,135792,135794],{"class":103,"line":1166},[101,135789,132338],{"class":160},[101,135791,51426],{"class":111},[101,135793,54753],{"class":160},[101,135795,1277],{"class":111},[101,135797,135798,135800,135802,135804,135806],{"class":103,"line":1181},[101,135799,132352],{"class":160},[101,135801,51426],{"class":111},[101,135803,557],{"class":160},[101,135805,51481],{"class":107},[101,135807,1277],{"class":111},[101,135809,135810,135812,135814,135816,135818],{"class":103,"line":1187},[101,135811,132369],{"class":160},[101,135813,51426],{"class":111},[101,135815,811],{"class":160},[101,135817,51481],{"class":107},[101,135819,1277],{"class":111},[101,135821,135822],{"class":103,"line":1201},[101,135823,1552],{"class":111},[10,135825,135826],{},"加上上述代码会发现：",[1449,135828],{"style":126388,"src":135829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[10,135831,135832],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[10,135834,135835],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[92,135837,135838],{"className":126532,"code":135772,"language":126534,"meta":20,"style":20},[98,135839,135840,135844,135850,135860,135872,135884],{"__ignoreMap":20},[101,135841,135842],{"class":103,"line":104},[101,135843,135779],{"class":170},[101,135845,135846,135848],{"class":103,"line":21},[101,135847,130380],{"class":1950},[101,135849,15560],{"class":111},[101,135851,135852,135854,135856,135858],{"class":103,"line":1166},[101,135853,132338],{"class":160},[101,135855,51426],{"class":111},[101,135857,54753],{"class":160},[101,135859,1277],{"class":111},[101,135861,135862,135864,135866,135868,135870],{"class":103,"line":1181},[101,135863,132352],{"class":160},[101,135865,51426],{"class":111},[101,135867,557],{"class":160},[101,135869,51481],{"class":107},[101,135871,1277],{"class":111},[101,135873,135874,135876,135878,135880,135882],{"class":103,"line":1187},[101,135875,132369],{"class":160},[101,135877,51426],{"class":111},[101,135879,811],{"class":160},[101,135881,51481],{"class":107},[101,135883,1277],{"class":111},[101,135885,135886],{"class":103,"line":1201},[101,135887,1552],{"class":111},[10,135889,135890],{},"解决方式2：",[10,135892,135893],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[92,135895,135897],{"className":126532,"code":135896,"language":126534,"meta":20,"style":20},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[98,135898,135899,135905,135915,135927,135939],{"__ignoreMap":20},[101,135900,135901,135903],{"class":103,"line":104},[101,135902,51600],{"class":51289},[101,135904,15560],{"class":111},[101,135906,135907,135909,135911,135913],{"class":103,"line":21},[101,135908,132338],{"class":160},[101,135910,51426],{"class":111},[101,135912,54753],{"class":160},[101,135914,1277],{"class":111},[101,135916,135917,135919,135921,135923,135925],{"class":103,"line":1166},[101,135918,132352],{"class":160},[101,135920,51426],{"class":111},[101,135922,557],{"class":160},[101,135924,51481],{"class":107},[101,135926,1277],{"class":111},[101,135928,135929,135931,135933,135935,135937],{"class":103,"line":1181},[101,135930,132369],{"class":160},[101,135932,51426],{"class":111},[101,135934,811],{"class":160},[101,135936,51481],{"class":107},[101,135938,1277],{"class":111},[101,135940,135941],{"class":103,"line":1187},[101,135942,1552],{"class":111},[72,135944,135946],{"id":135945},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[10,135948,135717],{},[1449,135950],{"style":126388,"src":135951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[10,135953,135954],{},"实现结构图：",[1449,135956],{"style":126388,"src":135957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[10,135959,135960],{},"巧妙运用浮动元素不会压住文字的特性",[10,135962,135963],{},"代码显示：",[92,135965,135967],{"className":126532,"code":135966,"language":126534,"meta":20,"style":20},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[98,135968,135969,135975,135985,135989,135994,135998,136004,136018],{"__ignoreMap":20},[101,135970,135971,135973],{"class":103,"line":104},[101,135972,130380],{"class":1950},[101,135974,15560],{"class":111},[101,135976,135977,135979,135981,135983],{"class":103,"line":21},[101,135978,131012],{"class":160},[101,135980,51426],{"class":111},[101,135982,23725],{"class":160},[101,135984,1277],{"class":111},[101,135986,135987],{"class":103,"line":1166},[101,135988,1552],{"class":111},[101,135990,135991],{"class":103,"line":1181},[101,135992,135993],{"class":111},"```Css\n",[101,135995,135996],{"class":103,"line":1187},[101,135997,130375],{"class":170},[101,135999,136000,136002],{"class":103,"line":1201},[101,136001,130380],{"class":1950},[101,136003,15560],{"class":111},[101,136005,136006,136008,136010,136012,136014,136016],{"class":103,"line":1207},[101,136007,70459],{"class":160},[101,136009,51426],{"class":111},[101,136011,303],{"class":160},[101,136013,51545],{"class":160},[101,136015,130395],{"class":111},[101,136017,130398],{"class":170},[101,136019,136020],{"class":103,"line":1298},[101,136021,1552],{"class":111},[10,136023,136024],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[92,136026,136029],{"className":136027,"code":136028,"language":5175},[5173],"\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",[98,136030,136028],{"__ignoreMap":20},[1449,136032],{"style":126388,"src":136033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[10,136035,136036],{},"最终展示结果：",[92,136038,136039],{"className":126532,"code":130368,"language":126534,"meta":20,"style":20},[98,136040,136041,136045,136051,136065],{"__ignoreMap":20},[101,136042,136043],{"class":103,"line":104},[101,136044,130375],{"class":170},[101,136046,136047,136049],{"class":103,"line":21},[101,136048,130380],{"class":1950},[101,136050,15560],{"class":111},[101,136052,136053,136055,136057,136059,136061,136063],{"class":103,"line":1166},[101,136054,70459],{"class":160},[101,136056,51426],{"class":111},[101,136058,303],{"class":160},[101,136060,51545],{"class":160},[101,136062,130395],{"class":111},[101,136064,130398],{"class":170},[101,136066,136067],{"class":103,"line":1181},[101,136068,1552],{"class":111},[1449,136070],{"style":126388,"src":136071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[43,136073,136075],{"id":136074},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[72,136077,136079],{"id":136078},"_1341-原理","13.4.1 原理",[1449,136081],{"style":126388,"src":136082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[92,136084,136085],{"className":126532,"code":130368,"language":126534,"meta":20,"style":20},[98,136086,136087,136091,136097,136111],{"__ignoreMap":20},[101,136088,136089],{"class":103,"line":104},[101,136090,130375],{"class":170},[101,136092,136093,136095],{"class":103,"line":21},[101,136094,130380],{"class":1950},[101,136096,15560],{"class":111},[101,136098,136099,136101,136103,136105,136107,136109],{"class":103,"line":1166},[101,136100,70459],{"class":160},[101,136102,51426],{"class":111},[101,136104,303],{"class":160},[101,136106,51545],{"class":160},[101,136108,130395],{"class":111},[101,136110,130398],{"class":170},[101,136112,136113],{"class":103,"line":1181},[101,136114,1552],{"class":111},[72,136116,136118],{"id":136117},"_1342-实例","13.4.2 实例",[1449,136120],{"style":126388,"src":136121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[92,136123,136124],{"className":126532,"code":130998,"language":126534,"meta":20,"style":20},[98,136125,136126,136132,136142,136146,136152,136162],{"__ignoreMap":20},[101,136127,136128,136130],{"class":103,"line":104},[101,136129,131005],{"class":1950},[101,136131,15560],{"class":111},[101,136133,136134,136136,136138,136140],{"class":103,"line":21},[101,136135,131012],{"class":160},[101,136137,51426],{"class":111},[101,136139,23725],{"class":160},[101,136141,1277],{"class":111},[101,136143,136144],{"class":103,"line":1166},[101,136145,1552],{"class":111},[101,136147,136148,136150],{"class":103,"line":1181},[101,136149,131027],{"class":1950},[101,136151,15560],{"class":111},[101,136153,136154,136156,136158,136160],{"class":103,"line":1187},[101,136155,131012],{"class":160},[101,136157,51426],{"class":111},[101,136159,72511],{"class":160},[101,136161,1277],{"class":111},[101,136163,136164],{"class":103,"line":1201},[101,136165,1552],{"class":111},[43,136167,136169],{"id":136168},"_135-css的初始化","13.5 css的初始化",[10,136171,136172],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[10,136174,136175],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[10,136177,136178],{},"每个网页都必须首先进行 CSS初始化。",[10,136180,136181],{},"这里我们以 京东CSS初始化代码为例。",[10,136183,136184],{},"在网页右键查看网页源代码",[10,136186,136187],{},"找到css的link引入语句",[10,136189,136190],{},"然后ctrl+f 输入body",[10,136192,77215],{},[1449,136194],{"style":126388,"src":136195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[10,136197,77238],{},[1449,136199],{"style":126388,"src":136200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[10,136202,136203],{},"③打开了网页上传压缩的代码",[1449,136205],{"style":126388,"src":136206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[10,136208,136209],{},"④从body前可以查看这个网页的初始化代码",[10,136211,136212],{},[261,136213,136214],{},"Unicode编码字体：",[10,136216,136217],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[10,136219,83196],{},[10,136221,136222],{},"黑体 \\9ED1\\4F53",[10,136224,136225],{},"宋体 \\5B8B\\4F53",[10,136227,136228],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5114,136230,136231],{},"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":20,"searchDepth":21,"depth":21,"links":136233},[136234,136235,136242,136246,136250],{"id":135031,"depth":21,"text":135032},{"id":135153,"depth":21,"text":135154,"children":136236},[136237,136238,136239,136240,136241],{"id":135157,"depth":1166,"text":135158},{"id":135310,"depth":1166,"text":135311},{"id":135429,"depth":1166,"text":135430},{"id":135571,"depth":1166,"text":135572},{"id":135629,"depth":1166,"text":135630},{"id":135690,"depth":21,"text":135691,"children":136243},[136244,136245],{"id":135713,"depth":1166,"text":135714},{"id":135945,"depth":1166,"text":135946},{"id":136074,"depth":21,"text":136075,"children":136247},[136248,136249],{"id":136078,"depth":1166,"text":136079},{"id":136117,"depth":1166,"text":136118},{"id":136168,"depth":21,"text":136169},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135023,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136257,"title":136258,"body":136259,"description":23365,"extension":24,"meta":137945,"navigation":27,"path":137946,"seo":137947,"stem":137948,"__hash__":137949},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136260,"toc":137934},[136261,136264,136268,136272,136275,136282,136285,136288,136326,136329,136331,136345,136349,136358,136362,136367,136370,136373,136376,136411,136416,136419,136449,136452,136457,136460,136463,136493,136496,136550,136553,136557,136562,136574,136577,136581,136611,136614,136619,136622,136652,136655,136659,136676,136680,136684,136687,136720,136723,136727,136730,136733,136736,136739,136742,136853,136856,136859,136862,136964,136967,136971,136975,136979,136982,137022,137025,137027,137043,137047,137050,137055,137136,137139,137142,137268,137273,137276,137284,137287,137292,137377,137380,137384,137387,137390,137394,137414,137419,137503,137506,137511,137514,137517,137595,137598,137601,137604,137607,137610,137615,137618,137621,137693,137696,137701,137704,137801,137804,137810,137813,137816,137819,137822,137825,137828,137831,137834,137838,137843,137846,137879,137884,137887,137928,137931],[39,136262,136258],{"id":136263},"_14-html5与css3新特性",[43,136265,136267],{"id":136266},"_141-html5的新特性","14.1 HTML5的新特性",[72,136269,136271],{"id":136270},"_1411-基本标签","14.1.1 基本标签",[10,136273,136274],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[10,136276,136277,136278,136281],{},"这些新特性都有兼容性问题，基本是 ",[261,136279,136280],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[10,136283,136284],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[10,136286,136287],{},"现在使用的是新特性：",[1118,136289,136290,136296,136302,136308,136314,136320],{},[58,136291,136292,136295],{},[98,136293,136294],{},"\u003Cheader>"," 头部标签",[58,136297,136298,136301],{},[98,136299,136300],{},"\u003Cnav>"," 导航标签",[58,136303,136304,136307],{},[98,136305,136306],{},"\u003Carticle>"," 内容标签",[58,136309,136310,136313],{},[98,136311,136312],{},"\u003Csection>"," 定义文档某个区域",[58,136315,136316,136319],{},[98,136317,136318],{},"\u003Caside>"," 侧边栏标签",[58,136321,136322,136325],{},[98,136323,136324],{},"\u003Cfooter>"," 尾部标签",[1449,136327],{"style":126388,"src":136328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[10,136330,141],{},[1118,136332,136333,136336,136339,136342],{},[58,136334,136335],{},"这种语义化标准主要是针对搜索引擎的",[58,136337,136338],{},"这些标签页面中可以经常使用",[58,136340,136341],{},"在IE9中，需要把这些元素转换为块级元素",[58,136343,136344],{},"移动端更喜欢使用这些标签",[72,136346,136348],{"id":136347},"_1412-多媒体标签","14.1.2 多媒体标签",[10,136350,136351,136352,136354,136355,136357],{},"音频 ",[261,136353,28163],{}," 和视频 ",[261,136356,28172],{}," 两个标签",[21986,136359,136361],{"id":136360},"_14121-视频标签-video","14.1.2.1 视频标签- video",[55,136363,136364],{},[58,136365,136366],{},"支持格式：",[1449,136368],{"style":126388,"src":136369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[10,136371,136372],{},"尽量使用MP4，兼容性好",[10,136374,136375],{},"用MP4就可以",[92,136377,136379],{"className":127279,"code":136378,"language":127281,"meta":20,"style":20},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[98,136380,136381],{"__ignoreMap":20},[101,136382,136383,136385,136387,136389,136391,136394,136396,136399,136402,136405,136407,136409],{"class":103,"line":104},[101,136384,1021],{"class":111},[101,136386,28172],{"class":51289},[101,136388,55228],{"class":1950},[101,136390,157],{"class":111},[101,136392,136393],{"class":216},"\"movie.mp4\"",[101,136395,92412],{"class":1950},[101,136397,136398],{"class":1950}," autoplay",[101,136400,136401],{"class":1950}," muted",[101,136403,136404],{"class":1950}," loop",[101,136406,55303],{"class":111},[101,136408,28172],{"class":51289},[101,136410,51296],{"class":111},[55,136412,136413],{"start":21},[58,136414,136415],{},"兼容写法",[10,136417,136418],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[92,136420,136421],{"className":127279,"code":136378,"language":127281,"meta":20,"style":20},[98,136422,136423],{"__ignoreMap":20},[101,136424,136425,136427,136429,136431,136433,136435,136437,136439,136441,136443,136445,136447],{"class":103,"line":104},[101,136426,1021],{"class":111},[101,136428,28172],{"class":51289},[101,136430,55228],{"class":1950},[101,136432,157],{"class":111},[101,136434,136393],{"class":216},[101,136436,92412],{"class":1950},[101,136438,136398],{"class":1950},[101,136440,136401],{"class":1950},[101,136442,136404],{"class":1950},[101,136444,55303],{"class":111},[101,136446,28172],{"class":51289},[101,136448,51296],{"class":111},[10,136450,136451],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[55,136453,136454],{"start":1166},[58,136455,136456],{},"video常用属性",[1449,136458],{"style":126388,"src":136459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[10,136461,136462],{},"poster属性后面是跟的等待加载图片的地址",[92,136464,136465],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,136466,136467],{"__ignoreMap":20},[101,136468,136469,136471,136473,136475,136477,136479,136481,136483,136485,136487,136489,136491],{"class":103,"line":104},[101,136470,1021],{"class":111},[101,136472,1449],{"class":51289},[101,136474,55228],{"class":1950},[101,136476,157],{"class":111},[101,136478,134049],{"class":216},[101,136480,55236],{"class":1950},[101,136482,157],{"class":111},[101,136484,134056],{"class":216},[101,136486,134059],{"class":1950},[101,136488,157],{"class":111},[101,136490,134064],{"class":216},[101,136492,51296],{"class":111},[10,136494,136495],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[92,136497,136499],{"className":126532,"code":136498,"language":126534,"meta":20,"style":20},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[98,136500,136501,136506,136512,136536,136541,136546],{"__ignoreMap":20},[101,136502,136503],{"class":103,"line":104},[101,136504,136505],{"class":170},"\u002F* 2D 位移 *\u002F\n",[101,136507,136508,136510],{"class":103,"line":21},[101,136509,51600],{"class":51289},[101,136511,15560],{"class":111},[101,136513,136514,136517,136519,136522,136524,136526,136528,136530,136532,136534],{"class":103,"line":1166},[101,136515,136516],{"class":160},"  transform",[101,136518,51426],{"class":111},[101,136520,136521],{"class":160},"translate",[101,136523,112],{"class":111},[101,136525,422],{"class":160},[101,136527,51481],{"class":107},[101,136529,12423],{"class":111},[101,136531,767],{"class":160},[101,136533,51481],{"class":107},[101,136535,2706],{"class":111},[101,136537,136538],{"class":103,"line":1181},[101,136539,136540],{"class":170},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[101,136542,136543],{"class":103,"line":1187},[101,136544,136545],{"class":170},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[101,136547,136548],{"class":103,"line":1201},[101,136549,1552],{"class":111},[10,136551,136552],{},"muted:自动静音属性",[21986,136554,136556],{"id":136555},"_14122-音频标签audio","14.1.2.2 音频标签audio",[55,136558,136559],{},[58,136560,136561],{},"基本使用",[10,136563,136564,136565,136570,136571],{},"当前 ",[261,136566,136567],{},[98,136568,136569],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[261,136572,136573],{},"mp3格式",[1449,136575],{"style":126388,"src":136576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[55,136578,136579],{"start":21},[58,136580,136415],{},[92,136582,136583],{"className":127279,"code":136378,"language":127281,"meta":20,"style":20},[98,136584,136585],{"__ignoreMap":20},[101,136586,136587,136589,136591,136593,136595,136597,136599,136601,136603,136605,136607,136609],{"class":103,"line":104},[101,136588,1021],{"class":111},[101,136590,28172],{"class":51289},[101,136592,55228],{"class":1950},[101,136594,157],{"class":111},[101,136596,136393],{"class":216},[101,136598,92412],{"class":1950},[101,136600,136398],{"class":1950},[101,136602,136401],{"class":1950},[101,136604,136404],{"class":1950},[101,136606,55303],{"class":111},[101,136608,28172],{"class":51289},[101,136610,51296],{"class":111},[10,136612,136613],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[55,136615,136616],{"start":1166},[58,136617,136618],{},"常用属性",[1449,136620],{"style":126388,"src":136621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[92,136623,136624],{"className":127279,"code":136378,"language":127281,"meta":20,"style":20},[98,136625,136626],{"__ignoreMap":20},[101,136627,136628,136630,136632,136634,136636,136638,136640,136642,136644,136646,136648,136650],{"class":103,"line":104},[101,136629,1021],{"class":111},[101,136631,28172],{"class":51289},[101,136633,55228],{"class":1950},[101,136635,157],{"class":111},[101,136637,136393],{"class":216},[101,136639,92412],{"class":1950},[101,136641,136398],{"class":1950},[101,136643,136401],{"class":1950},[101,136645,136404],{"class":1950},[101,136647,55303],{"class":111},[101,136649,28172],{"class":51289},[101,136651,51296],{"class":111},[10,136653,136654],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21986,136656,136658],{"id":136657},"_14123-总结","14.1.2.3 总结",[1118,136660,136661,136664,136667,136670,136673],{},[58,136662,136663],{},"音频标签和视频标签使用方式基本一致",[58,136665,136666],{},"浏览器支持情况不同",[58,136668,136669],{},"谷歌浏览器把音频和视频自动播放禁止了",[58,136671,136672],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[58,136674,136675],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[72,136677,136679],{"id":136678},"_1413-表单元素","14.1.3 表单元素",[21986,136681,136683],{"id":136682},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1449,136685],{"style":126388,"src":136686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[92,136688,136690],{"className":127279,"code":136689,"language":127281,"meta":20,"style":20},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[98,136691,136692],{"__ignoreMap":20},[101,136693,136694,136696,136698,136700,136702,136704,136706,136708,136711,136713,136715,136718],{"class":103,"line":104},[101,136695,1021],{"class":111},[101,136697,53810],{"class":51289},[101,136699,53813],{"class":1950},[101,136701,157],{"class":111},[101,136703,62688],{"class":216},[101,136705,14908],{"class":1950},[101,136707,157],{"class":111},[101,136709,136710],{"class":216},"\"username\"",[101,136712,61009],{"class":1950},[101,136714,157],{"class":111},[101,136716,136717],{"class":216},"\"请输入用户名\"",[101,136719,51296],{"class":111},[1449,136721],{"style":126388,"src":136722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21986,136724,136726],{"id":136725},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1449,136728],{"style":126388,"src":136729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[10,136731,136732],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[10,136734,136735],{},"快捷操作：",[1449,136737],{"style":126388,"src":136738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[10,136740,136741],{},"例子1：",[92,136743,136745],{"className":127279,"code":136744,"language":127281,"meta":20,"style":20},"\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",[98,136746,136747,136770,136797,136826,136845],{"__ignoreMap":20},[101,136748,136749,136751,136753,136755,136757,136760,136763,136765,136768],{"class":103,"line":104},[101,136750,1021],{"class":111},[101,136752,66614],{"class":51289},[101,136754,66617],{"class":1950},[101,136756,157],{"class":111},[101,136758,136759],{"class":216},"\"\u002Fsubmit\"",[101,136761,136762],{"class":1950}," method",[101,136764,157],{"class":111},[101,136766,136767],{"class":216},"\"post\"",[101,136769,51296],{"class":111},[101,136771,136772,136774,136776,136778,136780,136782,136784,136786,136788,136790,136792,136795],{"class":103,"line":21},[101,136773,52133],{"class":111},[101,136775,53810],{"class":51289},[101,136777,53813],{"class":1950},[101,136779,157],{"class":111},[101,136781,62688],{"class":216},[101,136783,14908],{"class":1950},[101,136785,157],{"class":111},[101,136787,136710],{"class":216},[101,136789,61009],{"class":1950},[101,136791,157],{"class":111},[101,136793,136794],{"class":216},"\"用户名\"",[101,136796,51296],{"class":111},[101,136798,136799,136801,136803,136805,136807,136810,136812,136814,136817,136819,136821,136824],{"class":103,"line":1166},[101,136800,52133],{"class":111},[101,136802,53810],{"class":51289},[101,136804,53813],{"class":1950},[101,136806,157],{"class":111},[101,136808,136809],{"class":216},"\"password\"",[101,136811,14908],{"class":1950},[101,136813,157],{"class":111},[101,136815,136816],{"class":216},"\"pwd\"",[101,136818,61009],{"class":1950},[101,136820,157],{"class":111},[101,136822,136823],{"class":216},"\"密码\"",[101,136825,51296],{"class":111},[101,136827,136828,136830,136832,136834,136836,136838,136841,136843],{"class":103,"line":1181},[101,136829,52133],{"class":111},[101,136831,53876],{"class":51289},[101,136833,53813],{"class":1950},[101,136835,157],{"class":111},[101,136837,66637],{"class":216},[101,136839,136840],{"class":111},">提交\u003C\u002F",[101,136842,53876],{"class":51289},[101,136844,51296],{"class":111},[101,136846,136847,136849,136851],{"class":103,"line":1187},[101,136848,51774],{"class":111},[101,136850,66614],{"class":51289},[101,136852,51296],{"class":111},[1449,136854],{"style":126388,"src":136855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[10,136857,136858],{},"value是表单域的内容",[10,136860,136861],{},"例子2：",[92,136863,136864],{"className":127279,"code":136744,"language":127281,"meta":20,"style":20},[98,136865,136866,136886,136912,136938,136956],{"__ignoreMap":20},[101,136867,136868,136870,136872,136874,136876,136878,136880,136882,136884],{"class":103,"line":104},[101,136869,1021],{"class":111},[101,136871,66614],{"class":51289},[101,136873,66617],{"class":1950},[101,136875,157],{"class":111},[101,136877,136759],{"class":216},[101,136879,136762],{"class":1950},[101,136881,157],{"class":111},[101,136883,136767],{"class":216},[101,136885,51296],{"class":111},[101,136887,136888,136890,136892,136894,136896,136898,136900,136902,136904,136906,136908,136910],{"class":103,"line":21},[101,136889,52133],{"class":111},[101,136891,53810],{"class":51289},[101,136893,53813],{"class":1950},[101,136895,157],{"class":111},[101,136897,62688],{"class":216},[101,136899,14908],{"class":1950},[101,136901,157],{"class":111},[101,136903,136710],{"class":216},[101,136905,61009],{"class":1950},[101,136907,157],{"class":111},[101,136909,136794],{"class":216},[101,136911,51296],{"class":111},[101,136913,136914,136916,136918,136920,136922,136924,136926,136928,136930,136932,136934,136936],{"class":103,"line":1166},[101,136915,52133],{"class":111},[101,136917,53810],{"class":51289},[101,136919,53813],{"class":1950},[101,136921,157],{"class":111},[101,136923,136809],{"class":216},[101,136925,14908],{"class":1950},[101,136927,157],{"class":111},[101,136929,136816],{"class":216},[101,136931,61009],{"class":1950},[101,136933,157],{"class":111},[101,136935,136823],{"class":216},[101,136937,51296],{"class":111},[101,136939,136940,136942,136944,136946,136948,136950,136952,136954],{"class":103,"line":1181},[101,136941,52133],{"class":111},[101,136943,53876],{"class":51289},[101,136945,53813],{"class":1950},[101,136947,157],{"class":111},[101,136949,66637],{"class":216},[101,136951,136840],{"class":111},[101,136953,53876],{"class":51289},[101,136955,51296],{"class":111},[101,136957,136958,136960,136962],{"class":103,"line":1187},[101,136959,51774],{"class":111},[101,136961,66614],{"class":51289},[101,136963,51296],{"class":111},[1449,136965],{"style":126388,"src":136966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[43,136968,136970],{"id":136969},"_142-css新特性","14.2 CSS新特性",[72,136972,136974],{"id":136973},"_1421-新增选择器","14.2.1 新增选择器",[21986,136976,136978],{"id":136977},"_14211-属性选择器","14.2.1.1 属性选择器",[1449,136980],{"style":126388,"src":136981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[92,136983,136985],{"className":126532,"code":136984,"language":126534,"meta":20,"style":20},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[98,136986,136987,137002,137018],{"__ignoreMap":20},[101,136988,136989,136991,136993,136995,136997,136999],{"class":103,"line":104},[101,136990,53810],{"class":51289},[101,136992,1001],{"class":111},[101,136994,103087],{"class":1950},[101,136996,157],{"class":107},[101,136998,62688],{"class":216},[101,137000,137001],{"class":111},"] {\n",[101,137003,137004,137006,137008,137010,137012,137014,137016],{"class":103,"line":21},[101,137005,70885],{"class":160},[101,137007,51426],{"class":111},[101,137009,329],{"class":160},[101,137011,51481],{"class":107},[101,137013,51510],{"class":160},[101,137015,130112],{"class":160},[101,137017,1277],{"class":111},[101,137019,137020],{"class":103,"line":1166},[101,137021,1552],{"class":111},[1449,137023],{"style":126388,"src":137024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[10,137026,141],{},[1118,137028,137029,137032,137035,137038],{},[58,137030,137031],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[58,137033,137034],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[58,137036,137037],{},"属性选择器也可以选择出来自定义的属性",[58,137039,137040,137042],{},[261,137041,9013],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21986,137044,137046],{"id":137045},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1449,137048],{"style":126388,"src":137049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[55,137051,137052],{},[58,137053,137054],{},"fist-child",[92,137056,137058],{"className":126532,"code":137057,"language":126534,"meta":20,"style":20},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[98,137059,137060,137065,137080,137100,137118],{"__ignoreMap":20},[101,137061,137062],{"class":103,"line":104},[101,137063,137064],{"class":170},"\u002F* 属性选择器 *\u002F\n",[101,137066,137067,137069,137071,137073,137075,137077],{"class":103,"line":21},[101,137068,53810],{"class":51289},[101,137070,1001],{"class":111},[101,137072,103087],{"class":1950},[101,137074,157],{"class":107},[101,137076,62688],{"class":216},[101,137078,137079],{"class":111},"] { }\n",[101,137081,137082,137084,137086,137088,137091,137094,137097],{"class":103,"line":1166},[101,137083,53810],{"class":51289},[101,137085,1001],{"class":111},[101,137087,14682],{"class":1950},[101,137089,137090],{"class":107},"^=",[101,137092,137093],{"class":216},"\"icon\"",[101,137095,137096],{"class":111},"] { }  ",[101,137098,137099],{"class":170},"\u002F* 以 icon 开头 *\u002F\n",[101,137101,137102,137104,137106,137108,137111,137113,137115],{"class":103,"line":1181},[101,137103,53810],{"class":51289},[101,137105,1001],{"class":111},[101,137107,14682],{"class":1950},[101,137109,137110],{"class":107},"$=",[101,137112,137093],{"class":216},[101,137114,137096],{"class":111},[101,137116,137117],{"class":170},"\u002F* 以 icon 结尾 *\u002F\n",[101,137119,137120,137122,137124,137126,137129,137131,137133],{"class":103,"line":1187},[101,137121,53810],{"class":51289},[101,137123,1001],{"class":111},[101,137125,14682],{"class":1950},[101,137127,137128],{"class":107},"*=",[101,137130,137093],{"class":216},[101,137132,137096],{"class":111},[101,137134,137135],{"class":170},"\u002F* 包含 icon *\u002F\n",[10,137137,137138],{},"ul的第一个儿子文本为红色",[10,137140,137141],{},"一定要在冒号前加空格，不然就是选中所有的了",[92,137143,137145],{"className":126532,"code":137144,"language":126534,"meta":20,"style":20},".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",[98,137146,137147,137153,137163,137167,137171,137176,137189,137202,137218,137235,137252],{"__ignoreMap":20},[101,137148,137149,137151],{"class":103,"line":104},[101,137150,126823],{"class":1950},[101,137152,15560],{"class":111},[101,137154,137155,137157,137159,137161],{"class":103,"line":21},[101,137156,70894],{"class":160},[101,137158,51426],{"class":111},[101,137160,57410],{"class":160},[101,137162,1277],{"class":111},[101,137164,137165],{"class":103,"line":1166},[101,137166,1552],{"class":111},[101,137168,137169],{"class":103,"line":1181},[101,137170,135993],{"class":111},[101,137172,137173],{"class":103,"line":1187},[101,137174,137175],{"class":170},"\u002F* 结构伪类选择器 *\u002F\n",[101,137177,137178,137180,137183,137186],{"class":103,"line":1201},[101,137179,58],{"class":51289},[101,137181,137182],{"class":1950},":first-child",[101,137184,137185],{"class":111}," { }           ",[101,137187,137188],{"class":170},"\u002F* 第一个 *\u002F\n",[101,137190,137191,137193,137196,137199],{"class":103,"line":1207},[101,137192,58],{"class":51289},[101,137194,137195],{"class":1950},":last-child",[101,137197,137198],{"class":111}," { }            ",[101,137200,137201],{"class":170},"\u002F* 最后一个 *\u002F\n",[101,137203,137204,137206,137208,137210,137212,137215],{"class":103,"line":1298},[101,137205,58],{"class":51289},[101,137207,129446],{"class":1950},[101,137209,112],{"class":111},[101,137211,189],{"class":160},[101,137213,137214],{"class":111},") { }          ",[101,137216,137217],{"class":170},"\u002F* 第2个 *\u002F\n",[101,137219,137220,137222,137224,137226,137229,137232],{"class":103,"line":1304},[101,137221,58],{"class":51289},[101,137223,129446],{"class":1950},[101,137225,112],{"class":111},[101,137227,137228],{"class":160},"2n",[101,137230,137231],{"class":111},") { }         ",[101,137233,137234],{"class":170},"\u002F* 偶数 *\u002F\n",[101,137236,137237,137239,137241,137243,137246,137249],{"class":103,"line":1316},[101,137238,58],{"class":51289},[101,137240,129446],{"class":1950},[101,137242,112],{"class":111},[101,137244,137245],{"class":160},"2n+1",[101,137247,137248],{"class":111},") { }       ",[101,137250,137251],{"class":170},"\u002F* 奇数 *\u002F\n",[101,137253,137254,137256,137258,137260,137263,137265],{"class":103,"line":1599},[101,137255,58],{"class":51289},[101,137257,129446],{"class":1950},[101,137259,112],{"class":111},[101,137261,137262],{"class":160},"-n+3",[101,137264,137248],{"class":111},[101,137266,137267],{"class":170},"\u002F* 前3个 *\u002F\n",[51600,137269,137272],{"className":137270},[137271],"example","\n  示例内容\n",[10,137274,137275],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1118,137277,137278],{},[58,137279,137280,137283],{},[98,137281,137282],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[10,137285,137286],{},"也就是说它选择的是熊大",[55,137288,137289],{"start":1201},[58,137290,137291],{},"权重",[92,137293,137295],{"className":126532,"code":137294,"language":126534,"meta":20,"style":20},"\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",[98,137296,137297,137301,137311,137321,137335,137349,137363],{"__ignoreMap":20},[101,137298,137299],{"class":103,"line":104},[101,137300,137175],{"class":170},[101,137302,137303,137305,137307,137309],{"class":103,"line":21},[101,137304,58],{"class":51289},[101,137306,137182],{"class":1950},[101,137308,137185],{"class":111},[101,137310,137188],{"class":170},[101,137312,137313,137315,137317,137319],{"class":103,"line":1166},[101,137314,58],{"class":51289},[101,137316,137195],{"class":1950},[101,137318,137198],{"class":111},[101,137320,137201],{"class":170},[101,137322,137323,137325,137327,137329,137331,137333],{"class":103,"line":1181},[101,137324,58],{"class":51289},[101,137326,129446],{"class":1950},[101,137328,112],{"class":111},[101,137330,189],{"class":160},[101,137332,137214],{"class":111},[101,137334,137217],{"class":170},[101,137336,137337,137339,137341,137343,137345,137347],{"class":103,"line":1187},[101,137338,58],{"class":51289},[101,137340,129446],{"class":1950},[101,137342,112],{"class":111},[101,137344,137228],{"class":160},[101,137346,137231],{"class":111},[101,137348,137234],{"class":170},[101,137350,137351,137353,137355,137357,137359,137361],{"class":103,"line":1201},[101,137352,58],{"class":51289},[101,137354,129446],{"class":1950},[101,137356,112],{"class":111},[101,137358,137245],{"class":160},[101,137360,137248],{"class":111},[101,137362,137251],{"class":170},[101,137364,137365,137367,137369,137371,137373,137375],{"class":103,"line":1207},[101,137366,58],{"class":51289},[101,137368,129446],{"class":1950},[101,137370,112],{"class":111},[101,137372,137262],{"class":160},[101,137374,137248],{"class":111},[101,137376,137267],{"class":170},[10,137378,137379],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21986,137381,137383],{"id":137382},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[10,137385,137386],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1449,137388],{"style":126388,"src":137389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[55,137391,137392],{},[58,137393,141],{},[1118,137395,137396,137399,137402,137405,137408,137411],{},[58,137397,137398],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[58,137400,137401],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[58,137403,137404],{},"语法： element::before {}",[58,137406,137407],{},"before 和 after 必须有 content 属性",[58,137409,137410],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[58,137412,137413],{},"伪元素选择器和标签选择器一样，权重为 1",[55,137415,137416],{"start":21},[58,137417,137418],{},"实例",[92,137420,137421],{"className":126532,"code":137294,"language":126534,"meta":20,"style":20},[98,137422,137423,137427,137437,137447,137461,137475,137489],{"__ignoreMap":20},[101,137424,137425],{"class":103,"line":104},[101,137426,137175],{"class":170},[101,137428,137429,137431,137433,137435],{"class":103,"line":21},[101,137430,58],{"class":51289},[101,137432,137182],{"class":1950},[101,137434,137185],{"class":111},[101,137436,137188],{"class":170},[101,137438,137439,137441,137443,137445],{"class":103,"line":1166},[101,137440,58],{"class":51289},[101,137442,137195],{"class":1950},[101,137444,137198],{"class":111},[101,137446,137201],{"class":170},[101,137448,137449,137451,137453,137455,137457,137459],{"class":103,"line":1181},[101,137450,58],{"class":51289},[101,137452,129446],{"class":1950},[101,137454,112],{"class":111},[101,137456,189],{"class":160},[101,137458,137214],{"class":111},[101,137460,137217],{"class":170},[101,137462,137463,137465,137467,137469,137471,137473],{"class":103,"line":1187},[101,137464,58],{"class":51289},[101,137466,129446],{"class":1950},[101,137468,112],{"class":111},[101,137470,137228],{"class":160},[101,137472,137231],{"class":111},[101,137474,137234],{"class":170},[101,137476,137477,137479,137481,137483,137485,137487],{"class":103,"line":1201},[101,137478,58],{"class":51289},[101,137480,129446],{"class":1950},[101,137482,112],{"class":111},[101,137484,137245],{"class":160},[101,137486,137248],{"class":111},[101,137488,137251],{"class":170},[101,137490,137491,137493,137495,137497,137499,137501],{"class":103,"line":1207},[101,137492,58],{"class":51289},[101,137494,129446],{"class":1950},[101,137496,112],{"class":111},[101,137498,137262],{"class":160},[101,137500,137248],{"class":111},[101,137502,137267],{"class":170},[1449,137504],{"style":126388,"src":137505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[55,137507,137508],{"start":1166},[58,137509,137510],{},"使用场景1",[1449,137512],{"style":126388,"src":137513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[10,137515,137516],{},"不需要再加盒子来整红色那部分了",[92,137518,137520],{"className":126532,"code":137519,"language":126534,"meta":20,"style":20},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[98,137521,137522,137527,137536,137547,137557,137561,137570,137581,137591],{"__ignoreMap":20},[101,137523,137524],{"class":103,"line":104},[101,137525,137526],{"class":170},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[101,137528,137529,137531,137534],{"class":103,"line":21},[101,137530,51600],{"class":51289},[101,137532,137533],{"class":1950},"::before",[101,137535,15560],{"class":111},[101,137537,137538,137541,137543,137545],{"class":103,"line":1166},[101,137539,137540],{"class":160},"  content",[101,137542,51426],{"class":111},[101,137544,7640],{"class":216},[101,137546,1277],{"class":111},[101,137548,137549,137551,137553,137555],{"class":103,"line":1181},[101,137550,128148],{"class":160},[101,137552,51426],{"class":111},[101,137554,60858],{"class":160},[101,137556,1277],{"class":111},[101,137558,137559],{"class":103,"line":1187},[101,137560,1552],{"class":111},[101,137562,137563,137565,137568],{"class":103,"line":1201},[101,137564,51600],{"class":51289},[101,137566,137567],{"class":1950},"::after",[101,137569,15560],{"class":111},[101,137571,137572,137574,137576,137579],{"class":103,"line":1207},[101,137573,137540],{"class":160},[101,137575,51426],{"class":111},[101,137577,137578],{"class":216},"\"→\"",[101,137580,1277],{"class":111},[101,137582,137583,137585,137587,137589],{"class":103,"line":1298},[101,137584,70894],{"class":160},[101,137586,51426],{"class":111},[101,137588,62059],{"class":160},[101,137590,1277],{"class":111},[101,137592,137593],{"class":103,"line":1304},[101,137594,1552],{"class":111},[1449,137596],{"style":126388,"src":137597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[10,137599,137600],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1449,137602],{"style":126388,"src":137603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[10,137605,137606],{},"但是在引用时需要先转义一下",[10,137608,137609],{},"content='\\e930'",[55,137611,137612],{"start":1181},[58,137613,137614],{},"使用场景2",[10,137616,137617],{},"仿土豆效果",[10,137619,137620],{},"通过使用伪元素选择器可以减少body中盒子的数量",[92,137622,137623],{"className":126532,"code":137519,"language":126534,"meta":20,"style":20},[98,137624,137625,137629,137637,137647,137657,137661,137669,137679,137689],{"__ignoreMap":20},[101,137626,137627],{"class":103,"line":104},[101,137628,137526],{"class":170},[101,137630,137631,137633,137635],{"class":103,"line":21},[101,137632,51600],{"class":51289},[101,137634,137533],{"class":1950},[101,137636,15560],{"class":111},[101,137638,137639,137641,137643,137645],{"class":103,"line":1166},[101,137640,137540],{"class":160},[101,137642,51426],{"class":111},[101,137644,7640],{"class":216},[101,137646,1277],{"class":111},[101,137648,137649,137651,137653,137655],{"class":103,"line":1181},[101,137650,128148],{"class":160},[101,137652,51426],{"class":111},[101,137654,60858],{"class":160},[101,137656,1277],{"class":111},[101,137658,137659],{"class":103,"line":1187},[101,137660,1552],{"class":111},[101,137662,137663,137665,137667],{"class":103,"line":1201},[101,137664,51600],{"class":51289},[101,137666,137567],{"class":1950},[101,137668,15560],{"class":111},[101,137670,137671,137673,137675,137677],{"class":103,"line":1207},[101,137672,137540],{"class":160},[101,137674,51426],{"class":111},[101,137676,137578],{"class":216},[101,137678,1277],{"class":111},[101,137680,137681,137683,137685,137687],{"class":103,"line":1298},[101,137682,70894],{"class":160},[101,137684,51426],{"class":111},[101,137686,62059],{"class":160},[101,137688,1277],{"class":111},[101,137690,137691],{"class":103,"line":1304},[101,137692,1552],{"class":111},[1449,137694],{"style":126388,"src":137695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[55,137697,137698],{"start":1187},[58,137699,137700],{},"使用场景3",[10,137702,137703],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[92,137705,137707],{"className":126532,"code":137706,"language":126534,"meta":20,"style":20},".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",[98,137708,137709,137715,137725,137729,137733,137737,137745,137755,137765,137769,137777,137787,137797],{"__ignoreMap":20},[101,137710,137711,137713],{"class":103,"line":104},[101,137712,130380],{"class":1950},[101,137714,15560],{"class":111},[101,137716,137717,137719,137721,137723],{"class":103,"line":21},[101,137718,131012],{"class":160},[101,137720,51426],{"class":111},[101,137722,23725],{"class":160},[101,137724,1277],{"class":111},[101,137726,137727],{"class":103,"line":1166},[101,137728,1552],{"class":111},[101,137730,137731],{"class":103,"line":1181},[101,137732,135993],{"class":111},[101,137734,137735],{"class":103,"line":1187},[101,137736,137526],{"class":170},[101,137738,137739,137741,137743],{"class":103,"line":1201},[101,137740,51600],{"class":51289},[101,137742,137533],{"class":1950},[101,137744,15560],{"class":111},[101,137746,137747,137749,137751,137753],{"class":103,"line":1207},[101,137748,137540],{"class":160},[101,137750,51426],{"class":111},[101,137752,7640],{"class":216},[101,137754,1277],{"class":111},[101,137756,137757,137759,137761,137763],{"class":103,"line":1298},[101,137758,128148],{"class":160},[101,137760,51426],{"class":111},[101,137762,60858],{"class":160},[101,137764,1277],{"class":111},[101,137766,137767],{"class":103,"line":1304},[101,137768,1552],{"class":111},[101,137770,137771,137773,137775],{"class":103,"line":1316},[101,137772,51600],{"class":51289},[101,137774,137567],{"class":1950},[101,137776,15560],{"class":111},[101,137778,137779,137781,137783,137785],{"class":103,"line":1599},[101,137780,137540],{"class":160},[101,137782,51426],{"class":111},[101,137784,137578],{"class":216},[101,137786,1277],{"class":111},[101,137788,137789,137791,137793,137795],{"class":103,"line":1604},[101,137790,70894],{"class":160},[101,137792,51426],{"class":111},[101,137794,62059],{"class":160},[101,137796,1277],{"class":111},[101,137798,137799],{"class":103,"line":1610},[101,137800,1552],{"class":111},[10,137802,137803],{},"div {\nmargin: 0 auto;\n}",[92,137805,137808],{"className":137806,"code":137807,"language":5175},[5173],"\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",[98,137809,137807],{"__ignoreMap":20},[10,137811,137812],{},"如果想让多个元素都发生变化",[10,137814,137815],{},"不能如下操作：",[10,137817,137818],{},"transition: width 2s ease 0.5s;",[10,137820,137821],{},"transition: height 2s ease 0.5s;不对！！！",[10,137823,137824],{},"上方会样式冲突，导致不显示任何过渡效果",[10,137826,137827],{},"使用如下：加逗号隔开",[10,137829,137830],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[10,137832,137833],{},"transition all 2s ease;",[72,137835,137837],{"id":137836},"_1426-过渡练习","14.2.6 过渡练习",[55,137839,137840],{},[58,137841,137842],{},"进度条",[1449,137844],{"style":126388,"src":137845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[92,137847,137849],{"className":126532,"code":137848,"language":126534,"meta":20,"style":20},"div {\n  transition: all 0.3s ease;\n}\n",[98,137850,137851,137857,137875],{"__ignoreMap":20},[101,137852,137853,137855],{"class":103,"line":104},[101,137854,51600],{"class":51289},[101,137856,15560],{"class":111},[101,137858,137859,137862,137864,137866,137869,137871,137873],{"class":103,"line":21},[101,137860,137861],{"class":160},"  transition",[101,137863,51426],{"class":111},[101,137865,28110],{"class":160},[101,137867,137868],{"class":160}," 0.3",[101,137870,806],{"class":107},[101,137872,78669],{"class":160},[101,137874,1277],{"class":111},[101,137876,137877],{"class":103,"line":1166},[101,137878,1552],{"class":111},[55,137880,137881],{"start":21},[58,137882,137883],{},"小米logo",[10,137885,137886],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[92,137888,137890],{"className":126532,"code":137889,"language":126534,"meta":20,"style":20},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[98,137891,137892,137897,137903,137919,137924],{"__ignoreMap":20},[101,137893,137894],{"class":103,"line":104},[101,137895,137896],{"class":170},"\u002F* CSS3 过渡 *\u002F\n",[101,137898,137899,137901],{"class":103,"line":21},[101,137900,51600],{"class":51289},[101,137902,15560],{"class":111},[101,137904,137905,137907,137909,137911,137913,137915,137917],{"class":103,"line":1166},[101,137906,137861],{"class":160},[101,137908,51426],{"class":111},[101,137910,28110],{"class":160},[101,137912,137868],{"class":160},[101,137914,806],{"class":107},[101,137916,78669],{"class":160},[101,137918,1277],{"class":111},[101,137920,137921],{"class":103,"line":1181},[101,137922,137923],{"class":170},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[101,137925,137926],{"class":103,"line":1187},[101,137927,1552],{"class":111},[10,137929,137930],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5114,137932,137933],{},"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":20,"searchDepth":21,"depth":21,"links":137935},[137936,137941],{"id":136266,"depth":21,"text":136267,"children":137937},[137938,137939,137940],{"id":136270,"depth":1166,"text":136271},{"id":136347,"depth":1166,"text":136348},{"id":136678,"depth":1166,"text":136679},{"id":136969,"depth":21,"text":136970,"children":137942},[137943,137944],{"id":136973,"depth":1166,"text":136974},{"id":137836,"depth":1166,"text":137837},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136258,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137951,"title":137952,"body":137953,"description":23365,"extension":24,"meta":139697,"navigation":27,"path":139698,"seo":139699,"stem":139700,"__hash__":139701},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137954,"toc":139678},[137955,137958,137962,137965,137971,137977,137981,137983,137986,137989,137992,137995,137998,138001,138004,138008,138012,138015,138018,138021,138025,138028,138031,138036,138039,138042,138045,138049,138052,138061,138064,138067,138071,138074,138077,138082,138089,138103,138111,138118,138123,138126,138129,138132,138139,138143,138149,138155,138158,138161,138166,138172,138174,138182,138187,138190,138196,138198,138203,138208,138211,138213,138218,138221,138226,138231,138265,138269,138273,138276,138280,138283,138369,138372,138409,138412,138448,138452,138457,138470,138524,138526,138554,138556,138584,138590,138604,138606,138650,138652,138696,138699,138706,138717,138719,138746,138748,138774,138781,138797,138799,138893,138895,138989,138996,138999,139004,139010,139084,139087,139089,139125,139127,139163,139166,139173,139192,139195,139198,139200,139225,139227,139251,139254,139257,139287,139291,139294,139357,139359,139425,139427,139491,139494,139526,139528,139554,139556,139582,139585,139616,139618,139644,139646,139672,139675],[39,137956,137952],{"id":137957},"_15-品优购项目上篇-搭建与公共模块",[43,137959,137961],{"id":137960},"_151-项目规划","15.1 项目规划",[1449,137963],{"style":126388,"src":137964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[10,137966,137967,137970],{},[261,137968,137969],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[10,137972,137973,137976],{},[261,137974,137975],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[43,137978,137980],{"id":137979},"_152-项目介绍","15.2 项目介绍",[10,137982,137969],{},[1449,137984],{"style":126388,"src":137985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[10,137987,137988],{},"主页：",[1449,137990],{"style":126388,"src":137991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[10,137993,137994],{},"列表页：",[1449,137996],{"style":126388,"src":137997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[10,137999,138000],{},"注册页：",[1449,138002],{"style":126388,"src":138003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[43,138005,138007],{"id":138006},"_153-项目搭建工作","15.3 项目搭建工作",[72,138009,138011],{"id":138010},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1449,138013],{"style":126388,"src":138014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[10,138016,138017],{},"经常更换的图片要放到upload文件夹中",[10,138019,138020],{},"不经常换的放到images文件夹中",[72,138022,138024],{"id":138023},"_1532-创建文件如下","15.3.2 创建文件如下",[1449,138026],{"style":126388,"src":138027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1449,138029],{"style":126388,"src":138030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[10,138032,138033],{},[261,138034,138035],{},"初始化样式：",[10,138037,138038],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[10,138040,138041],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[10,138043,138044],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[72,138046,138048],{"id":138047},"_1533-项目模块化开发","15.3.3 项目模块化开发",[10,138050,138051],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[10,138053,138054,138055,138060],{},"这里最典型的应用就是 ",[261,138056,138057],{},[98,138058,138059],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1449,138062],{"style":126388,"src":138063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[10,138065,138066],{},"通过link方法来引入",[72,138068,138070],{"id":138069},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1449,138072],{"style":126388,"src":138073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[10,138075,138076],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[55,138078,138079],{},[58,138080,138081],{},"制作favicon图标",[10,138083,138084,138085,138088],{},"①把品优购图标切成 ",[98,138086,138087],{},"png"," 图片",[10,138090,138091,138092,138094,138095,138098,138099],{},"②把 ",[98,138093,138087],{}," 图片转换为 ",[98,138096,138097],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[14,138100,138101],{"href":138101,"rel":138102},"http:\u002F\u002Fwww.bitbug.net\u002F",[18],[55,138104,138105,138108],{"start":21},[58,138106,138107],{},"favicon图标放到网站根目录下",[58,138109,138110],{},"HTML页面引入favicon",[10,138112,138113,138114,138117],{},"在html 页面里面的 ",[98,138115,138116],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[10,138119,138120],{},[98,138121,138122],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[10,138124,138125],{},"复制这行代码或者在生成这个的网站进行复制",[1449,138127],{"style":126388,"src":138128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[10,138130,138131],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[10,138133,138134,138135],{},"例如:",[14,138136,138137],{"href":138137,"rel":138138},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[18],[72,138140,138142],{"id":138141},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[10,138144,138145,138148],{},[261,138146,138147],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[10,138150,138151,138154],{},[261,138152,138153],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[10,138156,138157],{},"页面必须有三个标签用来符合 SEO 优化",[1449,138159],{"style":126388,"src":138160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[55,138162,138163],{},[58,138164,138165],{},"title网站标题",[10,138167,138168,138171],{},[261,138169,138170],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[10,138173,68779],{},[1118,138175,138176,138179],{},[58,138177,138178],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[58,138180,138181],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[55,138183,138184],{"start":21},[58,138185,138186],{},"description网站描述",[10,138188,138189],{},"简要说明我们网站主要是做什么的",[10,138191,138192,138195],{},[261,138193,138194],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[10,138197,68779],{},[10,138199,138200],{},[98,138201,138202],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[55,138204,138205],{"start":1166},[58,138206,138207],{},"keywords关键词",[10,138209,138210],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[10,138212,68779],{},[10,138214,138215],{},[98,138216,138217],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[10,138219,138220],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[10,138222,138223],{},[261,138224,138225],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[55,138227,138228],{"start":1181},[58,138229,138230],{},"代码总结",[92,138232,138233],{"className":127279,"code":130636,"language":127281,"meta":20,"style":20},[98,138234,138235,138239,138253,138257],{"__ignoreMap":20},[101,138236,138237],{"class":103,"line":104},[101,138238,130643],{"class":170},[101,138240,138241,138243,138245,138247,138249,138251],{"class":103,"line":21},[101,138242,1021],{"class":111},[101,138244,51600],{"class":51289},[101,138246,53475],{"class":1950},[101,138248,157],{"class":111},[101,138250,130656],{"class":216},[101,138252,51296],{"class":111},[101,138254,138255],{"class":103,"line":1166},[101,138256,130663],{"class":111},[101,138258,138259,138261,138263],{"class":103,"line":1181},[101,138260,51774],{"class":111},[101,138262,51600],{"class":51289},[101,138264,51296],{"class":111},[43,138266,138268],{"id":138267},"_154-项目公共部分制作","15.4 项目公共部分制作",[72,138270,138272],{"id":138271},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1449,138274],{"style":126388,"src":138275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[72,138277,138279],{"id":138278},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[10,138281,138282],{},"布局思路：",[1118,138284,138285,138288,138291,138313,138346],{},[58,138286,138287],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[58,138289,138290],{},"里面包含版心的盒子",[58,138292,138293,138294],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1118,138295,138296,138304,138310],{},[58,138297,138298,138299,21488,138301,138303],{},"1 号盒子 里面包含一个",[98,138300,1118],{},[98,138302,1118],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[58,138305,138306,138307,138309],{},"里面的内容是水平排列，所以需要给",[98,138308,58],{},"设置浮动",[58,138311,138312],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[58,138314,138315,138316],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1118,138317,138318,138332,138337],{},[58,138319,138320,138321,21488,138323,138325,138326,138328,138329,138331],{},"2 号盒子 里面包含一个",[98,138322,1118],{},[98,138324,1118],{},"包裹",[98,138327,58],{},"，中间的",[98,138330,1032],{},"可以用样式去设置，也可以用字符 |",[58,138333,138334,138335,138309],{},"里面内容水平排列，给",[98,138336,58],{},[58,138338,138339,138340,138342,138343,138345],{},"找到里面所有偶数的 ",[98,138341,58],{}," 设置样式（偶数的 ",[98,138344,58],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[58,138347,138348,138349],{},"需要用到字体图标",[1118,138350,138351,138357,138360,138363,138366],{},[58,138352,138353,138354],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[98,138355,138356],{},"arrow-icon",[58,138358,138359],{},"先要引入字体图片的资源",[58,138361,138362],{},"在样式里面利用 font-face 来进行声明",[58,138364,138365],{},"在伪元素的 content属性设置 图标的编码",[58,138367,138368],{},"给伪元素设置font-family属性",[10,138370,138371],{},"结构实例代码：",[92,138373,138375],{"className":126532,"code":138374,"language":126534,"meta":20,"style":20},"div::before {\n  content: \"\";\n  display: block;\n}\n",[98,138376,138377,138385,138395,138405],{"__ignoreMap":20},[101,138378,138379,138381,138383],{"class":103,"line":104},[101,138380,51600],{"class":51289},[101,138382,137533],{"class":1950},[101,138384,15560],{"class":111},[101,138386,138387,138389,138391,138393],{"class":103,"line":21},[101,138388,137540],{"class":160},[101,138390,51426],{"class":111},[101,138392,7640],{"class":216},[101,138394,1277],{"class":111},[101,138396,138397,138399,138401,138403],{"class":103,"line":1166},[101,138398,128148],{"class":160},[101,138400,51426],{"class":111},[101,138402,60858],{"class":160},[101,138404,1277],{"class":111},[101,138406,138407],{"class":103,"line":1181},[101,138408,1552],{"class":111},[10,138410,138411],{},"样式实例代码：",[92,138413,138414],{"className":126532,"code":138374,"language":126534,"meta":20,"style":20},[98,138415,138416,138424,138434,138444],{"__ignoreMap":20},[101,138417,138418,138420,138422],{"class":103,"line":104},[101,138419,51600],{"class":51289},[101,138421,137533],{"class":1950},[101,138423,15560],{"class":111},[101,138425,138426,138428,138430,138432],{"class":103,"line":21},[101,138427,137540],{"class":160},[101,138429,51426],{"class":111},[101,138431,7640],{"class":216},[101,138433,1277],{"class":111},[101,138435,138436,138438,138440,138442],{"class":103,"line":1166},[101,138437,128148],{"class":160},[101,138439,51426],{"class":111},[101,138441,60858],{"class":160},[101,138443,1277],{"class":111},[101,138445,138446],{"class":103,"line":1181},[101,138447,1552],{"class":111},[72,138449,138451],{"id":138450},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1118,138453,138454],{},[58,138455,138456],{},"header 盒子必须要有高度",[10,138458,138459,138460,138462,138463],{},"1 号盒子是 ",[98,138461,131544],{}," 标志定位，在正常开发过程中， ",[261,138464,138465,138466,138469],{},"logo的布局其实是有讲究的，需要进行 ",[98,138467,138468],{},"logoSEO","的优化 （★★★）",[1118,138471,138472,138480,138488,138515],{},[58,138473,138474,138476,138477,138479],{},[98,138475,131544],{}," 里面首先放一个 ",[98,138478,39],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[58,138481,138482,138484,138485,138487],{},[98,138483,39],{}," 里面再放一个链接，可以返回首页的，把 ",[98,138486,131544],{}," 的背景图片给链接即可",[58,138489,138490,138491],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1118,138492,138493,138508],{},[58,138494,138495,138496,138499,138500,138503,138504,138507],{},"方法1：",[98,138497,138498],{},"text-indent"," 移到盒子外面（",[98,138501,138502],{},"text-indent: -9999px",") ，然后 ",[98,138505,138506],{},"overflow:hidden"," ，淘宝的做法",[58,138509,138510,138511,138514],{},"方法2：直接给 ",[98,138512,138513],{},"font-size: 0;"," 就看不到文字了，京东的做法",[58,138516,138517,138518,138520,138521,138523],{},"最后给链接一个 ",[98,138519,51396],{}," 属性，这样鼠标放到 ",[98,138522,131544],{}," 上就可以看到提示文字了",[10,138525,138371],{},[92,138527,138528],{"className":127279,"code":131765,"language":127281,"meta":20,"style":20},[98,138529,138530],{"__ignoreMap":20},[101,138531,138532,138534,138536,138538,138540,138542,138544,138546,138548,138550,138552],{"class":103,"line":104},[101,138533,1021],{"class":111},[101,138535,14],{"class":51289},[101,138537,61046],{"class":1950},[101,138539,157],{"class":111},[101,138541,131780],{"class":216},[101,138543,131783],{"class":1950},[101,138545,157],{"class":111},[101,138547,131788],{"class":216},[101,138549,131791],{"class":111},[101,138551,14],{"class":51289},[101,138553,51296],{"class":111},[10,138555,138411],{},[92,138557,138558],{"className":127279,"code":131765,"language":127281,"meta":20,"style":20},[98,138559,138560],{"__ignoreMap":20},[101,138561,138562,138564,138566,138568,138570,138572,138574,138576,138578,138580,138582],{"class":103,"line":104},[101,138563,1021],{"class":111},[101,138565,14],{"class":51289},[101,138567,61046],{"class":1950},[101,138569,157],{"class":111},[101,138571,131780],{"class":216},[101,138573,131783],{"class":1950},[101,138575,157],{"class":111},[101,138577,131788],{"class":216},[101,138579,131791],{"class":111},[101,138581,14],{"class":51289},[101,138583,51296],{"class":111},[10,138585,138586,138587,138589],{},"2 号盒子是 ",[98,138588,131557],{}," 搜索模块定位",[1118,138591,138592,138595,138598,138601],{},[58,138593,138594],{},"search盒子利用定位的方式放在对应的位置",[58,138596,138597],{},"search盒子设置绝对定位，header盒子设置相对定位",[58,138599,138600],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[58,138602,138603],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[10,138605,138371],{},[92,138607,138608],{"className":126532,"code":131852,"language":126534,"meta":20,"style":20},[98,138609,138610,138632,138636,138646],{"__ignoreMap":20},[101,138611,138612,138614,138616,138618,138620,138622,138624,138626,138628,138630],{"class":103,"line":104},[101,138613,51600],{"class":51289},[101,138615,12423],{"class":111},[101,138617,10],{"class":51289},[101,138619,12423],{"class":111},[101,138621,39],{"class":51289},[101,138623,12423],{"class":111},[101,138625,1118],{"class":51289},[101,138627,12423],{"class":111},[101,138629,58],{"class":51289},[101,138631,15560],{"class":111},[101,138633,138634],{"class":103,"line":21},[101,138635,131881],{"class":170},[101,138637,138638,138640,138642,138644],{"class":103,"line":1166},[101,138639,128148],{"class":160},[101,138641,51426],{"class":111},[101,138643,60858],{"class":160},[101,138645,1277],{"class":111},[101,138647,138648],{"class":103,"line":1181},[101,138649,1552],{"class":111},[10,138651,138411],{},[92,138653,138654],{"className":126532,"code":131852,"language":126534,"meta":20,"style":20},[98,138655,138656,138678,138682,138692],{"__ignoreMap":20},[101,138657,138658,138660,138662,138664,138666,138668,138670,138672,138674,138676],{"class":103,"line":104},[101,138659,51600],{"class":51289},[101,138661,12423],{"class":111},[101,138663,10],{"class":51289},[101,138665,12423],{"class":111},[101,138667,39],{"class":51289},[101,138669,12423],{"class":111},[101,138671,1118],{"class":51289},[101,138673,12423],{"class":111},[101,138675,58],{"class":51289},[101,138677,15560],{"class":111},[101,138679,138680],{"class":103,"line":21},[101,138681,131881],{"class":170},[101,138683,138684,138686,138688,138690],{"class":103,"line":1166},[101,138685,128148],{"class":160},[101,138687,51426],{"class":111},[101,138689,60858],{"class":160},[101,138691,1277],{"class":111},[101,138693,138694],{"class":103,"line":1181},[101,138695,1552],{"class":111},[10,138697,138698],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[10,138700,138701,138702,138705],{},"3 号盒子是 ",[98,138703,138704],{},"hotwords"," 热词模块定位",[1118,138707,138708,138711,138714],{},[58,138709,138710],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[58,138712,138713],{},"给里面所有的a标签设置 左右10px的外边距",[58,138715,138716],{},"给第一个a标签设置文字变红色（#c81623）",[10,138718,138371],{},[92,138720,138722],{"className":126532,"code":138721,"language":126534,"meta":20,"style":20},"div {\n  margin: 0 auto;\n}\n",[98,138723,138724,138730,138742],{"__ignoreMap":20},[101,138725,138726,138728],{"class":103,"line":104},[101,138727,51600],{"class":51289},[101,138729,15560],{"class":111},[101,138731,138732,138734,138736,138738,138740],{"class":103,"line":21},[101,138733,70459],{"class":160},[101,138735,51426],{"class":111},[101,138737,303],{"class":160},[101,138739,51545],{"class":160},[101,138741,1277],{"class":111},[101,138743,138744],{"class":103,"line":1166},[101,138745,1552],{"class":111},[10,138747,138411],{},[92,138749,138750],{"className":126532,"code":138721,"language":126534,"meta":20,"style":20},[98,138751,138752,138758,138770],{"__ignoreMap":20},[101,138753,138754,138756],{"class":103,"line":104},[101,138755,51600],{"class":51289},[101,138757,15560],{"class":111},[101,138759,138760,138762,138764,138766,138768],{"class":103,"line":21},[101,138761,70459],{"class":160},[101,138763,51426],{"class":111},[101,138765,303],{"class":160},[101,138767,51545],{"class":160},[101,138769,1277],{"class":111},[101,138771,138772],{"class":103,"line":1166},[101,138773,1552],{"class":111},[10,138775,138776,138777,138780],{},"4 号盒子是 ",[98,138778,138779],{},"shopcar"," 购物车模块",[1118,138782,138783,138788,138791,138794],{},[58,138784,123315,138785,138787],{},[98,138786,138779],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[58,138789,138790],{},"count 统计部分用绝对定位做",[58,138792,138793],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[58,138795,138796],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[10,138798,138371],{},[92,138800,138801],{"className":126532,"code":131964,"language":126534,"meta":20,"style":20},[98,138802,138803,138807,138821,138825,138839,138843,138857,138861,138875,138879],{"__ignoreMap":20},[101,138804,138805],{"class":103,"line":104},[101,138806,131971],{"class":170},[101,138808,138809,138811,138813,138815,138817,138819],{"class":103,"line":21},[101,138810,131976],{"class":1950},[101,138812,79796],{"class":111},[101,138814,128892],{"class":160},[101,138816,51426],{"class":111},[101,138818,131985],{"class":160},[101,138820,129462],{"class":111},[101,138822,138823],{"class":103,"line":1166},[101,138824,131992],{"class":170},[101,138826,138827,138829,138831,138833,138835,138837],{"class":103,"line":1181},[101,138828,131997],{"class":1950},[101,138830,79796],{"class":111},[101,138832,128892],{"class":160},[101,138834,51426],{"class":111},[101,138836,54753],{"class":160},[101,138838,129462],{"class":111},[101,138840,138841],{"class":103,"line":1187},[101,138842,132012],{"class":170},[101,138844,138845,138847,138849,138851,138853,138855],{"class":103,"line":1201},[101,138846,132017],{"class":1950},[101,138848,79796],{"class":111},[101,138850,128892],{"class":160},[101,138852,51426],{"class":111},[101,138854,54820],{"class":160},[101,138856,129462],{"class":111},[101,138858,138859],{"class":103,"line":1207},[101,138860,132032],{"class":170},[101,138862,138863,138865,138867,138869,138871,138873],{"class":103,"line":1298},[101,138864,132037],{"class":1950},[101,138866,79796],{"class":111},[101,138868,128892],{"class":160},[101,138870,51426],{"class":111},[101,138872,86222],{"class":160},[101,138874,129462],{"class":111},[101,138876,138877],{"class":103,"line":1304},[101,138878,132052],{"class":170},[101,138880,138881,138883,138885,138887,138889,138891],{"class":103,"line":1316},[101,138882,132057],{"class":1950},[101,138884,79796],{"class":111},[101,138886,128892],{"class":160},[101,138888,51426],{"class":111},[101,138890,132066],{"class":160},[101,138892,129462],{"class":111},[10,138894,138411],{},[92,138896,138897],{"className":126532,"code":131964,"language":126534,"meta":20,"style":20},[98,138898,138899,138903,138917,138921,138935,138939,138953,138957,138971,138975],{"__ignoreMap":20},[101,138900,138901],{"class":103,"line":104},[101,138902,131971],{"class":170},[101,138904,138905,138907,138909,138911,138913,138915],{"class":103,"line":21},[101,138906,131976],{"class":1950},[101,138908,79796],{"class":111},[101,138910,128892],{"class":160},[101,138912,51426],{"class":111},[101,138914,131985],{"class":160},[101,138916,129462],{"class":111},[101,138918,138919],{"class":103,"line":1166},[101,138920,131992],{"class":170},[101,138922,138923,138925,138927,138929,138931,138933],{"class":103,"line":1181},[101,138924,131997],{"class":1950},[101,138926,79796],{"class":111},[101,138928,128892],{"class":160},[101,138930,51426],{"class":111},[101,138932,54753],{"class":160},[101,138934,129462],{"class":111},[101,138936,138937],{"class":103,"line":1187},[101,138938,132012],{"class":170},[101,138940,138941,138943,138945,138947,138949,138951],{"class":103,"line":1201},[101,138942,132017],{"class":1950},[101,138944,79796],{"class":111},[101,138946,128892],{"class":160},[101,138948,51426],{"class":111},[101,138950,54820],{"class":160},[101,138952,129462],{"class":111},[101,138954,138955],{"class":103,"line":1207},[101,138956,132032],{"class":170},[101,138958,138959,138961,138963,138965,138967,138969],{"class":103,"line":1298},[101,138960,132037],{"class":1950},[101,138962,79796],{"class":111},[101,138964,128892],{"class":160},[101,138966,51426],{"class":111},[101,138968,86222],{"class":160},[101,138970,129462],{"class":111},[101,138972,138973],{"class":103,"line":1304},[101,138974,132052],{"class":170},[101,138976,138977,138979,138981,138983,138985,138987],{"class":103,"line":1316},[101,138978,132057],{"class":1950},[101,138980,79796],{"class":111},[101,138982,128892],{"class":160},[101,138984,51426],{"class":111},[101,138986,132066],{"class":160},[101,138988,129462],{"class":111},[72,138990,138992,138993,138995],{"id":138991},"_1544-nav导航模块制作","15.4.4 ",[98,138994,53702],{},"导航模块制作",[1449,138997],{"style":126388,"src":138998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[10,139000,139001,139003],{},[98,139002,53702],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[10,139005,139006,139007],{},"1 号盒子左侧浮动，",[98,139008,139009],{},"dropdown",[1118,139011,139012,139022,139030,139036,139044,139054,139062,139073],{},[58,139013,139014,139015,100998,139018,139021],{},"1号盒子有讲究，根据相关性 里面包含 ",[98,139016,139017],{},".dt",[98,139019,139020],{},".dd"," 两个盒子",[58,139023,139024,139026,139027,139029],{},[98,139025,139017],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[98,139028,139020],{}," 挤到下面去了",[58,139031,139032,139033,139035],{},"给 ",[98,139034,139020],{}," 盒子设置宽度 和 高度，以及背景颜色",[58,139037,139032,139038,139040,139041,120217],{},[98,139039,139020],{}," 盒子里面定义 无序列表 （",[98,139042,139043],{},"ul > li > a",[58,139045,139046,139047,139049,139050,139053],{},"每个 ",[98,139048,58],{}," 都有一个高度（",[98,139051,139052],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[58,139055,139032,139056,139058,139059,120217],{},[98,139057,58],{}," 里面的a设置文字大小（",[98,139060,139061],{},"14px",[58,139063,139032,139064,139066,139067,139069,139070,139072],{},[98,139065,58],{}," 设置 ",[98,139068,127693],{},"，当鼠标移入的时候，让",[98,139071,58],{},"的背景变成白色，让里面的文字变成红色",[58,139074,139075,139077,139078,139080,139081,139083],{},[98,139076,58],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[98,139079,58],{},"的右侧，那么给",[98,139082,58],{},"设置相对定位",[10,139085,139086],{},"一定要注意相关性",[10,139088,138371],{},[92,139090,139091],{"className":126532,"code":138374,"language":126534,"meta":20,"style":20},[98,139092,139093,139101,139111,139121],{"__ignoreMap":20},[101,139094,139095,139097,139099],{"class":103,"line":104},[101,139096,51600],{"class":51289},[101,139098,137533],{"class":1950},[101,139100,15560],{"class":111},[101,139102,139103,139105,139107,139109],{"class":103,"line":21},[101,139104,137540],{"class":160},[101,139106,51426],{"class":111},[101,139108,7640],{"class":216},[101,139110,1277],{"class":111},[101,139112,139113,139115,139117,139119],{"class":103,"line":1166},[101,139114,128148],{"class":160},[101,139116,51426],{"class":111},[101,139118,60858],{"class":160},[101,139120,1277],{"class":111},[101,139122,139123],{"class":103,"line":1181},[101,139124,1552],{"class":111},[10,139126,138411],{},[92,139128,139129],{"className":126532,"code":138374,"language":126534,"meta":20,"style":20},[98,139130,139131,139139,139149,139159],{"__ignoreMap":20},[101,139132,139133,139135,139137],{"class":103,"line":104},[101,139134,51600],{"class":51289},[101,139136,137533],{"class":1950},[101,139138,15560],{"class":111},[101,139140,139141,139143,139145,139147],{"class":103,"line":21},[101,139142,137540],{"class":160},[101,139144,51426],{"class":111},[101,139146,7640],{"class":216},[101,139148,1277],{"class":111},[101,139150,139151,139153,139155,139157],{"class":103,"line":1166},[101,139152,128148],{"class":160},[101,139154,51426],{"class":111},[101,139156,60858],{"class":160},[101,139158,1277],{"class":111},[101,139160,139161],{"class":103,"line":1181},[101,139162,1552],{"class":111},[10,139164,139165],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[10,139167,139168,139169,139172],{},"2 号盒子左侧浮动，",[98,139170,139171],{},"navitems"," 导航栏组",[1118,139174,139175,139180,139189],{},[58,139176,139177,139178],{},"里面结构是 ",[98,139179,139043],{},[58,139181,139182,139183,139185,139186,139188],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[98,139184,14],{},"左右的",[98,139187,30872],{},"把两侧撑开",[58,139190,139191],{},"让文字垂直居中（行高等于高度）",[1449,139193],{"style":126388,"src":139194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[10,139196,139197],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[10,139199,138371],{},[92,139201,139203],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},".box {\n  float: left;\n}\n",[98,139204,139205,139211,139221],{"__ignoreMap":20},[101,139206,139207,139209],{"class":103,"line":104},[101,139208,130380],{"class":1950},[101,139210,15560],{"class":111},[101,139212,139213,139215,139217,139219],{"class":103,"line":21},[101,139214,131012],{"class":160},[101,139216,51426],{"class":111},[101,139218,23725],{"class":160},[101,139220,1277],{"class":111},[101,139222,139223],{"class":103,"line":1166},[101,139224,1552],{"class":111},[10,139226,138411],{},[92,139228,139229],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},[98,139230,139231,139237,139247],{"__ignoreMap":20},[101,139232,139233,139235],{"class":103,"line":104},[101,139234,130380],{"class":1950},[101,139236,15560],{"class":111},[101,139238,139239,139241,139243,139245],{"class":103,"line":21},[101,139240,131012],{"class":160},[101,139242,51426],{"class":111},[101,139244,23725],{"class":160},[101,139246,1277],{"class":111},[101,139248,139249],{"class":103,"line":1166},[101,139250,1552],{"class":111},[10,139252,139253],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1449,139255],{"style":126388,"src":139256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[92,139258,139259],{"className":126532,"code":130689,"language":126534,"meta":20,"style":20},[98,139260,139261,139267,139283],{"__ignoreMap":20},[101,139262,139263,139265],{"class":103,"line":104},[101,139264,51600],{"class":51289},[101,139266,15560],{"class":111},[101,139268,139269,139271,139273,139275,139277,139279,139281],{"class":103,"line":21},[101,139270,70885],{"class":160},[101,139272,51426],{"class":111},[101,139274,329],{"class":160},[101,139276,51481],{"class":107},[101,139278,51510],{"class":160},[101,139280,129924],{"class":160},[101,139282,1277],{"class":111},[101,139284,139285],{"class":103,"line":1166},[101,139286,1552],{"class":111},[72,139288,139290],{"id":139289},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1449,139292],{"style":126388,"src":139293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1118,139295,139296,139301,139306],{},[58,139297,139298,139300],{},[98,139299,131735],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[58,139302,139303,139305],{},[98,139304,131735],{}," 里面有一个大的版心",[58,139307,139308,139309,139312,139313],{},"版心里面包含 1 号盒子，",[98,139310,139311],{},"mod_service"," 是服务模块，mod 是模块的意思",[1118,139314,139315,139320,139333,139349,139354],{},[58,139316,139032,139317,139319],{},[98,139318,139311],{}," 设置高度（80px）和下边框",[58,139321,139322,139323,139326,139327,139329,139330,139332],{},"在里面定义 ",[98,139324,139325],{},"ul > li"," ,每个",[98,139328,58],{}," 宽度是300px 高度是 50px，给每个",[98,139331,58],{},"设置35px的左内边距",[58,139334,139335,139336,139338,139339,139341,139342,139344,139345,18398,139347,120217],{},"在每个",[98,139337,58],{},"里面，放一个 ",[98,139340,22898],{},"（里面放图标），一个",[98,139343,51600],{},"（里面放",[98,139346,51600],{},[98,139348,10],{},[58,139350,139032,139351,139353],{},[98,139352,22898],{},"设置浮动，让h5与这个div左右排列",[58,139355,139356],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[10,139358,138371],{},[92,139360,139362],{"className":126532,"code":139361,"language":126534,"meta":20,"style":20},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[98,139363,139364,139370,139382,139394,139421],{"__ignoreMap":20},[101,139365,139366,139368],{"class":103,"line":104},[101,139367,134289],{"class":1950},[101,139369,15560],{"class":111},[101,139371,139372,139374,139376,139378,139380],{"class":103,"line":21},[101,139373,70557],{"class":160},[101,139375,51426],{"class":111},[101,139377,811],{"class":160},[101,139379,51481],{"class":107},[101,139381,1277],{"class":111},[101,139383,139384,139386,139388,139390,139392],{"class":103,"line":1166},[101,139385,70777],{"class":160},[101,139387,51426],{"class":111},[101,139389,811],{"class":160},[101,139391,51481],{"class":107},[101,139393,1277],{"class":111},[101,139395,139396,139398,139400,139402,139404,139406,139408,139410,139413,139415,139417,139419],{"class":103,"line":1181},[101,139397,70600],{"class":160},[101,139399,51426],{"class":111},[101,139401,61715],{"class":160},[101,139403,112],{"class":111},[101,139405,134328],{"class":5204},[101,139407,13702],{"class":111},[101,139409,61725],{"class":160},[101,139411,139412],{"class":160}," -10",[101,139414,51481],{"class":107},[101,139416,134347],{"class":160},[101,139418,51481],{"class":107},[101,139420,1277],{"class":111},[101,139422,139423],{"class":103,"line":1187},[101,139424,1552],{"class":111},[10,139426,138411],{},[92,139428,139429],{"className":126532,"code":139361,"language":126534,"meta":20,"style":20},[98,139430,139431,139437,139449,139461,139487],{"__ignoreMap":20},[101,139432,139433,139435],{"class":103,"line":104},[101,139434,134289],{"class":1950},[101,139436,15560],{"class":111},[101,139438,139439,139441,139443,139445,139447],{"class":103,"line":21},[101,139440,70557],{"class":160},[101,139442,51426],{"class":111},[101,139444,811],{"class":160},[101,139446,51481],{"class":107},[101,139448,1277],{"class":111},[101,139450,139451,139453,139455,139457,139459],{"class":103,"line":1166},[101,139452,70777],{"class":160},[101,139454,51426],{"class":111},[101,139456,811],{"class":160},[101,139458,51481],{"class":107},[101,139460,1277],{"class":111},[101,139462,139463,139465,139467,139469,139471,139473,139475,139477,139479,139481,139483,139485],{"class":103,"line":1181},[101,139464,70600],{"class":160},[101,139466,51426],{"class":111},[101,139468,61715],{"class":160},[101,139470,112],{"class":111},[101,139472,134328],{"class":5204},[101,139474,13702],{"class":111},[101,139476,61725],{"class":160},[101,139478,139412],{"class":160},[101,139480,51481],{"class":107},[101,139482,134347],{"class":160},[101,139484,51481],{"class":107},[101,139486,1277],{"class":111},[101,139488,139489],{"class":103,"line":1187},[101,139490,1552],{"class":111},[10,139492,139493],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1118,139495,139496,139499,139505,139511,139523],{},[58,139497,139498],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[58,139500,139501,139502,120217],{},"里面的布局利用 自定义列表来实现（",[98,139503,139504],{},"dl > dt + dd",[58,139506,139032,139507,139510],{},[98,139508,139509],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[58,139512,139032,139513,139516,139517,18398,139519,139522],{},[98,139514,139515],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[98,139518,139515],{},[98,139520,139521],{},"dd","之间有些距离",[58,139524,139525],{},"最后一个 dl 结构和样式不一样，需要单独设置",[10,139527,138371],{},[92,139529,139530],{"className":126532,"code":138721,"language":126534,"meta":20,"style":20},[98,139531,139532,139538,139550],{"__ignoreMap":20},[101,139533,139534,139536],{"class":103,"line":104},[101,139535,51600],{"class":51289},[101,139537,15560],{"class":111},[101,139539,139540,139542,139544,139546,139548],{"class":103,"line":21},[101,139541,70459],{"class":160},[101,139543,51426],{"class":111},[101,139545,303],{"class":160},[101,139547,51545],{"class":160},[101,139549,1277],{"class":111},[101,139551,139552],{"class":103,"line":1166},[101,139553,1552],{"class":111},[10,139555,138411],{},[92,139557,139558],{"className":126532,"code":138721,"language":126534,"meta":20,"style":20},[98,139559,139560,139566,139578],{"__ignoreMap":20},[101,139561,139562,139564],{"class":103,"line":104},[101,139563,51600],{"class":51289},[101,139565,15560],{"class":111},[101,139567,139568,139570,139572,139574,139576],{"class":103,"line":21},[101,139569,70459],{"class":160},[101,139571,51426],{"class":111},[101,139573,303],{"class":160},[101,139575,51545],{"class":160},[101,139577,1277],{"class":111},[101,139579,139580],{"class":103,"line":1166},[101,139581,1552],{"class":111},[10,139583,139584],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1118,139586,139587,139596,139599,139610],{},[58,139588,139589,139590,139592,139593,139595],{},"分为上下两块，上面是 ",[98,139591,131752],{}," 友情链接，下面是 ",[98,139594,131745],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[58,139597,139598],{},"把内容分别复制到相应模块中",[58,139600,139032,139601,139603,139604,139606,139607,139609],{},[98,139602,131752],{}," 设置 15px 的下外边距，给",[98,139605,131752],{}," 里面 的 ",[98,139608,14],{}," 标签设置 左右 3px 的外边距",[58,139611,139612,139613,139615],{},"给",[98,139614,131745],{}," 设置 20px 的行高",[10,139617,138371],{},[92,139619,139620],{"className":126532,"code":138721,"language":126534,"meta":20,"style":20},[98,139621,139622,139628,139640],{"__ignoreMap":20},[101,139623,139624,139626],{"class":103,"line":104},[101,139625,51600],{"class":51289},[101,139627,15560],{"class":111},[101,139629,139630,139632,139634,139636,139638],{"class":103,"line":21},[101,139631,70459],{"class":160},[101,139633,51426],{"class":111},[101,139635,303],{"class":160},[101,139637,51545],{"class":160},[101,139639,1277],{"class":111},[101,139641,139642],{"class":103,"line":1166},[101,139643,1552],{"class":111},[10,139645,138411],{},[92,139647,139648],{"className":126532,"code":138721,"language":126534,"meta":20,"style":20},[98,139649,139650,139656,139668],{"__ignoreMap":20},[101,139651,139652,139654],{"class":103,"line":104},[101,139653,51600],{"class":51289},[101,139655,15560],{"class":111},[101,139657,139658,139660,139662,139664,139666],{"class":103,"line":21},[101,139659,70459],{"class":160},[101,139661,51426],{"class":111},[101,139663,303],{"class":160},[101,139665,51545],{"class":160},[101,139667,1277],{"class":111},[101,139669,139670],{"class":103,"line":1166},[101,139671,1552],{"class":111},[10,139673,139674],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5114,139676,139677],{},"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":20,"searchDepth":21,"depth":21,"links":139679},[139680,139681,139682,139689],{"id":137960,"depth":21,"text":137961},{"id":137979,"depth":21,"text":137980},{"id":138006,"depth":21,"text":138007,"children":139683},[139684,139685,139686,139687,139688],{"id":138010,"depth":1166,"text":138011},{"id":138023,"depth":1166,"text":138024},{"id":138047,"depth":1166,"text":138048},{"id":138069,"depth":1166,"text":138070},{"id":138141,"depth":1166,"text":138142},{"id":138267,"depth":21,"text":138268,"children":139690},[139691,139692,139693,139694,139696],{"id":138271,"depth":1166,"text":138272},{"id":138278,"depth":1166,"text":138279},{"id":138450,"depth":1166,"text":138451},{"id":138991,"depth":1166,"text":139695},"15.4.4 nav导航模块制作",{"id":139289,"depth":1166,"text":139290},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137952,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139703,"title":139704,"body":139705,"description":23365,"extension":24,"meta":142107,"navigation":27,"path":142108,"seo":142109,"stem":142110,"__hash__":142111},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139706,"toc":142084},[139707,139710,139714,139718,139730,139733,139736,139739,139750,139752,139776,139778,139802,139807,139810,139812,139848,139850,139886,139889,139894,139897,139900,139903,139933,139940,139943,139953,139955,139989,139992,140026,140032,140049,140051,140087,140089,140125,140130,140155,140157,140183,140185,140209,140216,140219,140283,140285,140327,140329,140369,140376,140381,140383,140413,140415,140445,140449,140452,140459,140471,140473,140499,140501,140525,140528,140530,140554,140560,140570,140572,140602,140604,140634,140641,140682,140684,140720,140722,140758,140762,140765,140768,140771,140777,140782,140785,140808,140811,140835,140838,140862,140867,140870,140873,140876,140879,140882,140956,140958,140988,140990,141020,141023,141026,141058,141062,141066,141080,141089,141092,141097,141099,141193,141195,141289,141312,141314,141338,141340,141364,141371,141374,141384,141386,141410,141415,141423,141425,141455,141460,141500,141502,141528,141530,141556,141560,141563,141568,141571,141575,141583,141590,141598,141600,141630,141632,141662,141670,141673,141676,141678,141708,141710,141740,141743,141748,141750,141774,141776,141800,141803,141888,141890,141914,141916,141940,141944,141946,141970,141972,142006,142010,142024,142027,142032,142035,142040,142043,142073,142081],[39,139708,139704],{"id":139709},"_16-品优购项目下篇-主体与页面开发",[43,139711,139713],{"id":139712},"_161-项目主体模块制作","16.1 项目主体模块制作",[72,139715,139717],{"id":139716},"_1611-首页制作","16.1.1 首页制作",[10,139719,139720,139722,139723,139725,139726,139729],{},[261,139721,102038],{}," 主体模块是 ",[261,139724,74047],{}," 里面专有的，注意需要新的样式文件 ",[261,139727,139728],{},"index.css，"," 就不要写在common.css中了",[1449,139731],{"style":126388,"src":139732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1449,139734],{"style":126388,"src":139735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[10,139737,139738],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1118,139740,139741,139744,139747],{},[58,139742,139743],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[58,139745,139746],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[58,139748,139749],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[10,139751,138371],{},[92,139753,139754],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},[98,139755,139756,139762,139772],{"__ignoreMap":20},[101,139757,139758,139760],{"class":103,"line":104},[101,139759,130380],{"class":1950},[101,139761,15560],{"class":111},[101,139763,139764,139766,139768,139770],{"class":103,"line":21},[101,139765,131012],{"class":160},[101,139767,51426],{"class":111},[101,139769,23725],{"class":160},[101,139771,1277],{"class":111},[101,139773,139774],{"class":103,"line":1166},[101,139775,1552],{"class":111},[10,139777,138411],{},[92,139779,139780],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},[98,139781,139782,139788,139798],{"__ignoreMap":20},[101,139783,139784,139786],{"class":103,"line":104},[101,139785,130380],{"class":1950},[101,139787,15560],{"class":111},[101,139789,139790,139792,139794,139796],{"class":103,"line":21},[101,139791,131012],{"class":160},[101,139793,51426],{"class":111},[101,139795,23725],{"class":160},[101,139797,1277],{"class":111},[101,139799,139800],{"class":103,"line":1166},[101,139801,1552],{"class":111},[55,139803,139804],{},[58,139805,139806],{},"左侧focus模块制作",[1449,139808],{"style":126388,"src":139809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[10,139811,138371],{},[92,139813,139814],{"className":126532,"code":127855,"language":126534,"meta":20,"style":20},[98,139815,139816,139824,139834,139844],{"__ignoreMap":20},[101,139817,139818,139820,139822],{"class":103,"line":104},[101,139819,53810],{"class":51289},[101,139821,61889],{"class":1950},[101,139823,15560],{"class":111},[101,139825,139826,139828,139830,139832],{"class":103,"line":21},[101,139827,127870],{"class":160},[101,139829,51426],{"class":111},[101,139831,54878],{"class":160},[101,139833,1277],{"class":111},[101,139835,139836,139838,139840,139842],{"class":103,"line":1166},[101,139837,70787],{"class":160},[101,139839,51426],{"class":111},[101,139841,54726],{"class":160},[101,139843,1277],{"class":111},[101,139845,139846],{"class":103,"line":1181},[101,139847,1552],{"class":111},[10,139849,138411],{},[92,139851,139852],{"className":126532,"code":127855,"language":126534,"meta":20,"style":20},[98,139853,139854,139862,139872,139882],{"__ignoreMap":20},[101,139855,139856,139858,139860],{"class":103,"line":104},[101,139857,53810],{"class":51289},[101,139859,61889],{"class":1950},[101,139861,15560],{"class":111},[101,139863,139864,139866,139868,139870],{"class":103,"line":21},[101,139865,127870],{"class":160},[101,139867,51426],{"class":111},[101,139869,54878],{"class":160},[101,139871,1277],{"class":111},[101,139873,139874,139876,139878,139880],{"class":103,"line":1166},[101,139875,70787],{"class":160},[101,139877,51426],{"class":111},[101,139879,54726],{"class":160},[101,139881,1277],{"class":111},[101,139883,139884],{"class":103,"line":1181},[101,139885,1552],{"class":111},[10,139887,139888],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[55,139890,139891],{"start":21},[58,139892,139893],{},"右侧newsflash模块制作",[1449,139895],{"style":126388,"src":139896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[10,139898,139899],{},"右侧的模块 分为上中下三个盒子",[10,139901,139902],{},"结构代码：",[92,139904,139905],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,139906,139907],{"__ignoreMap":20},[101,139908,139909,139911,139913,139915,139917,139919,139921,139923,139925,139927,139929,139931],{"class":103,"line":104},[101,139910,1021],{"class":111},[101,139912,1449],{"class":51289},[101,139914,55228],{"class":1950},[101,139916,157],{"class":111},[101,139918,134049],{"class":216},[101,139920,55236],{"class":1950},[101,139922,157],{"class":111},[101,139924,134056],{"class":216},[101,139926,134059],{"class":1950},[101,139928,157],{"class":111},[101,139930,134064],{"class":216},[101,139932,51296],{"class":111},[10,139934,139935,139936,139939],{},"1 号盒子为 ",[98,139937,139938],{},"news"," 新闻模块 高度为 165px",[1449,139941],{"style":126388,"src":139942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[10,139944,139945,139946,139949,139950],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[98,139947,139948],{},"news-hd","，下面是 ",[98,139951,139952],{},"news-bd",[10,139954,139902],{},[92,139956,139957],{"className":127279,"code":130636,"language":127281,"meta":20,"style":20},[98,139958,139959,139963,139977,139981],{"__ignoreMap":20},[101,139960,139961],{"class":103,"line":104},[101,139962,130643],{"class":170},[101,139964,139965,139967,139969,139971,139973,139975],{"class":103,"line":21},[101,139966,1021],{"class":111},[101,139968,51600],{"class":51289},[101,139970,53475],{"class":1950},[101,139972,157],{"class":111},[101,139974,130656],{"class":216},[101,139976,51296],{"class":111},[101,139978,139979],{"class":103,"line":1166},[101,139980,130663],{"class":111},[101,139982,139983,139985,139987],{"class":103,"line":1181},[101,139984,51774],{"class":111},[101,139986,51600],{"class":51289},[101,139988,51296],{"class":111},[10,139990,139991],{},"样式代码：",[92,139993,139994],{"className":127279,"code":130636,"language":127281,"meta":20,"style":20},[98,139995,139996,140000,140014,140018],{"__ignoreMap":20},[101,139997,139998],{"class":103,"line":104},[101,139999,130643],{"class":170},[101,140001,140002,140004,140006,140008,140010,140012],{"class":103,"line":21},[101,140003,1021],{"class":111},[101,140005,51600],{"class":51289},[101,140007,53475],{"class":1950},[101,140009,157],{"class":111},[101,140011,130656],{"class":216},[101,140013,51296],{"class":111},[101,140015,140016],{"class":103,"line":1166},[101,140017,130663],{"class":111},[101,140019,140020,140022,140024],{"class":103,"line":1181},[101,140021,51774],{"class":111},[101,140023,51600],{"class":51289},[101,140025,51296],{"class":111},[10,140027,140028,140029,140031],{},"上面是",[98,140030,139948],{},"，设置高度是 33px，设置下边框",[1118,140033,140034,140040],{},[58,140035,140036,140037,140039],{},"里面放一个",[98,140038,22898],{}," 标题",[58,140041,140042,140043,140045,140046,140048],{},"放一个a",[98,140044,102673],{},"，内容是 更多，然后让 ",[98,140047,14],{}," 进行右浮动，三角用伪元素设置字体图标就好",[10,140050,139902],{},[92,140052,140053],{"className":126532,"code":138374,"language":126534,"meta":20,"style":20},[98,140054,140055,140063,140073,140083],{"__ignoreMap":20},[101,140056,140057,140059,140061],{"class":103,"line":104},[101,140058,51600],{"class":51289},[101,140060,137533],{"class":1950},[101,140062,15560],{"class":111},[101,140064,140065,140067,140069,140071],{"class":103,"line":21},[101,140066,137540],{"class":160},[101,140068,51426],{"class":111},[101,140070,7640],{"class":216},[101,140072,1277],{"class":111},[101,140074,140075,140077,140079,140081],{"class":103,"line":1166},[101,140076,128148],{"class":160},[101,140078,51426],{"class":111},[101,140080,60858],{"class":160},[101,140082,1277],{"class":111},[101,140084,140085],{"class":103,"line":1181},[101,140086,1552],{"class":111},[10,140088,139991],{},[92,140090,140091],{"className":126532,"code":138374,"language":126534,"meta":20,"style":20},[98,140092,140093,140101,140111,140121],{"__ignoreMap":20},[101,140094,140095,140097,140099],{"class":103,"line":104},[101,140096,51600],{"class":51289},[101,140098,137533],{"class":1950},[101,140100,15560],{"class":111},[101,140102,140103,140105,140107,140109],{"class":103,"line":21},[101,140104,137540],{"class":160},[101,140106,51426],{"class":111},[101,140108,7640],{"class":216},[101,140110,1277],{"class":111},[101,140112,140113,140115,140117,140119],{"class":103,"line":1166},[101,140114,128148],{"class":160},[101,140116,51426],{"class":111},[101,140118,60858],{"class":160},[101,140120,1277],{"class":111},[101,140122,140123],{"class":103,"line":1181},[101,140124,1552],{"class":111},[10,140126,140127,140128],{},"下面是",[98,140129,139952],{},[1118,140131,140132,140140],{},[58,140133,140134,140135,100998,140137,140139],{},"里面包含 ",[98,140136,1118],{},[98,140138,58],{}," 还有链接",[58,140141,139612,140142,140144,140145,140147,140148,140151,140152],{},[98,140143,58],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[98,140146,131198],{}," 2.设置 ",[98,140149,140150],{},"white-space: nowrap;"," 3. 设置 ",[98,140153,140154],{},"text-overflow: ellipsis;",[10,140156,139902],{},[92,140158,140160],{"className":126532,"code":140159,"language":126534,"meta":20,"style":20},"div {\n  overflow: hidden;\n}\n",[98,140161,140162,140168,140179],{"__ignoreMap":20},[101,140163,140164,140166],{"class":103,"line":104},[101,140165,51600],{"class":51289},[101,140167,15560],{"class":111},[101,140169,140170,140173,140175,140177],{"class":103,"line":21},[101,140171,140172],{"class":160},"  overflow",[101,140174,51426],{"class":111},[101,140176,61703],{"class":160},[101,140178,1277],{"class":111},[101,140180,140181],{"class":103,"line":1166},[101,140182,1552],{"class":111},[10,140184,139991],{},[92,140186,140187],{"className":126532,"code":140159,"language":126534,"meta":20,"style":20},[98,140188,140189,140195,140205],{"__ignoreMap":20},[101,140190,140191,140193],{"class":103,"line":104},[101,140192,51600],{"class":51289},[101,140194,15560],{"class":111},[101,140196,140197,140199,140201,140203],{"class":103,"line":21},[101,140198,140172],{"class":160},[101,140200,51426],{"class":111},[101,140202,61703],{"class":160},[101,140204,1277],{"class":111},[101,140206,140207],{"class":103,"line":1166},[101,140208,1552],{"class":111},[10,140210,140211,140212,140215],{},"2 号盒子为 ",[98,140213,140214],{},"lifeservice"," 生活服务模块 高度为 209px",[1449,140217],{"style":126388,"src":140218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1118,140220,140221,140224,140234,140258,140269],{},[58,140222,140223],{},"设置边框（左右下边框）",[58,140225,140226,140227,140230,140231,140233],{},"里面的内容 是 ",[98,140228,140229],{},"ul > 12*li","，给",[98,140232,58],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[58,140235,140236,140237],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1118,140238,140239,140244,140253],{},[58,140240,140241,140243],{},[98,140242,140214],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[58,140245,140246,140247,140249,140250,140252],{},"可以让 ",[98,140248,140214],{}," 里面的 ",[98,140251,1118],{}," 宽度为 252，就可以装的下 4 个 小 li",[58,140254,140255,140257],{},[98,140256,140214],{}," 盒子 overflow 隐藏多余的部分就可以了",[58,140259,116447,140260,140262,140263,140265,140266,140268],{},[98,140261,58],{}," 里面放一个 ",[98,140264,552],{},"（里面放图标），下面的文本用 ",[98,140267,10],{}," 标签包裹",[58,140270,139032,140271,140273,140274,140276,140277,139066,140279,140282],{},[98,140272,552],{}," 设置 24px宽和28px的高（注意 ",[98,140275,552],{}," 是行内元素， 转成行内块），给 ",[98,140278,58],{},[98,140280,140281],{},"text-align:center"," 让里面内容居中显示",[10,140284,139902],{},[92,140286,140288],{"className":126532,"code":140287,"language":126534,"meta":20,"style":20},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[98,140289,140290,140308,140313,140323],{"__ignoreMap":20},[101,140291,140292,140294,140296,140298,140300,140302,140304,140306],{"class":103,"line":104},[101,140293,101],{"class":51289},[101,140295,12423],{"class":111},[101,140297,14],{"class":51289},[101,140299,12423],{"class":111},[101,140301,23542],{"class":51289},[101,140303,12423],{"class":111},[101,140305,261],{"class":51289},[101,140307,15560],{"class":111},[101,140309,140310],{"class":103,"line":21},[101,140311,140312],{"class":170},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[101,140314,140315,140317,140319,140321],{"class":103,"line":1166},[101,140316,128148],{"class":160},[101,140318,51426],{"class":111},[101,140320,128210],{"class":160},[101,140322,1277],{"class":111},[101,140324,140325],{"class":103,"line":1181},[101,140326,1552],{"class":111},[10,140328,139991],{},[92,140330,140331],{"className":126532,"code":140287,"language":126534,"meta":20,"style":20},[98,140332,140333,140351,140355,140365],{"__ignoreMap":20},[101,140334,140335,140337,140339,140341,140343,140345,140347,140349],{"class":103,"line":104},[101,140336,101],{"class":51289},[101,140338,12423],{"class":111},[101,140340,14],{"class":51289},[101,140342,12423],{"class":111},[101,140344,23542],{"class":51289},[101,140346,12423],{"class":111},[101,140348,261],{"class":51289},[101,140350,15560],{"class":111},[101,140352,140353],{"class":103,"line":21},[101,140354,140312],{"class":170},[101,140356,140357,140359,140361,140363],{"class":103,"line":1166},[101,140358,128148],{"class":160},[101,140360,51426],{"class":111},[101,140362,128210],{"class":160},[101,140364,1277],{"class":111},[101,140366,140367],{"class":103,"line":1181},[101,140368,1552],{"class":111},[10,140370,140371,140372,140375],{},"3 号盒子为 ",[98,140373,140374],{},"bargain"," 特价商品",[1118,140377,140378],{},[58,140379,140380],{},"这个比较简单，直接插入一张图片即可",[10,140382,139902],{},[92,140384,140385],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,140386,140387],{"__ignoreMap":20},[101,140388,140389,140391,140393,140395,140397,140399,140401,140403,140405,140407,140409,140411],{"class":103,"line":104},[101,140390,1021],{"class":111},[101,140392,1449],{"class":51289},[101,140394,55228],{"class":1950},[101,140396,157],{"class":111},[101,140398,134049],{"class":216},[101,140400,55236],{"class":1950},[101,140402,157],{"class":111},[101,140404,134056],{"class":216},[101,140406,134059],{"class":1950},[101,140408,157],{"class":111},[101,140410,134064],{"class":216},[101,140412,51296],{"class":111},[10,140414,139991],{},[92,140416,140417],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,140418,140419],{"__ignoreMap":20},[101,140420,140421,140423,140425,140427,140429,140431,140433,140435,140437,140439,140441,140443],{"class":103,"line":104},[101,140422,1021],{"class":111},[101,140424,1449],{"class":51289},[101,140426,55228],{"class":1950},[101,140428,157],{"class":111},[101,140430,134049],{"class":216},[101,140432,55236],{"class":1950},[101,140434,157],{"class":111},[101,140436,134056],{"class":216},[101,140438,134059],{"class":1950},[101,140440,157],{"class":111},[101,140442,134064],{"class":216},[101,140444,51296],{"class":111},[72,140446,140448],{"id":140447},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1449,140450],{"style":126388,"src":140451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[10,140453,140454,140455,140458],{},"大盒子 ",[98,140456,140457],{},"recom"," 推荐模块 recommend",[1118,140460,140461],{},[58,140462,140463,140464,140466,140467,140470],{},"给这个 ",[98,140465,140457],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[98,140468,140469],{},"#ebebeb","），设置距离上边 12px",[10,140472,139902],{},[92,140474,140476],{"className":126532,"code":140475,"language":126534,"meta":20,"style":20},"div {\n  background-color: #f0f0f0;\n}\n",[98,140477,140478,140484,140495],{"__ignoreMap":20},[101,140479,140480,140482],{"class":103,"line":104},[101,140481,51600],{"class":51289},[101,140483,15560],{"class":111},[101,140485,140486,140488,140490,140493],{"class":103,"line":21},[101,140487,70867],{"class":160},[101,140489,51426],{"class":111},[101,140491,140492],{"class":160},"#f0f0f0",[101,140494,1277],{"class":111},[101,140496,140497],{"class":103,"line":1166},[101,140498,1552],{"class":111},[10,140500,139991],{},[92,140502,140503],{"className":126532,"code":140475,"language":126534,"meta":20,"style":20},[98,140504,140505,140511,140521],{"__ignoreMap":20},[101,140506,140507,140509],{"class":103,"line":104},[101,140508,51600],{"class":51289},[101,140510,15560],{"class":111},[101,140512,140513,140515,140517,140519],{"class":103,"line":21},[101,140514,70867],{"class":160},[101,140516,51426],{"class":111},[101,140518,140492],{"class":160},[101,140520,1277],{"class":111},[101,140522,140523],{"class":103,"line":1166},[101,140524,1552],{"class":111},[10,140526,140527],{},"里面包含 2 个盒子， 浮动即可",[10,140529,139902],{},[92,140531,140532],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},[98,140533,140534,140540,140550],{"__ignoreMap":20},[101,140535,140536,140538],{"class":103,"line":104},[101,140537,130380],{"class":1950},[101,140539,15560],{"class":111},[101,140541,140542,140544,140546,140548],{"class":103,"line":21},[101,140543,131012],{"class":160},[101,140545,51426],{"class":111},[101,140547,23725],{"class":160},[101,140549,1277],{"class":111},[101,140551,140552],{"class":103,"line":1166},[101,140553,1552],{"class":111},[10,140555,140556,140557],{},"1 号盒子 ",[98,140558,140559],{},"recom_hd",[1118,140561,140562,140565],{},[58,140563,140564],{},"设置宽度205px，高度163px",[58,140566,140036,140567,140569],{},[98,140568,1449],{},"标签，插入图片即可",[10,140571,139902],{},[92,140573,140574],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,140575,140576],{"__ignoreMap":20},[101,140577,140578,140580,140582,140584,140586,140588,140590,140592,140594,140596,140598,140600],{"class":103,"line":104},[101,140579,1021],{"class":111},[101,140581,1449],{"class":51289},[101,140583,55228],{"class":1950},[101,140585,157],{"class":111},[101,140587,134049],{"class":216},[101,140589,55236],{"class":1950},[101,140591,157],{"class":111},[101,140593,134056],{"class":216},[101,140595,134059],{"class":1950},[101,140597,157],{"class":111},[101,140599,134064],{"class":216},[101,140601,51296],{"class":111},[10,140603,139991],{},[92,140605,140606],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,140607,140608],{"__ignoreMap":20},[101,140609,140610,140612,140614,140616,140618,140620,140622,140624,140626,140628,140630,140632],{"class":103,"line":104},[101,140611,1021],{"class":111},[101,140613,1449],{"class":51289},[101,140615,55228],{"class":1950},[101,140617,157],{"class":111},[101,140619,134049],{"class":216},[101,140621,55236],{"class":1950},[101,140623,157],{"class":111},[101,140625,134056],{"class":216},[101,140627,134059],{"class":1950},[101,140629,157],{"class":111},[101,140631,134064],{"class":216},[101,140633,51296],{"class":111},[10,140635,140636,140637,140640],{},"2 号盒子 ",[98,140638,140639],{},"recom_bd"," ，注意里面的小竖线",[1118,140642,140643,140654,140657,140662,140667],{},[58,140644,140645,140646,140648,140649,140651,140652],{},"右侧结构里面放 ",[98,140647,1118],{}," 包含 4个 ",[98,140650,58],{},"，每个li里面包含一个",[98,140653,1449],{},[58,140655,140656],{},"直接利用切片工具把里面的内容当成一张图片",[58,140658,139032,140659,140661],{},[98,140660,58],{}," 设置浮动",[58,140663,139032,140664,140666],{},[98,140665,1449],{}," 设置宽高，宽度 248px，高度 163px",[58,140668,140669,140670,140230,140673,140675,140676,140678,140679],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[98,140671,140672],{},"top 10px",[98,140674,58],{},"设置相对定位（注意，最后一个",[98,140677,58],{},"不用设置伪元素），可以利用 ",[98,140680,140681],{},"nth-child(-n+3){...}",[10,140683,139902],{},[92,140685,140686],{"className":126532,"code":138374,"language":126534,"meta":20,"style":20},[98,140687,140688,140696,140706,140716],{"__ignoreMap":20},[101,140689,140690,140692,140694],{"class":103,"line":104},[101,140691,51600],{"class":51289},[101,140693,137533],{"class":1950},[101,140695,15560],{"class":111},[101,140697,140698,140700,140702,140704],{"class":103,"line":21},[101,140699,137540],{"class":160},[101,140701,51426],{"class":111},[101,140703,7640],{"class":216},[101,140705,1277],{"class":111},[101,140707,140708,140710,140712,140714],{"class":103,"line":1166},[101,140709,128148],{"class":160},[101,140711,51426],{"class":111},[101,140713,60858],{"class":160},[101,140715,1277],{"class":111},[101,140717,140718],{"class":103,"line":1181},[101,140719,1552],{"class":111},[10,140721,139991],{},[92,140723,140724],{"className":126532,"code":138374,"language":126534,"meta":20,"style":20},[98,140725,140726,140734,140744,140754],{"__ignoreMap":20},[101,140727,140728,140730,140732],{"class":103,"line":104},[101,140729,51600],{"class":51289},[101,140731,137533],{"class":1950},[101,140733,15560],{"class":111},[101,140735,140736,140738,140740,140742],{"class":103,"line":21},[101,140737,137540],{"class":160},[101,140739,51426],{"class":111},[101,140741,7640],{"class":216},[101,140743,1277],{"class":111},[101,140745,140746,140748,140750,140752],{"class":103,"line":1166},[101,140747,128148],{"class":160},[101,140749,51426],{"class":111},[101,140751,60858],{"class":160},[101,140753,1277],{"class":111},[101,140755,140756],{"class":103,"line":1181},[101,140757,1552],{"class":111},[72,140759,140761],{"id":140760},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1449,140763],{"style":126388,"src":140764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[10,140766,140767],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[10,140769,140770],{},"第一楼是家用电器模块： 里面包含两个盒子",[10,140772,140773,140776],{},[98,140774,140775],{},"box_hd"," 制作",[10,140778,140556,140779,140781],{},[98,140780,140775],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1449,140783],{"style":126388,"src":140784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1118,140786,140787,140792,140797,140800],{},[58,140788,140789,140791],{},[98,140790,140775],{}," 给 30px 的高度，2个像素的下边框",[58,140793,140794,140795],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[98,140796,139043],{},[58,140798,140799],{},"左侧盒左浮动，右侧盒子右浮动",[58,140801,140802,140804,140805,140807],{},[98,140803,14],{},"标签之间的距离用左右的",[98,140806,30872],{},"撑开即可",[10,140809,140810],{},"结构代码",[92,140812,140813],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},[98,140814,140815,140821,140831],{"__ignoreMap":20},[101,140816,140817,140819],{"class":103,"line":104},[101,140818,130380],{"class":1950},[101,140820,15560],{"class":111},[101,140822,140823,140825,140827,140829],{"class":103,"line":21},[101,140824,131012],{"class":160},[101,140826,51426],{"class":111},[101,140828,23725],{"class":160},[101,140830,1277],{"class":111},[101,140832,140833],{"class":103,"line":1166},[101,140834,1552],{"class":111},[10,140836,140837],{},"样式代码",[92,140839,140840],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},[98,140841,140842,140848,140858],{"__ignoreMap":20},[101,140843,140844,140846],{"class":103,"line":104},[101,140845,130380],{"class":1950},[101,140847,15560],{"class":111},[101,140849,140850,140852,140854,140856],{"class":103,"line":21},[101,140851,131012],{"class":160},[101,140853,51426],{"class":111},[101,140855,23725],{"class":160},[101,140857,1277],{"class":111},[101,140859,140860],{"class":103,"line":1166},[101,140861,1552],{"class":111},[10,140863,140864,140776],{},[98,140865,140866],{},"box_bd",[10,140868,140869],{},"2 号盒子 box_bd，不要给高度",[1449,140871],{"style":126388,"src":140872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[10,140874,140875],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[10,140877,140878],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[10,140880,140881],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1118,140883,140884,140896,140912],{},[58,140885,140886,140888,140889,140892,140893,140895],{},[98,140887,140866],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[98,140890,140891],{},"tab_content","，在",[98,140894,140891],{}," 里面包裹tab选项卡对应的内容",[58,140897,140898,140899,140902,140903,140905,140906,140908,140909,140911],{},"内容被一个大盒子包裹（",[98,140900,140901],{},"tab_list_item","），里面是 ",[98,140904,1118],{}," 包裹 5个 ",[98,140907,58],{},"，每个",[98,140910,58],{},"设置对应的宽度，然后设置浮动",[58,140913,140914,140915,140917,140918,140920,140921],{},"而这5个",[98,140916,58],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[98,140919,58],{},"设置",[1118,140922,140923,140941,140944],{},[58,140924,140925,140926,140928,140929,140931,140932,140934,140935,140937,140938,140940],{},"第一个小 ",[98,140927,58],{}," 分为上下结构，上面是 ",[98,140930,1118],{}," 包裹 ",[98,140933,58],{}," ，",[98,140936,58],{},"里面包裹 ",[98,140939,14],{},"，下面插入一张图片",[58,140942,140943],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[58,140945,140946,140947,140949,140950,140952,140953,140955],{},"后面的小 ",[98,140948,58],{}," 里面先放一个",[98,140951,14],{},"标签，然后在",[98,140954,14],{},"标签里面插入图片即可",[10,140957,140810],{},[92,140959,140960],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,140961,140962],{"__ignoreMap":20},[101,140963,140964,140966,140968,140970,140972,140974,140976,140978,140980,140982,140984,140986],{"class":103,"line":104},[101,140965,1021],{"class":111},[101,140967,1449],{"class":51289},[101,140969,55228],{"class":1950},[101,140971,157],{"class":111},[101,140973,134049],{"class":216},[101,140975,55236],{"class":1950},[101,140977,157],{"class":111},[101,140979,134056],{"class":216},[101,140981,134059],{"class":1950},[101,140983,157],{"class":111},[101,140985,134064],{"class":216},[101,140987,51296],{"class":111},[10,140989,140837],{},[92,140991,140992],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,140993,140994],{"__ignoreMap":20},[101,140995,140996,140998,141000,141002,141004,141006,141008,141010,141012,141014,141016,141018],{"class":103,"line":104},[101,140997,1021],{"class":111},[101,140999,1449],{"class":51289},[101,141001,55228],{"class":1950},[101,141003,157],{"class":111},[101,141005,134049],{"class":216},[101,141007,55236],{"class":1950},[101,141009,157],{"class":111},[101,141011,134056],{"class":216},[101,141013,134059],{"class":1950},[101,141015,157],{"class":111},[101,141017,134064],{"class":216},[101,141019,51296],{"class":111},[10,141021,141022],{},"tab栏切换需求！！！！！！介绍：",[1449,141024],{"style":126388,"src":141025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1118,141027,141028,141036,141042,141045],{},[58,141029,141030,141033,141034],{},[98,141031,141032],{},"tab","栏的布局是 ",[98,141035,139043],{},[58,141037,141038,141039,141041],{},"有多少个",[98,141040,141032],{},"选项卡，那么对应就有多少个内容",[58,141043,141044],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[58,141046,141047,141048,141051,141052,141054,141055,141057],{},"等后面我们学习了",[98,141049,141050],{},"js","之后，我们就会配合",[98,141053,141050],{},"来实现，",[98,141056,141032],{},"栏的切换",[43,141059,141061],{"id":141060},"_162-列表制作","16.2 列表制作",[72,141063,141065],{"id":141064},"_1621-准备工作","16.2.1 准备工作",[1118,141067,141068,141071,141074,141077],{},[58,141069,141070],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[58,141072,141073],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[58,141075,141076],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[58,141078,141079],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[72,141081,141083,141084,100998,141086,141088],{"id":141082},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[98,141085,131537],{},[98,141087,53702],{}," 修改",[1449,141090],{"style":126388,"src":141091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1118,141093,141094],{},[58,141095,141096],{},"秒杀盒子 sk（ second kill ） 定位即可",[10,141098,139902],{},[92,141100,141101],{"className":126532,"code":131964,"language":126534,"meta":20,"style":20},[98,141102,141103,141107,141121,141125,141139,141143,141157,141161,141175,141179],{"__ignoreMap":20},[101,141104,141105],{"class":103,"line":104},[101,141106,131971],{"class":170},[101,141108,141109,141111,141113,141115,141117,141119],{"class":103,"line":21},[101,141110,131976],{"class":1950},[101,141112,79796],{"class":111},[101,141114,128892],{"class":160},[101,141116,51426],{"class":111},[101,141118,131985],{"class":160},[101,141120,129462],{"class":111},[101,141122,141123],{"class":103,"line":1166},[101,141124,131992],{"class":170},[101,141126,141127,141129,141131,141133,141135,141137],{"class":103,"line":1181},[101,141128,131997],{"class":1950},[101,141130,79796],{"class":111},[101,141132,128892],{"class":160},[101,141134,51426],{"class":111},[101,141136,54753],{"class":160},[101,141138,129462],{"class":111},[101,141140,141141],{"class":103,"line":1187},[101,141142,132012],{"class":170},[101,141144,141145,141147,141149,141151,141153,141155],{"class":103,"line":1201},[101,141146,132017],{"class":1950},[101,141148,79796],{"class":111},[101,141150,128892],{"class":160},[101,141152,51426],{"class":111},[101,141154,54820],{"class":160},[101,141156,129462],{"class":111},[101,141158,141159],{"class":103,"line":1207},[101,141160,132032],{"class":170},[101,141162,141163,141165,141167,141169,141171,141173],{"class":103,"line":1298},[101,141164,132037],{"class":1950},[101,141166,79796],{"class":111},[101,141168,128892],{"class":160},[101,141170,51426],{"class":111},[101,141172,86222],{"class":160},[101,141174,129462],{"class":111},[101,141176,141177],{"class":103,"line":1304},[101,141178,132052],{"class":170},[101,141180,141181,141183,141185,141187,141189,141191],{"class":103,"line":1316},[101,141182,132057],{"class":1950},[101,141184,79796],{"class":111},[101,141186,128892],{"class":160},[101,141188,51426],{"class":111},[101,141190,132066],{"class":160},[101,141192,129462],{"class":111},[10,141194,139991],{},[92,141196,141197],{"className":126532,"code":131964,"language":126534,"meta":20,"style":20},[98,141198,141199,141203,141217,141221,141235,141239,141253,141257,141271,141275],{"__ignoreMap":20},[101,141200,141201],{"class":103,"line":104},[101,141202,131971],{"class":170},[101,141204,141205,141207,141209,141211,141213,141215],{"class":103,"line":21},[101,141206,131976],{"class":1950},[101,141208,79796],{"class":111},[101,141210,128892],{"class":160},[101,141212,51426],{"class":111},[101,141214,131985],{"class":160},[101,141216,129462],{"class":111},[101,141218,141219],{"class":103,"line":1166},[101,141220,131992],{"class":170},[101,141222,141223,141225,141227,141229,141231,141233],{"class":103,"line":1181},[101,141224,131997],{"class":1950},[101,141226,79796],{"class":111},[101,141228,128892],{"class":160},[101,141230,51426],{"class":111},[101,141232,54753],{"class":160},[101,141234,129462],{"class":111},[101,141236,141237],{"class":103,"line":1187},[101,141238,132012],{"class":170},[101,141240,141241,141243,141245,141247,141249,141251],{"class":103,"line":1201},[101,141242,132017],{"class":1950},[101,141244,79796],{"class":111},[101,141246,128892],{"class":160},[101,141248,51426],{"class":111},[101,141250,54820],{"class":160},[101,141252,129462],{"class":111},[101,141254,141255],{"class":103,"line":1207},[101,141256,132032],{"class":170},[101,141258,141259,141261,141263,141265,141267,141269],{"class":103,"line":1298},[101,141260,132037],{"class":1950},[101,141262,79796],{"class":111},[101,141264,128892],{"class":160},[101,141266,51426],{"class":111},[101,141268,86222],{"class":160},[101,141270,129462],{"class":111},[101,141272,141273],{"class":103,"line":1304},[101,141274,132052],{"class":170},[101,141276,141277,141279,141281,141283,141285,141287],{"class":103,"line":1316},[101,141278,132057],{"class":1950},[101,141280,79796],{"class":111},[101,141282,128892],{"class":160},[101,141284,51426],{"class":111},[101,141286,132066],{"class":160},[101,141288,129462],{"class":111},[1118,141290,141291,141302],{},[58,141292,141293,141294,141297,141298,100998,141300],{},"1 号盒子左侧浮动 ",[98,141295,141296],{},"sk_list"," 里面包含 ",[98,141299,1118],{},[98,141301,58],{},[58,141303,141304,141305,141297,141308,100998,141310],{},"2 号盒子左侧浮动 ",[98,141306,141307],{},"sk_con",[98,141309,1118],{},[98,141311,58],{},[10,141313,139902],{},[92,141315,141316],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},[98,141317,141318,141324,141334],{"__ignoreMap":20},[101,141319,141320,141322],{"class":103,"line":104},[101,141321,130380],{"class":1950},[101,141323,15560],{"class":111},[101,141325,141326,141328,141330,141332],{"class":103,"line":21},[101,141327,131012],{"class":160},[101,141329,51426],{"class":111},[101,141331,23725],{"class":160},[101,141333,1277],{"class":111},[101,141335,141336],{"class":103,"line":1166},[101,141337,1552],{"class":111},[10,141339,139991],{},[92,141341,141342],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},[98,141343,141344,141350,141360],{"__ignoreMap":20},[101,141345,141346,141348],{"class":103,"line":104},[101,141347,130380],{"class":1950},[101,141349,15560],{"class":111},[101,141351,141352,141354,141356,141358],{"class":103,"line":21},[101,141353,131012],{"class":160},[101,141355,51426],{"class":111},[101,141357,23725],{"class":160},[101,141359,1277],{"class":111},[101,141361,141362],{"class":103,"line":1166},[101,141363,1552],{"class":111},[72,141365,141367,141368],{"id":141366},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[98,141369,141370],{},"sk_container",[1449,141372],{"style":126388,"src":141373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1118,141375,141376,141381],{},[58,141377,140556,141378,141380],{},[98,141379,141370],{}," 给宽度 1200，不要给高度",[58,141382,141383],{},"一定不要忘记清除浮动",[10,141385,139902],{},[92,141387,141388],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},[98,141389,141390,141396,141406],{"__ignoreMap":20},[101,141391,141392,141394],{"class":103,"line":104},[101,141393,130380],{"class":1950},[101,141395,15560],{"class":111},[101,141397,141398,141400,141402,141404],{"class":103,"line":21},[101,141399,131012],{"class":160},[101,141401,51426],{"class":111},[101,141403,23725],{"class":160},[101,141405,1277],{"class":111},[101,141407,141408],{"class":103,"line":1166},[101,141409,1552],{"class":111},[55,141411,141412],{},[58,141413,141414],{},"sk_hd制作",[1118,141416,141417],{},[58,141418,140636,141419,141422],{},[98,141420,141421],{},"sk_hd"," ，插入图片即可",[10,141424,139902],{},[92,141426,141427],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,141428,141429],{"__ignoreMap":20},[101,141430,141431,141433,141435,141437,141439,141441,141443,141445,141447,141449,141451,141453],{"class":103,"line":104},[101,141432,1021],{"class":111},[101,141434,1449],{"class":51289},[101,141436,55228],{"class":1950},[101,141438,157],{"class":111},[101,141440,134049],{"class":216},[101,141442,55236],{"class":1950},[101,141444,157],{"class":111},[101,141446,134056],{"class":216},[101,141448,134059],{"class":1950},[101,141450,157],{"class":111},[101,141452,134064],{"class":216},[101,141454,51296],{"class":111},[55,141456,141457],{"start":21},[58,141458,141459],{},"sk_bd制作",[1118,141461,141462],{},[58,141463,141464,141465,141468,141469,100998,141471,141473],{},"3 号盒子 ",[98,141466,141467],{},"sk_bd"," ，里面包含很多的 ",[98,141470,1118],{},[98,141472,58],{},[1118,141474,141475,141484],{},[58,141476,141477,141478,141480,141481,141483],{},"当鼠标移入到 ",[98,141479,58],{}," 上面的时候显示红色的边框，在这里先给 ",[98,141482,58],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[58,141485,141486,141487,141489,141490,141492,141493,141496,141497,141499],{},"由于给每个 ",[98,141488,58],{}," 都设置了外边距，导致一行的最后一个 ",[98,141491,58],{}," 掉了下来，在这里我们利用 ",[98,141494,141495],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[98,141498,58],{},"，去掉外边距就好了",[10,141501,139902],{},[92,141503,141504],{"className":126532,"code":138721,"language":126534,"meta":20,"style":20},[98,141505,141506,141512,141524],{"__ignoreMap":20},[101,141507,141508,141510],{"class":103,"line":104},[101,141509,51600],{"class":51289},[101,141511,15560],{"class":111},[101,141513,141514,141516,141518,141520,141522],{"class":103,"line":21},[101,141515,70459],{"class":160},[101,141517,51426],{"class":111},[101,141519,303],{"class":160},[101,141521,51545],{"class":160},[101,141523,1277],{"class":111},[101,141525,141526],{"class":103,"line":1166},[101,141527,1552],{"class":111},[10,141529,139991],{},[92,141531,141532],{"className":126532,"code":138721,"language":126534,"meta":20,"style":20},[98,141533,141534,141540,141552],{"__ignoreMap":20},[101,141535,141536,141538],{"class":103,"line":104},[101,141537,51600],{"class":51289},[101,141539,15560],{"class":111},[101,141541,141542,141544,141546,141548,141550],{"class":103,"line":21},[101,141543,70459],{"class":160},[101,141545,51426],{"class":111},[101,141547,303],{"class":160},[101,141549,51545],{"class":160},[101,141551,1277],{"class":111},[101,141553,141554],{"class":103,"line":1166},[101,141555,1552],{"class":111},[43,141557,141559],{"id":141558},"_163-注册页面制作","16.3 注册页面制作",[1449,141561],{"style":126388,"src":141562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[10,141564,141565,141567],{},[261,141566,9013],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1449,141569],{"style":126388,"src":141570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[72,141572,141574],{"id":141573},"_1631-准备工作","16.3.1 准备工作",[1118,141576,141577,141580],{},[58,141578,141579],{},"创建register.html，引入 base.css，引入favicon图标",[58,141581,141582],{},"创建register.css ，在html页面进行引入",[72,141584,141586,141587,141589],{"id":141585},"_1632-header-头部实现","16.3.2 ",[98,141588,131537],{}," 头部实现",[1118,141591,141592,141595],{},[58,141593,141594],{},"整个内容用 版心 进行包裹",[58,141596,141597],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[10,141599,139902],{},[92,141601,141602],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,141603,141604],{"__ignoreMap":20},[101,141605,141606,141608,141610,141612,141614,141616,141618,141620,141622,141624,141626,141628],{"class":103,"line":104},[101,141607,1021],{"class":111},[101,141609,1449],{"class":51289},[101,141611,55228],{"class":1950},[101,141613,157],{"class":111},[101,141615,134049],{"class":216},[101,141617,55236],{"class":1950},[101,141619,157],{"class":111},[101,141621,134056],{"class":216},[101,141623,134059],{"class":1950},[101,141625,157],{"class":111},[101,141627,134064],{"class":216},[101,141629,51296],{"class":111},[10,141631,139991],{},[92,141633,141634],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,141635,141636],{"__ignoreMap":20},[101,141637,141638,141640,141642,141644,141646,141648,141650,141652,141654,141656,141658,141660],{"class":103,"line":104},[101,141639,1021],{"class":111},[101,141641,1449],{"class":51289},[101,141643,55228],{"class":1950},[101,141645,157],{"class":111},[101,141647,134049],{"class":216},[101,141649,55236],{"class":1950},[101,141651,157],{"class":111},[101,141653,134056],{"class":216},[101,141655,134059],{"class":1950},[101,141657,157],{"class":111},[101,141659,134064],{"class":216},[101,141661,51296],{"class":111},[72,141663,141665,141666,141669],{"id":141664},"_1633-registerarea-主体模块实现","16.3.3 ",[98,141667,141668],{},"registerarea"," 主体模块实现",[1449,141671],{"style":126388,"src":141672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[10,141674,141675],{},"整个大盒子 高度为 522px，设置4个边框",[10,141677,139902],{},[92,141679,141680],{"className":126532,"code":130689,"language":126534,"meta":20,"style":20},[98,141681,141682,141688,141704],{"__ignoreMap":20},[101,141683,141684,141686],{"class":103,"line":104},[101,141685,51600],{"class":51289},[101,141687,15560],{"class":111},[101,141689,141690,141692,141694,141696,141698,141700,141702],{"class":103,"line":21},[101,141691,70885],{"class":160},[101,141693,51426],{"class":111},[101,141695,329],{"class":160},[101,141697,51481],{"class":107},[101,141699,51510],{"class":160},[101,141701,129924],{"class":160},[101,141703,1277],{"class":111},[101,141705,141706],{"class":103,"line":1166},[101,141707,1552],{"class":111},[10,141709,139991],{},[92,141711,141712],{"className":126532,"code":130689,"language":126534,"meta":20,"style":20},[98,141713,141714,141720,141736],{"__ignoreMap":20},[101,141715,141716,141718],{"class":103,"line":104},[101,141717,51600],{"class":51289},[101,141719,15560],{"class":111},[101,141721,141722,141724,141726,141728,141730,141732,141734],{"class":103,"line":21},[101,141723,70885],{"class":160},[101,141725,51426],{"class":111},[101,141727,329],{"class":160},[101,141729,51481],{"class":107},[101,141731,51510],{"class":160},[101,141733,129924],{"class":160},[101,141735,1277],{"class":111},[101,141737,141738],{"class":103,"line":1166},[101,141739,1552],{"class":111},[10,141741,141742],{},"1号盒子 是一个 h3 标签，放标题",[1118,141744,141745],{},[58,141746,141747],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[10,141749,139902],{},[92,141751,141752],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},[98,141753,141754,141760,141770],{"__ignoreMap":20},[101,141755,141756,141758],{"class":103,"line":104},[101,141757,130380],{"class":1950},[101,141759,15560],{"class":111},[101,141761,141762,141764,141766,141768],{"class":103,"line":21},[101,141763,131012],{"class":160},[101,141765,51426],{"class":111},[101,141767,23725],{"class":160},[101,141769,1277],{"class":111},[101,141771,141772],{"class":103,"line":1166},[101,141773,1552],{"class":111},[10,141775,139991],{},[92,141777,141778],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},[98,141779,141780,141786,141796],{"__ignoreMap":20},[101,141781,141782,141784],{"class":103,"line":104},[101,141783,130380],{"class":1950},[101,141785,15560],{"class":111},[101,141787,141788,141790,141792,141794],{"class":103,"line":21},[101,141789,131012],{"class":160},[101,141791,51426],{"class":111},[101,141793,23725],{"class":160},[101,141795,1277],{"class":111},[101,141797,141798],{"class":103,"line":1166},[101,141799,1552],{"class":111},[10,141801,141802],{},"2号盒子 里面放注册的内容",[1118,141804,141805,141808,141817,141831,141844,141847,141850,141868,141882],{},[58,141806,141807],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[58,141809,141810,141811,141813,141814,141816],{},"里面的内容利用 ",[98,141812,1118],{}," 包含 ",[98,141815,58],{}," 来实现的（不需要用表格）",[58,141818,139046,141819,141821,141822,141824,141825,141827,141828,141830],{},[98,141820,58],{}," 里面，左侧放 ",[98,141823,33597],{}," 标签， 中间放",[98,141826,53810],{}," 标签， 右侧放 ",[98,141829,101],{}," 提示信息",[58,141832,141833,141834,141836,141837,141839,141840,141843],{},"左侧 ",[98,141835,33597],{},"里面的文字都是右对齐，我们可以给",[98,141838,33597],{},"设置一个宽度（88px），然后利用",[98,141841,141842],{},"text-align"," 来设置右对齐",[58,141845,141846],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[58,141848,141849],{},"右侧 span修饰一下文字颜色",[58,141851,141852,141853],{},"提示信息的样式优化",[1118,141854,141855,141858,141861],{},[58,141856,141857],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[58,141859,141860],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[58,141862,141863,141864,141867],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[98,141865,141866],{},"vertical-algin"," 来设置 图片与文字对齐方式",[58,141869,141870,141871],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1118,141872,141873,141879],{},[58,141874,141875,141876,141878],{},"设置 ",[98,141877,23542],{}," 的 左右 12px 的内边距，设置一下文字颜色",[58,141880,141881],{},"分别设置 背景颜色",[58,141883,141884,141885,141887],{},"同意协议 和 完成注册 都是用 ",[98,141886,58],{}," 进行包裹",[10,141889,139902],{},[92,141891,141892],{"className":126532,"code":140475,"language":126534,"meta":20,"style":20},[98,141893,141894,141900,141910],{"__ignoreMap":20},[101,141895,141896,141898],{"class":103,"line":104},[101,141897,51600],{"class":51289},[101,141899,15560],{"class":111},[101,141901,141902,141904,141906,141908],{"class":103,"line":21},[101,141903,70867],{"class":160},[101,141905,51426],{"class":111},[101,141907,140492],{"class":160},[101,141909,1277],{"class":111},[101,141911,141912],{"class":103,"line":1166},[101,141913,1552],{"class":111},[10,141915,139991],{},[92,141917,141918],{"className":126532,"code":140475,"language":126534,"meta":20,"style":20},[98,141919,141920,141926,141936],{"__ignoreMap":20},[101,141921,141922,141924],{"class":103,"line":104},[101,141923,51600],{"class":51289},[101,141925,15560],{"class":111},[101,141927,141928,141930,141932,141934],{"class":103,"line":21},[101,141929,70867],{"class":160},[101,141931,51426],{"class":111},[101,141933,140492],{"class":160},[101,141935,1277],{"class":111},[101,141937,141938],{"class":103,"line":1166},[101,141939,1552],{"class":111},[72,141941,141943],{"id":141942},"_1634-底部实现","16.3.4 底部实现",[10,141945,139902],{},[92,141947,141948],{"className":126532,"code":140475,"language":126534,"meta":20,"style":20},[98,141949,141950,141956,141966],{"__ignoreMap":20},[101,141951,141952,141954],{"class":103,"line":104},[101,141953,51600],{"class":51289},[101,141955,15560],{"class":111},[101,141957,141958,141960,141962,141964],{"class":103,"line":21},[101,141959,70867],{"class":160},[101,141961,51426],{"class":111},[101,141963,140492],{"class":160},[101,141965,1277],{"class":111},[101,141967,141968],{"class":103,"line":1166},[101,141969,1552],{"class":111},[10,141971,139991],{},[92,141973,141974],{"className":127279,"code":130636,"language":127281,"meta":20,"style":20},[98,141975,141976,141980,141994,141998],{"__ignoreMap":20},[101,141977,141978],{"class":103,"line":104},[101,141979,130643],{"class":170},[101,141981,141982,141984,141986,141988,141990,141992],{"class":103,"line":21},[101,141983,1021],{"class":111},[101,141985,51600],{"class":51289},[101,141987,53475],{"class":1950},[101,141989,157],{"class":111},[101,141991,130656],{"class":216},[101,141993,51296],{"class":111},[101,141995,141996],{"class":103,"line":1166},[101,141997,130663],{"class":111},[101,141999,142000,142002,142004],{"class":103,"line":1181},[101,142001,51774],{"class":111},[101,142003,51600],{"class":51289},[101,142005,51296],{"class":111},[43,142007,142009],{"id":142008},"_164-项目总结","16.4 项目总结",[55,142011,142012,142015,142018,142021],{},[58,142013,142014],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[58,142016,142017],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[58,142019,142020],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[58,142022,142023],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1449,142025],{"style":126388,"src":142026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[55,142028,142029],{"start":1187},[58,142030,142031],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1449,142033],{"style":126388,"src":142034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[55,142036,142037],{"start":1201},[58,142038,142039],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1449,142041],{"style":126388,"src":142042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[92,142044,142045],{"className":127279,"code":136689,"language":127281,"meta":20,"style":20},[98,142046,142047],{"__ignoreMap":20},[101,142048,142049,142051,142053,142055,142057,142059,142061,142063,142065,142067,142069,142071],{"class":103,"line":104},[101,142050,1021],{"class":111},[101,142052,53810],{"class":51289},[101,142054,53813],{"class":1950},[101,142056,157],{"class":111},[101,142058,62688],{"class":216},[101,142060,14908],{"class":1950},[101,142062,157],{"class":111},[101,142064,136710],{"class":216},[101,142066,61009],{"class":1950},[101,142068,157],{"class":111},[101,142070,136717],{"class":216},[101,142072,51296],{"class":111},[55,142074,142075,142078],{"start":1207},[58,142076,142077],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[58,142079,142080],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5114,142082,142083],{},"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":20,"searchDepth":21,"depth":21,"links":142085},[142086,142091,142098,142106],{"id":139712,"depth":21,"text":139713,"children":142087},[142088,142089,142090],{"id":139716,"depth":1166,"text":139717},{"id":140447,"depth":1166,"text":140448},{"id":140760,"depth":1166,"text":140761},{"id":141060,"depth":21,"text":141061,"children":142092},[142093,142094,142096],{"id":141064,"depth":1166,"text":141065},{"id":141082,"depth":1166,"text":142095},"16.2.2 列表页 header 和 nav 修改",{"id":141366,"depth":1166,"text":142097},"16.2.3 列表页主体 sk_container",{"id":141558,"depth":21,"text":141559,"children":142099},[142100,142101,142103,142105],{"id":141573,"depth":1166,"text":141574},{"id":141585,"depth":1166,"text":142102},"16.3.2 header 头部实现",{"id":141664,"depth":1166,"text":142104},"16.3.3 registerarea 主体模块实现",{"id":141942,"depth":1166,"text":141943},{"id":142008,"depth":21,"text":142009},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139704,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142113,"title":142114,"body":142115,"description":23365,"extension":24,"meta":142223,"navigation":27,"path":142224,"seo":142225,"stem":142226,"__hash__":142227},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142116,"toc":142218},[142117,142120,142124,142127,142130,142139,142148,142152,142157,142164,142182,142185,142188,142191,142194,142197,142200,142203,142206,142209,142212,142215],[39,142118,142114],{"id":142119},"_17-web服务器与网站发布",[43,142121,142123],{"id":142122},"_171-web服务器","17.1 Web服务器",[10,142125,142126],{},"把自己网站上传到服务器上，可以让其他人访问",[1449,142128],{"style":126388,"src":142129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[10,142131,142132,142135,142136],{},[261,142133,142134],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[261,142137,142138],{},"Web 服务器等",[10,142140,142141,142142,100998,142145,25729],{},"根据服务器在网络中所在的位置不同，又可分为 ",[261,142143,142144],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[261,142146,142147],{},"远程服务器",[72,142149,142151],{"id":142150},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[10,142153,142154],{},[261,142155,142156],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[10,142158,142159,142160],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[14,142161,142162],{"href":142162,"rel":142163},"http:\u002F\u002Ffree.3v.do\u002F",[18],[1118,142165,142166,142169,142172,142179],{},[58,142167,142168],{},"去免费空间网站注册账号。",[58,142170,142171],{},"记录下主机名、用户名、密码、域名。",[58,142173,142174,142175,142178],{},"利用 ",[98,142176,142177],{},"utftp"," 软件 上传网站到远程服务器",[58,142180,142181],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[10,142183,142184],{},"使用软件上传，对上传软件文件进行解压",[1449,142186],{"style":126388,"src":142187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1449,142189],{"style":126388,"src":142190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[10,142192,142193],{},"输入刚刚申请的服务器账号信息：",[1449,142195],{"style":126388,"src":142196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1449,142198],{"style":126388,"src":142199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1449,142201],{"style":126388,"src":142202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1449,142204],{"style":126388,"src":142205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[10,142207,142208],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1449,142210],{"style":126388,"src":142211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[10,142213,142214],{},"浏览器输入域名即可访问",[10,142216,142217],{},"首页一定必须是index",{"title":20,"searchDepth":21,"depth":21,"links":142219},[142220],{"id":142122,"depth":21,"text":142123,"children":142221},[142222],{"id":142150,"depth":1166,"text":142151},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142114,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142229,"title":142230,"body":142231,"description":23365,"extension":24,"meta":143158,"navigation":27,"path":143159,"seo":143160,"stem":143161,"__hash__":143162},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142232,"toc":143141},[142233,142236,142240,142243,142246,142257,142260,142264,142268,142273,142276,142279,142282,142285,142289,142315,142319,142323,142326,142329,142333,142366,142370,142373,142376,142440,142444,142448,142451,142454,142457,142461,142506,142510,142513,142543,142547,142551,142554,142557,142561,142564,142633,142636,142744,142746,142752,142756,142759,142762,142858,142861,142865,142889,142893,142896,142900,142903,142907,142910,142913,142916,142919,142923,142926,142929,142933,142937,142940,142943,142946,142949,142953,142956,142960,142963,142966,143011,143015,143019,143022,143025,143028,143060,143064,143067,143101,143105,143108,143138],[39,142234,142230],{"id":142235},"_18-2d动画与3d转换",[43,142237,142239],{"id":142238},"_181-css3-2d转换","18.1 CSS3 2D转换",[10,142241,142242],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[10,142244,142245],{},"转换（transform）你可以简单理解为变形",[1118,142247,142248,142251,142254],{},[58,142249,142250],{},"移动：translate",[58,142252,142253],{},"旋转：rotate",[58,142255,142256],{},"缩放：scale",[1449,142258],{"style":126388,"src":142259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[72,142261,142263],{"id":142262},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21986,142265,142267],{"id":142266},"_18111-translate介绍","18.1.1.1 translate介绍",[10,142269,142270,142271],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[261,142272,133191],{},[1449,142274],{"style":126388,"src":142275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[10,142277,142278],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[10,142280,142281],{},"对于行内元素无效",[10,142283,142284],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21986,142286,142288],{"id":142287},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[92,142290,142291],{"className":126532,"code":138721,"language":126534,"meta":20,"style":20},[98,142292,142293,142299,142311],{"__ignoreMap":20},[101,142294,142295,142297],{"class":103,"line":104},[101,142296,51600],{"class":51289},[101,142298,15560],{"class":111},[101,142300,142301,142303,142305,142307,142309],{"class":103,"line":21},[101,142302,70459],{"class":160},[101,142304,51426],{"class":111},[101,142306,303],{"class":160},[101,142308,51545],{"class":160},[101,142310,1277],{"class":111},[101,142312,142313],{"class":103,"line":1166},[101,142314,1552],{"class":111},[72,142316,142318],{"id":142317},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21986,142320,142322],{"id":142321},"_18121-rotate介绍","18.1.2.1 rotate介绍",[10,142324,142325],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1449,142327],{"style":126388,"src":142328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21986,142330,142332],{"id":142331},"_18122-旋转效果","18.1.2.2 旋转效果",[92,142334,142336],{"className":126532,"code":142335,"language":126534,"meta":20,"style":20},"div {\n  transform: rotate(45deg);\n}\n",[98,142337,142338,142344,142362],{"__ignoreMap":20},[101,142339,142340,142342],{"class":103,"line":104},[101,142341,51600],{"class":51289},[101,142343,15560],{"class":111},[101,142345,142346,142348,142350,142353,142355,142357,142360],{"class":103,"line":21},[101,142347,136516],{"class":160},[101,142349,51426],{"class":111},[101,142351,142352],{"class":160},"rotate",[101,142354,112],{"class":111},[101,142356,640],{"class":160},[101,142358,142359],{"class":107},"deg",[101,142361,2706],{"class":111},[101,142363,142364],{"class":103,"line":1166},[101,142365,1552],{"class":111},[21986,142367,142369],{"id":142368},"_18123-三角做法","18.1.2.3 三角做法",[10,142371,142372],{},"该下标当经过最外层大盒子时会实现向上反转",[1449,142374],{"style":126388,"src":142375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[92,142377,142378],{"className":126532,"code":135052,"language":126534,"meta":20,"style":20},[98,142379,142380,142384,142390,142400,142410,142426,142436],{"__ignoreMap":20},[101,142381,142382],{"class":103,"line":104},[101,142383,135059],{"class":170},[101,142385,142386,142388],{"class":103,"line":21},[101,142387,135064],{"class":1950},[101,142389,15560],{"class":111},[101,142391,142392,142394,142396,142398],{"class":103,"line":1166},[101,142393,70557],{"class":160},[101,142395,51426],{"class":111},[101,142397,303],{"class":160},[101,142399,1277],{"class":111},[101,142401,142402,142404,142406,142408],{"class":103,"line":1181},[101,142403,70777],{"class":160},[101,142405,51426],{"class":111},[101,142407,303],{"class":160},[101,142409,1277],{"class":111},[101,142411,142412,142414,142416,142418,142420,142422,142424],{"class":103,"line":1187},[101,142413,70885],{"class":160},[101,142415,51426],{"class":111},[101,142417,557],{"class":160},[101,142419,51481],{"class":107},[101,142421,51510],{"class":160},[101,142423,63980],{"class":160},[101,142425,1277],{"class":111},[101,142427,142428,142430,142432,142434],{"class":103,"line":1201},[101,142429,135107],{"class":160},[101,142431,51426],{"class":111},[101,142433,62358],{"class":160},[101,142435,1277],{"class":111},[101,142437,142438],{"class":103,"line":1207},[101,142439,1552],{"class":111},[72,142441,142443],{"id":142442},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21986,142445,142447],{"id":142446},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[10,142449,142450],{},"设置中心点",[1449,142452],{"style":126388,"src":142453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[10,142455,142456],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21986,142458,142460],{"id":142459},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[92,142462,142464],{"className":126532,"code":142463,"language":126534,"meta":20,"style":20},"\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",[98,142465,142466,142471,142477,142492,142497,142502],{"__ignoreMap":20},[101,142467,142468],{"class":103,"line":104},[101,142469,142470],{"class":170},"\u002F* 转换中心点 *\u002F\n",[101,142472,142473,142475],{"class":103,"line":21},[101,142474,51600],{"class":51289},[101,142476,15560],{"class":111},[101,142478,142479,142482,142484,142486,142488,142490],{"class":103,"line":1166},[101,142480,142481],{"class":160},"  transform-origin",[101,142483,51426],{"class":111},[101,142485,51581],{"class":160},[101,142487,17132],{"class":160},[101,142489,130395],{"class":111},[101,142491,135205],{"class":170},[101,142493,142494],{"class":103,"line":1181},[101,142495,142496],{"class":170},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[101,142498,142499],{"class":103,"line":1187},[101,142500,142501],{"class":170},"  \u002F* transform-origin: left top; *\u002F\n",[101,142503,142504],{"class":103,"line":1201},[101,142505,1552],{"class":111},[21986,142507,142509],{"id":142508},"_18133-旋转案例","18.1.3.3 旋转案例",[1449,142511],{"style":126388,"src":142512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[92,142514,142515],{"className":126532,"code":142335,"language":126534,"meta":20,"style":20},[98,142516,142517,142523,142539],{"__ignoreMap":20},[101,142518,142519,142521],{"class":103,"line":104},[101,142520,51600],{"class":51289},[101,142522,15560],{"class":111},[101,142524,142525,142527,142529,142531,142533,142535,142537],{"class":103,"line":21},[101,142526,136516],{"class":160},[101,142528,51426],{"class":111},[101,142530,142352],{"class":160},[101,142532,112],{"class":111},[101,142534,640],{"class":160},[101,142536,142359],{"class":107},[101,142538,2706],{"class":111},[101,142540,142541],{"class":103,"line":1166},[101,142542,1552],{"class":111},[72,142544,142546],{"id":142545},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21986,142548,142550],{"id":142549},"_18141-scale介绍","18.1.4.1 scale介绍",[10,142552,142553],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1449,142555],{"style":126388,"src":142556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21986,142558,142560],{"id":142559},"_18142-分页按钮","18.1.4.2 分页按钮",[1449,142562],{"style":126388,"src":142563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[92,142565,142567],{"className":126532,"code":142566,"language":126534,"meta":20,"style":20},"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",[98,142568,142569,142575,142591,142595,142599,142604,142610,142624,142629],{"__ignoreMap":20},[101,142570,142571,142573],{"class":103,"line":104},[101,142572,51600],{"class":51289},[101,142574,15560],{"class":111},[101,142576,142577,142579,142581,142584,142586,142589],{"class":103,"line":21},[101,142578,136516],{"class":160},[101,142580,51426],{"class":111},[101,142582,142583],{"class":160},"scale",[101,142585,112],{"class":111},[101,142587,142588],{"class":160},"1.2",[101,142590,2706],{"class":111},[101,142592,142593],{"class":103,"line":1166},[101,142594,1552],{"class":111},[101,142596,142597],{"class":103,"line":1181},[101,142598,135993],{"class":111},[101,142600,142601],{"class":103,"line":1187},[101,142602,142603],{"class":170},"\u002F* 2D 缩放 *\u002F\n",[101,142605,142606,142608],{"class":103,"line":1201},[101,142607,51600],{"class":51289},[101,142609,15560],{"class":111},[101,142611,142612,142614,142616,142618,142620,142622],{"class":103,"line":1207},[101,142613,136516],{"class":160},[101,142615,51426],{"class":111},[101,142617,142583],{"class":160},[101,142619,112],{"class":111},[101,142621,142588],{"class":160},[101,142623,2706],{"class":111},[101,142625,142626],{"class":103,"line":1298},[101,142627,142628],{"class":170},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[101,142630,142631],{"class":103,"line":1304},[101,142632,1552],{"class":111},[10,142634,142635],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[92,142637,142639],{"className":126532,"code":142638,"language":126534,"meta":20,"style":20},"\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",[98,142640,142641,142646,142656,142677,142698,142702,142707,142713,142740],{"__ignoreMap":20},[101,142642,142643],{"class":103,"line":104},[101,142644,142645],{"class":170},"\u002F* 定义动画 *\u002F\n",[101,142647,142648,142651,142654],{"class":103,"line":21},[101,142649,142650],{"class":107},"@keyframes",[101,142652,142653],{"class":5204}," move",[101,142655,15560],{"class":111},[101,142657,142658,142661,142663,142665,142667,142670,142672,142674],{"class":103,"line":1166},[101,142659,142660],{"class":1950},"  0%",[101,142662,79796],{"class":111},[101,142664,48123],{"class":160},[101,142666,51426],{"class":111},[101,142668,142669],{"class":160},"translateX",[101,142671,112],{"class":111},[101,142673,303],{"class":160},[101,142675,142676],{"class":111},"); }\n",[101,142678,142679,142682,142684,142686,142688,142690,142692,142694,142696],{"class":103,"line":1181},[101,142680,142681],{"class":1950},"  100%",[101,142683,79796],{"class":111},[101,142685,48123],{"class":160},[101,142687,51426],{"class":111},[101,142689,142669],{"class":160},[101,142691,112],{"class":111},[101,142693,422],{"class":160},[101,142695,51481],{"class":107},[101,142697,142676],{"class":111},[101,142699,142700],{"class":103,"line":1187},[101,142701,1552],{"class":111},[101,142703,142704],{"class":103,"line":1201},[101,142705,142706],{"class":170},"\u002F* 调用动画 *\u002F\n",[101,142708,142709,142711],{"class":103,"line":1207},[101,142710,51600],{"class":51289},[101,142712,15560],{"class":111},[101,142714,142715,142718,142720,142722,142724,142726,142728,142730,142732,142735,142738],{"class":103,"line":1298},[101,142716,142717],{"class":160},"  animation",[101,142719,51426],{"class":111},[101,142721,135218],{"class":160},[101,142723,25107],{"class":160},[101,142725,806],{"class":107},[101,142727,78669],{"class":160},[101,142729,4080],{"class":160},[101,142731,806],{"class":107},[101,142733,142734],{"class":160}," infinite",[101,142736,142737],{"class":160}," alternate",[101,142739,1277],{"class":111},[101,142741,142742],{"class":103,"line":1304},[101,142743,1552],{"class":111},[10,142745,142635],{},[92,142747,142750],{"className":142748,"code":142749,"language":5175},[5173],"\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",[98,142751,142749],{"__ignoreMap":20},[21986,142753,142755],{"id":142754},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[10,142757,142758],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1449,142760],{"style":126388,"src":142761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[92,142763,142764],{"className":126532,"code":142638,"language":126534,"meta":20,"style":20},[98,142765,142766,142770,142778,142796,142816,142820,142824,142830,142854],{"__ignoreMap":20},[101,142767,142768],{"class":103,"line":104},[101,142769,142645],{"class":170},[101,142771,142772,142774,142776],{"class":103,"line":21},[101,142773,142650],{"class":107},[101,142775,142653],{"class":5204},[101,142777,15560],{"class":111},[101,142779,142780,142782,142784,142786,142788,142790,142792,142794],{"class":103,"line":1166},[101,142781,142660],{"class":1950},[101,142783,79796],{"class":111},[101,142785,48123],{"class":160},[101,142787,51426],{"class":111},[101,142789,142669],{"class":160},[101,142791,112],{"class":111},[101,142793,303],{"class":160},[101,142795,142676],{"class":111},[101,142797,142798,142800,142802,142804,142806,142808,142810,142812,142814],{"class":103,"line":1181},[101,142799,142681],{"class":1950},[101,142801,79796],{"class":111},[101,142803,48123],{"class":160},[101,142805,51426],{"class":111},[101,142807,142669],{"class":160},[101,142809,112],{"class":111},[101,142811,422],{"class":160},[101,142813,51481],{"class":107},[101,142815,142676],{"class":111},[101,142817,142818],{"class":103,"line":1187},[101,142819,1552],{"class":111},[101,142821,142822],{"class":103,"line":1201},[101,142823,142706],{"class":170},[101,142825,142826,142828],{"class":103,"line":1207},[101,142827,51600],{"class":51289},[101,142829,15560],{"class":111},[101,142831,142832,142834,142836,142838,142840,142842,142844,142846,142848,142850,142852],{"class":103,"line":1298},[101,142833,142717],{"class":160},[101,142835,51426],{"class":111},[101,142837,135218],{"class":160},[101,142839,25107],{"class":160},[101,142841,806],{"class":107},[101,142843,78669],{"class":160},[101,142845,4080],{"class":160},[101,142847,806],{"class":107},[101,142849,142734],{"class":160},[101,142851,142737],{"class":160},[101,142853,1277],{"class":111},[101,142855,142856],{"class":103,"line":1304},[101,142857,1552],{"class":111},[10,142859,142860],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[72,142862,142864],{"id":142863},"_1823-知识点回顾","18.2.3 知识点回顾",[92,142866,142867],{"className":126532,"code":128701,"language":126534,"meta":20,"style":20},[98,142868,142869,142875,142885],{"__ignoreMap":20},[101,142870,142871,142873],{"class":103,"line":104},[101,142872,51600],{"class":51289},[101,142874,15560],{"class":111},[101,142876,142877,142879,142881,142883],{"class":103,"line":21},[101,142878,128714],{"class":160},[101,142880,51426],{"class":111},[101,142882,61725],{"class":160},[101,142884,1277],{"class":111},[101,142886,142887],{"class":103,"line":1166},[101,142888,1552],{"class":111},[43,142890,142892],{"id":142891},"_183-3d-转换","18.3 3D 转换",[10,142894,142895],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[72,142897,142899],{"id":142898},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1449,142901],{"style":126388,"src":142902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[72,142904,142906],{"id":142905},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1449,142908],{"style":126388,"src":142909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[10,142911,142912],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[10,142914,142915],{},"translate3d的效果需要搭配透视perspective来使用",[1449,142917],{"style":126388,"src":142918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[72,142920,142922],{"id":142921},"_1833-透视-perspective","18.3.3 透视 perspective",[1449,142924],{"style":126388,"src":142925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[10,142927,142928],{},"透视写在父盒子上，单位为像素",[72,142930,142932],{"id":142931},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21986,142934,142936],{"id":142935},"_18341-分开解释","18.3.4.1 分开解释",[1449,142938],{"style":126388,"src":142939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1449,142941],{"style":126388,"src":142942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1449,142944],{"style":126388,"src":142945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[10,142947,142948],{},"总结来说就是左手原则",[21986,142950,142952],{"id":142951},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1449,142954],{"style":126388,"src":142955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[72,142957,142959],{"id":142958},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1449,142961],{"style":126388,"src":142962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1449,142964],{"style":126388,"src":142965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[92,142967,142969],{"className":126532,"code":142968,"language":126534,"meta":20,"style":20},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[98,142970,142971,142977,142990,143007],{"__ignoreMap":20},[101,142972,142973,142975],{"class":103,"line":104},[101,142974,51600],{"class":51289},[101,142976,15560],{"class":111},[101,142978,142979,142982,142984,142986,142988],{"class":103,"line":21},[101,142980,142981],{"class":160},"  perspective",[101,142983,51426],{"class":111},[101,142985,65063],{"class":160},[101,142987,51481],{"class":107},[101,142989,1277],{"class":111},[101,142991,142992,142994,142996,142999,143001,143003,143005],{"class":103,"line":1166},[101,142993,136516],{"class":160},[101,142995,51426],{"class":111},[101,142997,142998],{"class":160},"rotateX",[101,143000,112],{"class":111},[101,143002,640],{"class":160},[101,143004,142359],{"class":107},[101,143006,2706],{"class":111},[101,143008,143009],{"class":103,"line":1181},[101,143010,1552],{"class":111},[72,143012,143014],{"id":143013},"_1836-案例","18.3.6 案例",[21986,143016,143018],{"id":143017},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1449,143020],{"style":126388,"src":143021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1449,143023],{"style":126388,"src":143024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1449,143026],{"style":126388,"src":143027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[92,143029,143031],{"className":126532,"code":143030,"language":126534,"meta":20,"style":20},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[98,143032,143033,143038,143044,143056],{"__ignoreMap":20},[101,143034,143035],{"class":103,"line":104},[101,143036,143037],{"class":170},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[101,143039,143040,143042],{"class":103,"line":21},[101,143041,133529],{"class":1950},[101,143043,15560],{"class":111},[101,143045,143046,143048,143050,143052,143054],{"class":103,"line":1166},[101,143047,142981],{"class":160},[101,143049,51426],{"class":111},[101,143051,65063],{"class":160},[101,143053,51481],{"class":107},[101,143055,1277],{"class":111},[101,143057,143058],{"class":103,"line":1181},[101,143059,1552],{"class":111},[21986,143061,143063],{"id":143062},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1449,143065],{"style":126388,"src":143066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[92,143068,143069],{"className":127279,"code":130636,"language":127281,"meta":20,"style":20},[98,143070,143071,143075,143089,143093],{"__ignoreMap":20},[101,143072,143073],{"class":103,"line":104},[101,143074,130643],{"class":170},[101,143076,143077,143079,143081,143083,143085,143087],{"class":103,"line":21},[101,143078,1021],{"class":111},[101,143080,51600],{"class":51289},[101,143082,53475],{"class":1950},[101,143084,157],{"class":111},[101,143086,130656],{"class":216},[101,143088,51296],{"class":111},[101,143090,143091],{"class":103,"line":1166},[101,143092,130663],{"class":111},[101,143094,143095,143097,143099],{"class":103,"line":1181},[101,143096,51774],{"class":111},[101,143098,51600],{"class":51289},[101,143100,51296],{"class":111},[21986,143102,143104],{"id":143103},"_18363-旋转木马","18.3.6.3 旋转木马",[1449,143106],{"style":126388,"src":143107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[92,143109,143110],{"className":126532,"code":142335,"language":126534,"meta":20,"style":20},[98,143111,143112,143118,143134],{"__ignoreMap":20},[101,143113,143114,143116],{"class":103,"line":104},[101,143115,51600],{"class":51289},[101,143117,15560],{"class":111},[101,143119,143120,143122,143124,143126,143128,143130,143132],{"class":103,"line":21},[101,143121,136516],{"class":160},[101,143123,51426],{"class":111},[101,143125,142352],{"class":160},[101,143127,112],{"class":111},[101,143129,640],{"class":160},[101,143131,142359],{"class":107},[101,143133,2706],{"class":111},[101,143135,143136],{"class":103,"line":1166},[101,143137,1552],{"class":111},[5114,143139,143140],{},"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":20,"searchDepth":21,"depth":21,"links":143142},[143143,143150],{"id":142238,"depth":21,"text":142239,"children":143144},[143145,143146,143147,143148,143149],{"id":142262,"depth":1166,"text":142263},{"id":142317,"depth":1166,"text":142318},{"id":142442,"depth":1166,"text":142443},{"id":142545,"depth":1166,"text":142546},{"id":142863,"depth":1166,"text":142864},{"id":142891,"depth":21,"text":142892,"children":143151},[143152,143153,143154,143155,143156,143157],{"id":142898,"depth":1166,"text":142899},{"id":142905,"depth":1166,"text":142906},{"id":142921,"depth":1166,"text":142922},{"id":142931,"depth":1166,"text":142932},{"id":142958,"depth":1166,"text":142959},{"id":143013,"depth":1166,"text":143014},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142230,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143164,"title":143165,"body":143166,"description":23365,"extension":24,"meta":143369,"navigation":27,"path":143370,"seo":143371,"stem":143372,"__hash__":143373},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143167,"toc":143358},[143168,143171,143175,143178,143181,143185,143188,143191,143194,143198,143201,143205,143208,143212,143215,143219,143233,143237,143262,143265,143268,143285,143289,143293,143296,143299,143303,143306,143309,143327,143331,143334,143348,143352,143355],[39,143169,143165],{"id":143170},"_19-移动端基础-前缀现状与视口",[43,143172,143174],{"id":143173},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1449,143176],{"style":126388,"src":143177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[10,143179,143180],{},"意思就是加个前缀，增加兼容性",[43,143182,143184],{"id":143183},"_192-移动端现状认识","19.2 移动端现状认识",[1449,143186],{"style":126388,"src":143187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[10,143189,143190],{},"调试方法：",[1449,143192],{"style":126388,"src":143193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[43,143195,143197],{"id":143196},"_193-视口","19.3 视口",[10,143199,143200],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[72,143202,143204],{"id":143203},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1449,143206],{"style":126388,"src":143207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[72,143209,143211],{"id":143210},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1449,143213],{"style":126388,"src":143214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[72,143216,143218],{"id":143217},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1118,143220,143221,143224,143227,143230],{},[58,143222,143223],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[58,143225,143226],{},"理想视口，对设备来讲，是最理想的视口尺寸",[58,143228,143229],{},"需要手动添写meta视口标签通知浏览器操作",[58,143231,143232],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[72,143234,143236],{"id":143235},"_1934-meta视口标签","19.3.4 meta视口标签",[92,143238,143240],{"className":127279,"code":143239,"language":127281,"meta":20,"style":20},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[98,143241,143242],{"__ignoreMap":20},[101,143243,143244,143246,143248,143250,143252,143254,143256,143258,143260],{"class":103,"line":104},[101,143245,1021],{"class":111},[101,143247,51333],{"class":51289},[101,143249,14908],{"class":1950},[101,143251,157],{"class":111},[101,143253,51380],{"class":216},[101,143255,51360],{"class":1950},[101,143257,157],{"class":111},[101,143259,51387],{"class":216},[101,143261,51296],{"class":111},[1449,143263],{"style":126388,"src":143264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[10,143266,143267],{},"标准视口设置：",[55,143269,143270,143273,143276,143279,143282],{},[58,143271,143272],{},"视口宽度和设备保持一致",[58,143274,143275],{},"视口的默认缩放比例1.0",[58,143277,143278],{},"不允许用户自行缩放",[58,143280,143281],{},"最大允许的缩放比例1.0",[58,143283,143284],{},"最小允许的缩放比例1.0",[72,143286,143288],{"id":143287},"_1935-二倍图","19.3.5 二倍图",[21986,143290,143292],{"id":143291},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1449,143294],{"style":126388,"src":143295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1449,143297],{"style":126388,"src":143298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21986,143300,143302],{"id":143301},"_19352-多倍图","19.3.5.2 多倍图",[1449,143304],{"style":126388,"src":143305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[10,143307,143308],{},"二倍图法，代码如下：",[92,143310,143312],{"className":126532,"code":143311,"language":126534,"meta":20,"style":20},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[98,143313,143314,143319],{"__ignoreMap":20},[101,143315,143316],{"class":103,"line":104},[101,143317,143318],{"class":170},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[101,143320,143321,143324],{"class":103,"line":21},[101,143322,143323],{"class":51289},"background-size",[101,143325,143326],{"class":111},": 50% 50%;\n",[21986,143328,143330],{"id":143329},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1449,143332],{"style":126388,"src":143333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[55,143335,143336,143339,143342,143345],{},[58,143337,143338],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[58,143340,143341],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[58,143343,143344],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[58,143346,143347],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21986,143349,143351],{"id":143350},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1449,143353],{"style":126388,"src":143354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5114,143356,143357],{},"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":20,"searchDepth":21,"depth":21,"links":143359},[143360,143361,143362],{"id":143173,"depth":21,"text":143174},{"id":143183,"depth":21,"text":143184},{"id":143196,"depth":21,"text":143197,"children":143363},[143364,143365,143366,143367,143368],{"id":143203,"depth":1166,"text":143204},{"id":143210,"depth":1166,"text":143211},{"id":143217,"depth":1166,"text":143218},{"id":143235,"depth":1166,"text":143236},{"id":143287,"depth":1166,"text":143288},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143165,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143375,"title":143376,"body":143377,"description":23365,"extension":24,"meta":144254,"navigation":27,"path":144255,"seo":144256,"stem":144257,"__hash__":144258},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143378,"toc":144238},[143379,143382,143386,143393,143396,143403,143406,143411,143414,143418,143422,143429,143432,143435,143439,143442,143445,143448,143451,143454,143458,143461,143465,143467,143470,143473,143476,143479,143481,143484,143486,143516,143518,143548,143552,143555,143559,143562,143579,143582,143585,143661,143663,143666,143669,143672,143675,143677,143680,143683,143687,143709,143712,143715,143719,143722,143728,143731,143735,143738,143741,143745,143748,143751,143754,143758,143761,143764,143767,143770,143774,143777,143781,143788,143791,143794,143797,143800,143810,143813,143816,143823,143826,143830,143833,143836,143840,143843,143846,143849,143894,143897,143900,143903,143905,144034,144036,144074,144077,144080,144082,144200,144202,144236],[39,143380,143376],{"id":143381},"_20-移动端布局实战上篇",[43,143383,143385],{"id":143384},"_201-移动端主流方案","20.1 移动端主流方案",[55,143387,143388],{},[58,143389,143390],{},[261,143391,143392],{},"单独移动端页面（主流）",[1449,143394],{"style":126388,"src":143395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[55,143397,143398],{"start":21},[58,143399,143400],{},[261,143401,143402],{},"响应式兼容PC移动端",[1449,143404],{"style":126388,"src":143405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[55,143407,143408],{"start":1166},[58,143409,143410],{},"两种页面选型布局方式",[1449,143412],{"style":126388,"src":143413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[43,143415,143417],{"id":143416},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[72,143419,143421],{"id":143420},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[10,143423,143424,143425],{},"官网地址： ",[14,143426,143427],{"href":143427,"rel":143428},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[18],[1449,143430],{"style":126388,"src":143431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1449,143433],{"style":126388,"src":143434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[72,143436,143438],{"id":143437},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1449,143440],{"style":126388,"src":143441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1449,143443],{"style":126388,"src":143444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[10,143446,143447],{},"去除高亮：",[10,143449,143450],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[10,143452,143453],{},"-webkit- tap-highlight-color: transparent;",[43,143455,143457],{"id":143456},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1449,143459],{"style":126388,"src":143460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[43,143462,143464],{"id":143463},"_204-流式布局案例","20.4 流式布局案例",[10,143466,141],{},[10,143468,143469],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[10,143471,143472],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[10,143474,143475],{},"图片格式：",[1449,143477],{"style":126388,"src":143478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[10,143480,135575],{},[1449,143482],{"style":126388,"src":143483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[10,143485,139902],{},[92,143487,143488],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,143489,143490],{"__ignoreMap":20},[101,143491,143492,143494,143496,143498,143500,143502,143504,143506,143508,143510,143512,143514],{"class":103,"line":104},[101,143493,1021],{"class":111},[101,143495,1449],{"class":51289},[101,143497,55228],{"class":1950},[101,143499,157],{"class":111},[101,143501,134049],{"class":216},[101,143503,55236],{"class":1950},[101,143505,157],{"class":111},[101,143507,134056],{"class":216},[101,143509,134059],{"class":1950},[101,143511,157],{"class":111},[101,143513,134064],{"class":216},[101,143515,51296],{"class":111},[10,143517,139991],{},[92,143519,143520],{"className":127279,"code":134034,"language":127281,"meta":20,"style":20},[98,143521,143522],{"__ignoreMap":20},[101,143523,143524,143526,143528,143530,143532,143534,143536,143538,143540,143542,143544,143546],{"class":103,"line":104},[101,143525,1021],{"class":111},[101,143527,1449],{"class":51289},[101,143529,55228],{"class":1950},[101,143531,157],{"class":111},[101,143533,134049],{"class":216},[101,143535,55236],{"class":1950},[101,143537,157],{"class":111},[101,143539,134056],{"class":216},[101,143541,134059],{"class":1950},[101,143543,157],{"class":111},[101,143545,134064],{"class":216},[101,143547,51296],{"class":111},[43,143549,143551],{"id":143550},"_205-flex布局","20.5 flex布局",[1449,143553],{"style":126388,"src":143554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[72,143556,143558],{"id":143557},"_2051-布局原理","20.5.1 布局原理",[10,143560,143561],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1118,143563,143564,143567,143570,143573,143576],{},[58,143565,143566],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[58,143568,143569],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[58,143571,143572],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[58,143574,143575],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[58,143577,143578],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[10,143580,143581],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[10,143583,143584],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[92,143586,143588],{"className":126532,"code":143587,"language":126534,"meta":20,"style":20},"\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",[98,143589,143590,143595,143602,143612,143624,143635,143646,143657],{"__ignoreMap":20},[101,143591,143592],{"class":103,"line":104},[101,143593,143594],{"class":170},"\u002F* Flex 弹性布局 *\u002F\n",[101,143596,143597,143600],{"class":103,"line":21},[101,143598,143599],{"class":1950},".container",[101,143601,15560],{"class":111},[101,143603,143604,143606,143608,143610],{"class":103,"line":1166},[101,143605,128148],{"class":160},[101,143607,51426],{"class":111},[101,143609,51466],{"class":160},[101,143611,1277],{"class":111},[101,143613,143614,143617,143619,143622],{"class":103,"line":1181},[101,143615,143616],{"class":160},"  flex-direction",[101,143618,51426],{"class":111},[101,143620,143621],{"class":160},"row",[101,143623,1277],{"class":111},[101,143625,143626,143629,143631,143633],{"class":103,"line":1187},[101,143627,143628],{"class":160},"  justify-content",[101,143630,51426],{"class":111},[101,143632,51657],{"class":160},[101,143634,1277],{"class":111},[101,143636,143637,143640,143642,143644],{"class":103,"line":1201},[101,143638,143639],{"class":160},"  align-items",[101,143641,51426],{"class":111},[101,143643,51581],{"class":160},[101,143645,1277],{"class":111},[101,143647,143648,143651,143653,143655],{"class":103,"line":1207},[101,143649,143650],{"class":160},"  flex-wrap",[101,143652,51426],{"class":111},[101,143654,78599],{"class":160},[101,143656,1277],{"class":111},[101,143658,143659],{"class":103,"line":1298},[101,143660,1552],{"class":111},[10,143662,70442],{},[10,143664,143665],{},".form-item .male-label {",[10,143667,143668],{},"   margin-right: 20px;",[10,143670,143671],{},"   display: inline-flex;",[10,143673,143674],{},"   align-items: center;",[10,143676,1057],{},[1449,143678],{"style":126388,"src":143679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1449,143681],{"style":126388,"src":143682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[72,143684,143686],{"id":143685},"_2052-常见父项属性","20.5.2 常见父项属性",[55,143688,143689,143692,143695,143698,143701,143704,143707],{},[58,143690,143691],{},"flex-direction：设置主轴的方向",[58,143693,143694],{},"justify-content：设置主轴上的子元素排列方式",[58,143696,143697],{},"flex-wrap：设置子元素是否换行",[58,143699,143700],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[58,143702,143703],{},"align-items：设置侧轴上的子元素排列方式（单行）",[58,143705,143706],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[58,143708,143691],{},[1449,143710],{"style":126388,"src":143711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1449,143713],{"style":126388,"src":143714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[55,143716,143717],{"start":21},[58,143718,143694],{},[1449,143720],{"style":126388,"src":143721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[10,143723,143724,143727],{},[98,143725,143726],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[10,143729,143730],{},"跟着主轴走",[55,143732,143733],{"start":1166},[58,143734,143697],{},[1449,143736],{"style":126388,"src":143737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[10,143739,143740],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[55,143742,143743],{"start":1181},[58,143744,143700],{},[1449,143746],{"style":126388,"src":143747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[10,143749,143750],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[10,143752,143753],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[55,143755,143756],{"start":1187},[58,143757,143703],{},[1449,143759],{"style":126388,"src":143760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[10,143762,143763],{},"align-items与align-content之间的区别：",[10,143765,143766],{},"单找items，多找content",[1449,143768],{"style":126388,"src":143769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[55,143771,143772],{"start":1201},[58,143773,143706],{},[1449,143775],{"style":126388,"src":143776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[72,143778,143780],{"id":143779},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[55,143782,143783],{},[58,143784,143785],{},[261,143786,143787],{},"flex 属性",[10,143789,143790],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1449,143792],{"style":126388,"src":143793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[10,143795,143796],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[10,143798,143799],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[55,143801,143802],{"start":21},[58,143803,143804,13783,143807],{},[261,143805,143806],{},"align-self",[261,143808,143809],{},"控制子项自己在侧轴上的排列方式",[1449,143811],{"style":126388,"src":143812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[10,143814,143815],{},"单个子盒子在父盒子侧轴上的排列方式",[55,143817,143818],{"start":1166},[58,143819,143820,143822],{},[261,143821,95277],{}," 属性定义项目的排列顺序",[1449,143824],{"style":126388,"src":143825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[72,143827,143829],{"id":143828},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1449,143831],{"style":126388,"src":143832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[10,143834,143835],{},"必须要添加浏览器的私有前缀",[72,143837,143839],{"id":143838},"_2055-携程网首页案例","20.5.5 携程网首页案例",[10,143841,143842],{},"学到最重要的知识：",[10,143844,143845],{},"flex处理这样的布局思路",[1449,143847],{"style":126388,"src":143848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[92,143850,143852],{"className":126532,"code":143851,"language":126534,"meta":20,"style":20},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[98,143853,143854,143860,143870,143880,143890],{"__ignoreMap":20},[101,143855,143856,143858],{"class":103,"line":104},[101,143857,143599],{"class":1950},[101,143859,15560],{"class":111},[101,143861,143862,143864,143866,143868],{"class":103,"line":21},[101,143863,128148],{"class":160},[101,143865,51426],{"class":111},[101,143867,51466],{"class":160},[101,143869,1277],{"class":111},[101,143871,143872,143874,143876,143878],{"class":103,"line":1166},[101,143873,143628],{"class":160},[101,143875,51426],{"class":111},[101,143877,51581],{"class":160},[101,143879,1277],{"class":111},[101,143881,143882,143884,143886,143888],{"class":103,"line":1181},[101,143883,143639],{"class":160},[101,143885,51426],{"class":111},[101,143887,51581],{"class":160},[101,143889,1277],{"class":111},[101,143891,143892],{"class":103,"line":1187},[101,143893,1552],{"class":111},[10,143895,143896],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[10,143898,143899],{},"使用属性选择器",[1449,143901],{"style":126388,"src":143902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[10,143904,68878],{},[92,143906,143908],{"className":127279,"code":143907,"language":127281,"meta":20,"style":20},"\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",[98,143909,143910,143915,143929,143934,143954,143959,143978,143983,144002,144007,144026],{"__ignoreMap":20},[101,143911,143912],{"class":103,"line":104},[101,143913,143914],{"class":170},"\u003C!-- 携程网移动端案例结构 -->\n",[101,143916,143917,143919,143921,143923,143925,143927],{"class":103,"line":21},[101,143918,1021],{"class":111},[101,143920,51600],{"class":51289},[101,143922,53475],{"class":1950},[101,143924,157],{"class":111},[101,143926,92312],{"class":216},[101,143928,51296],{"class":111},[101,143930,143931],{"class":103,"line":1166},[101,143932,143933],{"class":170},"  \u003C!-- 搜索栏 -->\n",[101,143935,143936,143938,143940,143942,143944,143947,143950,143952],{"class":103,"line":1181},[101,143937,52133],{"class":111},[101,143939,51600],{"class":51289},[101,143941,53475],{"class":1950},[101,143943,157],{"class":111},[101,143945,143946],{"class":216},"\"search-index\"",[101,143948,143949],{"class":111},">...\u003C\u002F",[101,143951,51600],{"class":51289},[101,143953,51296],{"class":111},[101,143955,143956],{"class":103,"line":1187},[101,143957,143958],{"class":170},"  \u003C!-- 焦点图 -->\n",[101,143960,143961,143963,143965,143967,143969,143972,143974,143976],{"class":103,"line":1201},[101,143962,52133],{"class":111},[101,143964,51600],{"class":51289},[101,143966,53475],{"class":1950},[101,143968,157],{"class":111},[101,143970,143971],{"class":216},"\"focus\"",[101,143973,143949],{"class":111},[101,143975,51600],{"class":51289},[101,143977,51296],{"class":111},[101,143979,143980],{"class":103,"line":1207},[101,143981,143982],{"class":170},"  \u003C!-- 主导航 -->\n",[101,143984,143985,143987,143989,143991,143993,143996,143998,144000],{"class":103,"line":1298},[101,143986,52133],{"class":111},[101,143988,51600],{"class":51289},[101,143990,53475],{"class":1950},[101,143992,157],{"class":111},[101,143994,143995],{"class":216},"\"local-nav\"",[101,143997,143949],{"class":111},[101,143999,51600],{"class":51289},[101,144001,51296],{"class":111},[101,144003,144004],{"class":103,"line":1304},[101,144005,144006],{"class":170},"  \u003C!-- 子导航 -->\n",[101,144008,144009,144011,144013,144015,144017,144020,144022,144024],{"class":103,"line":1316},[101,144010,52133],{"class":111},[101,144012,51600],{"class":51289},[101,144014,53475],{"class":1950},[101,144016,157],{"class":111},[101,144018,144019],{"class":216},"\"nav-common\"",[101,144021,143949],{"class":111},[101,144023,51600],{"class":51289},[101,144025,51296],{"class":111},[101,144027,144028,144030,144032],{"class":103,"line":1599},[101,144029,51774],{"class":111},[101,144031,51600],{"class":51289},[101,144033,51296],{"class":111},[10,144035,70442],{},[92,144037,144038],{"className":126532,"code":136984,"language":126534,"meta":20,"style":20},[98,144039,144040,144054,144070],{"__ignoreMap":20},[101,144041,144042,144044,144046,144048,144050,144052],{"class":103,"line":104},[101,144043,53810],{"class":51289},[101,144045,1001],{"class":111},[101,144047,103087],{"class":1950},[101,144049,157],{"class":107},[101,144051,62688],{"class":216},[101,144053,137001],{"class":111},[101,144055,144056,144058,144060,144062,144064,144066,144068],{"class":103,"line":21},[101,144057,70885],{"class":160},[101,144059,51426],{"class":111},[101,144061,329],{"class":160},[101,144063,51481],{"class":107},[101,144065,51510],{"class":160},[101,144067,130112],{"class":160},[101,144069,1277],{"class":111},[101,144071,144072],{"class":103,"line":1166},[101,144073,1552],{"class":111},[10,144075,144076],{},"总代码和效果展示：",[1449,144078],{"style":126388,"src":144079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[10,144081,68878],{},[92,144083,144084],{"className":127279,"code":143907,"language":127281,"meta":20,"style":20},[98,144085,144086,144090,144104,144108,144126,144130,144148,144152,144170,144174,144192],{"__ignoreMap":20},[101,144087,144088],{"class":103,"line":104},[101,144089,143914],{"class":170},[101,144091,144092,144094,144096,144098,144100,144102],{"class":103,"line":21},[101,144093,1021],{"class":111},[101,144095,51600],{"class":51289},[101,144097,53475],{"class":1950},[101,144099,157],{"class":111},[101,144101,92312],{"class":216},[101,144103,51296],{"class":111},[101,144105,144106],{"class":103,"line":1166},[101,144107,143933],{"class":170},[101,144109,144110,144112,144114,144116,144118,144120,144122,144124],{"class":103,"line":1181},[101,144111,52133],{"class":111},[101,144113,51600],{"class":51289},[101,144115,53475],{"class":1950},[101,144117,157],{"class":111},[101,144119,143946],{"class":216},[101,144121,143949],{"class":111},[101,144123,51600],{"class":51289},[101,144125,51296],{"class":111},[101,144127,144128],{"class":103,"line":1187},[101,144129,143958],{"class":170},[101,144131,144132,144134,144136,144138,144140,144142,144144,144146],{"class":103,"line":1201},[101,144133,52133],{"class":111},[101,144135,51600],{"class":51289},[101,144137,53475],{"class":1950},[101,144139,157],{"class":111},[101,144141,143971],{"class":216},[101,144143,143949],{"class":111},[101,144145,51600],{"class":51289},[101,144147,51296],{"class":111},[101,144149,144150],{"class":103,"line":1207},[101,144151,143982],{"class":170},[101,144153,144154,144156,144158,144160,144162,144164,144166,144168],{"class":103,"line":1298},[101,144155,52133],{"class":111},[101,144157,51600],{"class":51289},[101,144159,53475],{"class":1950},[101,144161,157],{"class":111},[101,144163,143995],{"class":216},[101,144165,143949],{"class":111},[101,144167,51600],{"class":51289},[101,144169,51296],{"class":111},[101,144171,144172],{"class":103,"line":1304},[101,144173,144006],{"class":170},[101,144175,144176,144178,144180,144182,144184,144186,144188,144190],{"class":103,"line":1316},[101,144177,52133],{"class":111},[101,144179,51600],{"class":51289},[101,144181,53475],{"class":1950},[101,144183,157],{"class":111},[101,144185,144019],{"class":216},[101,144187,143949],{"class":111},[101,144189,51600],{"class":51289},[101,144191,51296],{"class":111},[101,144193,144194,144196,144198],{"class":103,"line":1599},[101,144195,51774],{"class":111},[101,144197,51600],{"class":51289},[101,144199,51296],{"class":111},[10,144201,70442],{},[92,144203,144204],{"className":127279,"code":130636,"language":127281,"meta":20,"style":20},[98,144205,144206,144210,144224,144228],{"__ignoreMap":20},[101,144207,144208],{"class":103,"line":104},[101,144209,130643],{"class":170},[101,144211,144212,144214,144216,144218,144220,144222],{"class":103,"line":21},[101,144213,1021],{"class":111},[101,144215,51600],{"class":51289},[101,144217,53475],{"class":1950},[101,144219,157],{"class":111},[101,144221,130656],{"class":216},[101,144223,51296],{"class":111},[101,144225,144226],{"class":103,"line":1166},[101,144227,130663],{"class":111},[101,144229,144230,144232,144234],{"class":103,"line":1181},[101,144231,51774],{"class":111},[101,144233,51600],{"class":51289},[101,144235,51296],{"class":111},[5114,144237,137933],{},{"title":20,"searchDepth":21,"depth":21,"links":144239},[144240,144241,144245,144246,144247],{"id":143384,"depth":21,"text":143385},{"id":143416,"depth":21,"text":143417,"children":144242},[144243,144244],{"id":143420,"depth":1166,"text":143421},{"id":143437,"depth":1166,"text":143438},{"id":143456,"depth":21,"text":143457},{"id":143463,"depth":21,"text":143464},{"id":143550,"depth":21,"text":143551,"children":144248},[144249,144250,144251,144252,144253],{"id":143557,"depth":1166,"text":143558},{"id":143685,"depth":1166,"text":143686},{"id":143779,"depth":1166,"text":143780},{"id":143828,"depth":1166,"text":143829},{"id":143838,"depth":1166,"text":143839},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143376,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144260,"title":144261,"body":144262,"description":23365,"extension":24,"meta":145489,"navigation":27,"path":145490,"seo":145491,"stem":145492,"__hash__":145493},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144263,"toc":145467},[144264,144267,144271,144275,144278,144281,144285,144290,144293,144296,144299,144302,144305,144362,144365,144370,144373,144376,144380,144391,144395,144398,144401,144408,144413,144417,144420,144426,144429,144433,144436,144443,144446,144449,144456,144459,144466,144469,144472,144479,144482,144485,144487,144504,144508,144511,144514,144517,144521,144524,144527,144530,144533,144536,144539,144541,144544,144547,144609,144612,144722,144729,144735,144738,144741,144745,144748,144752,144757,144760,144767,144770,144776,144781,144784,144787,144790,144793,144796,144799,144802,144805,144861,144863,144889,144893,144896,144899,144902,144910,144913,144916,144920,144976,144979,144983,144989,145000,145003,145008,145011,145014,145020,145023,145026,145029,145032,145035,145038,145041,145044,145069,145075,145078,145081,145084,145087,145090,145093,145098,145101,145104,145107,145115,145118,145125,145128,145131,145133,145157,145159,145162,145165,145168,145171,145174,145177,145180,145214,145217,145220,145254,145261,145264,145267,145270,145273,145276,145279,145286,145289,145292,145295,145298,145305,145308,145311,145318,145321,145324,145328,145331,145334,145337,145340,145343,145346,145349,145352,145354,145378,145380,145404,145408,145419,145422,145425,145428,145431,145434,145437,145440,145443,145446,145449,145452,145455,145458,145461,145464],[39,144265,144261],{"id":144266},"_21-移动端布局实战下篇",[43,144268,144270],{"id":144269},"_211-rem适配布局","21.1 rem适配布局",[72,144272,144274],{"id":144273},"_2111-rem单位","21.1.1 rem单位",[1449,144276],{"style":126388,"src":144277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[10,144279,144280],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[72,144282,144284],{"id":144283},"_2112-媒体查询","21.1.2 媒体查询",[55,144286,144287],{},[58,144288,144289],{},"参数介绍",[1449,144291],{"style":126388,"src":144292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1449,144294],{"style":126388,"src":144295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1449,144297],{"style":126388,"src":144298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1449,144300],{"style":126388,"src":144301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1449,144303],{"style":126388,"src":144304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[92,144306,144308],{"className":126532,"code":144307,"language":126534,"meta":20,"style":20},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[98,144309,144310,144315,144334,144341,144354,144358],{"__ignoreMap":20},[101,144311,144312],{"class":103,"line":104},[101,144313,144314],{"class":170},"\u002F* 媒体查询 *\u002F\n",[101,144316,144317,144320,144322,144325,144327,144330,144332],{"class":103,"line":21},[101,144318,144319],{"class":107},"@media",[101,144321,1645],{"class":111},[101,144323,144324],{"class":160},"max-width",[101,144326,51426],{"class":111},[101,144328,144329],{"class":160},"768",[101,144331,51481],{"class":107},[101,144333,12430],{"class":111},[101,144335,144336,144339],{"class":103,"line":1166},[101,144337,144338],{"class":1950},"  .container",[101,144340,15560],{"class":111},[101,144342,144343,144346,144348,144350,144352],{"class":103,"line":1181},[101,144344,144345],{"class":160},"    width",[101,144347,51426],{"class":111},[101,144349,422],{"class":160},[101,144351,439],{"class":107},[101,144353,1277],{"class":111},[101,144355,144356],{"class":103,"line":1187},[101,144357,127328],{"class":111},[101,144359,144360],{"class":103,"line":1201},[101,144361,1552],{"class":111},[10,144363,144364],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[55,144366,144367],{"start":21},[58,144368,144369],{},"引入资源",[1449,144371],{"style":126388,"src":144372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[10,144374,144375],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[72,144377,144379],{"id":144378},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1118,144381,144382,144385,144388],{},[58,144383,144384],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[58,144386,144387],{},"媒体查询可以根据不同设备宽度来修改样式",[58,144389,144390],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[43,144392,144394],{"id":144393},"_212-less基础","21.2 Less基础",[10,144396,144397],{},"css冗余度较高，不利于复用，没有很好的计算能力",[10,144399,144400],{},"Less可以解决该问题，它是css的扩展语言",[10,144402,144403,144404],{},"Less中文网址： ",[14,144405,144406],{"href":144406,"rel":144407},"http:\u002F\u002Flesscss.cn\u002F",[18],[10,144409,144410],{},[261,144411,144412],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[72,144414,144416],{"id":144415},"_2121-less安装","21.2.1 less安装",[10,144418,144419],{},"如果使用vscode，则无需进行下方安装步骤",[10,144421,144422],{},[14,144423,144424],{"href":144424,"rel":144425},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[18],[1449,144427],{"style":126388,"src":144428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[72,144430,144432],{"id":144431},"_2122-less使用","21.2.2 less使用",[10,144434,144435],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[55,144437,144438],{},[58,144439,144440],{},[261,144441,144442],{},"Less 变量",[1449,144444],{"style":126388,"src":144445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1449,144447],{"style":126388,"src":144448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[55,144450,144451],{"start":21},[58,144452,144453],{},[261,144454,144455],{},"Less 编译",[1449,144457],{"style":126388,"src":144458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[55,144460,144461],{"start":1166},[58,144462,144463],{},[261,144464,144465],{},"Less 嵌套",[1449,144467],{"style":126388,"src":144468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1449,144470],{"style":126388,"src":144471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[55,144473,144474],{"start":1181},[58,144475,144476],{},[261,144477,144478],{},"Less 运算",[1449,144480],{"style":126388,"src":144481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[10,144483,144484],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[10,144486,141],{},[1118,144488,144489,144492,144495,144498,144501],{},[58,144490,144491],{},"乘号（*）和除号（\u002F）的写法",[58,144493,144494],{},"运算符中间左右有个空格隔开 1px + 5",[58,144496,144497],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[58,144499,144500],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[58,144502,144503],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[43,144505,144507],{"id":144506},"_213-rem-适配方案","21.3 rem 适配方案",[10,144509,144510],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[10,144512,144513],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1449,144515],{"style":126388,"src":144516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[72,144518,144520],{"id":144519},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[10,144522,144523],{},"rem + 媒体查询 + less 技术",[1449,144525],{"style":126388,"src":144526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[10,144528,144529],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[10,144531,144532],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1449,144534],{"style":126388,"src":144535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[10,144537,144538],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[10,144540,14621],{},[1449,144542],{"style":126388,"src":144543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[10,144545,144546],{},"index.html:",[92,144548,144550],{"className":126532,"code":144549,"language":126534,"meta":20,"style":20},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[98,144551,144552,144557,144563,144579,144583,144589,144605],{"__ignoreMap":20},[101,144553,144554],{"class":103,"line":104},[101,144555,144556],{"class":170},"\u002F* rem 适配方案 *\u002F\n",[101,144558,144559,144561],{"class":103,"line":21},[101,144560,50624],{"class":51289},[101,144562,15560],{"class":111},[101,144564,144565,144567,144569,144572,144574,144576],{"class":103,"line":1166},[101,144566,70615],{"class":160},[101,144568,51426],{"class":111},[101,144570,144571],{"class":160},"62.5",[101,144573,439],{"class":107},[101,144575,130395],{"class":111},[101,144577,144578],{"class":170},"\u002F* 1rem = 10px *\u002F\n",[101,144580,144581],{"class":103,"line":1181},[101,144582,1552],{"class":111},[101,144584,144585,144587],{"class":103,"line":1187},[101,144586,130380],{"class":1950},[101,144588,15560],{"class":111},[101,144590,144591,144593,144595,144597,144600,144602],{"class":103,"line":1201},[101,144592,70557],{"class":160},[101,144594,51426],{"class":111},[101,144596,557],{"class":160},[101,144598,144599],{"class":107},"rem",[101,144601,130395],{"class":111},[101,144603,144604],{"class":170},"\u002F* 100px *\u002F\n",[101,144606,144607],{"class":103,"line":1207},[101,144608,1552],{"class":111},[10,144610,144611],{},"common.less",[92,144613,144615],{"className":126532,"code":144614,"language":126534,"meta":20,"style":20},"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",[98,144616,144617,144623,144638,144642,144648,144662,144666,144670,144674,144680,144694,144698,144704,144718],{"__ignoreMap":20},[101,144618,144619,144621],{"class":103,"line":104},[101,144620,50624],{"class":51289},[101,144622,15560],{"class":111},[101,144624,144625,144627,144629,144631,144633,144635],{"class":103,"line":21},[101,144626,70615],{"class":160},[101,144628,51426],{"class":111},[101,144630,144571],{"class":160},[101,144632,439],{"class":107},[101,144634,26056],{"class":111},[101,144636,144637],{"class":170},"\u002F* 10px *\u002F\n",[101,144639,144640],{"class":103,"line":1166},[101,144641,1552],{"class":111},[101,144643,144644,144646],{"class":103,"line":1181},[101,144645,51600],{"class":51289},[101,144647,15560],{"class":111},[101,144649,144650,144652,144654,144656,144658,144660],{"class":103,"line":1187},[101,144651,70557],{"class":160},[101,144653,51426],{"class":111},[101,144655,557],{"class":160},[101,144657,144599],{"class":107},[101,144659,26056],{"class":111},[101,144661,144604],{"class":170},[101,144663,144664],{"class":103,"line":1201},[101,144665,1552],{"class":111},[101,144667,144668],{"class":103,"line":1207},[101,144669,135993],{"class":111},[101,144671,144672],{"class":103,"line":1298},[101,144673,144556],{"class":170},[101,144675,144676,144678],{"class":103,"line":1304},[101,144677,50624],{"class":51289},[101,144679,15560],{"class":111},[101,144681,144682,144684,144686,144688,144690,144692],{"class":103,"line":1316},[101,144683,70615],{"class":160},[101,144685,51426],{"class":111},[101,144687,144571],{"class":160},[101,144689,439],{"class":107},[101,144691,130395],{"class":111},[101,144693,144578],{"class":170},[101,144695,144696],{"class":103,"line":1599},[101,144697,1552],{"class":111},[101,144699,144700,144702],{"class":103,"line":1604},[101,144701,130380],{"class":1950},[101,144703,15560],{"class":111},[101,144705,144706,144708,144710,144712,144714,144716],{"class":103,"line":1610},[101,144707,70557],{"class":160},[101,144709,51426],{"class":111},[101,144711,557],{"class":160},[101,144713,144599],{"class":107},[101,144715,130395],{"class":111},[101,144717,144604],{"class":170},[101,144719,144720],{"class":103,"line":1615},[101,144721,1552],{"class":111},[10,144723,144724,144725,144728],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23542,144726,144727],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[92,144730,144733],{"className":144731,"code":144732,"language":5175},[5173],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[98,144734,144732],{"__ignoreMap":20},[10,144736,144737],{},"less保存时会自动变成.css文件",[10,144739,144740],{},"好好搞懂上述代码写法",[72,144742,144744],{"id":144743},"_2132-样式导入样式","21.3.2 样式导入样式",[1449,144746],{"style":126388,"src":144747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[72,144749,144751],{"id":144750},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[55,144753,144754],{},[58,144755,144756],{},"准备工作",[1449,144758],{"style":126388,"src":144759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[10,144761,144762,144763],{},"github地址：",[14,144764,144765],{"href":144765,"rel":144766},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[18],[10,144768,144769],{},"下载之后，将index.js文件拖到项目中就可以了",[10,144771,144772,144773],{},"js文件引入到index.html中使用的是",[98,144774,144775],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[55,144777,144778],{"start":21},[58,144779,144780],{},"vscode插件",[1449,144782],{"style":126388,"src":144783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[10,144785,144786],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[10,144788,144789],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1449,144791],{"style":126388,"src":144792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[10,144794,144795],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1449,144797],{"style":126388,"src":144798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[10,144800,144801],{},"修改成75就可以，alt+z为快捷键",[10,144803,144804],{},"index.css：",[92,144806,144807],{"className":126532,"code":144549,"language":126534,"meta":20,"style":20},[98,144808,144809,144813,144819,144833,144837,144843,144857],{"__ignoreMap":20},[101,144810,144811],{"class":103,"line":104},[101,144812,144556],{"class":170},[101,144814,144815,144817],{"class":103,"line":21},[101,144816,50624],{"class":51289},[101,144818,15560],{"class":111},[101,144820,144821,144823,144825,144827,144829,144831],{"class":103,"line":1166},[101,144822,70615],{"class":160},[101,144824,51426],{"class":111},[101,144826,144571],{"class":160},[101,144828,439],{"class":107},[101,144830,130395],{"class":111},[101,144832,144578],{"class":170},[101,144834,144835],{"class":103,"line":1181},[101,144836,1552],{"class":111},[101,144838,144839,144841],{"class":103,"line":1187},[101,144840,130380],{"class":1950},[101,144842,15560],{"class":111},[101,144844,144845,144847,144849,144851,144853,144855],{"class":103,"line":1201},[101,144846,70557],{"class":160},[101,144848,51426],{"class":111},[101,144850,557],{"class":160},[101,144852,144599],{"class":107},[101,144854,130395],{"class":111},[101,144856,144604],{"class":170},[101,144858,144859],{"class":103,"line":1207},[101,144860,1552],{"class":111},[10,144862,144546],{},[92,144864,144865],{"className":126532,"code":126936,"language":126534,"meta":20,"style":20},[98,144866,144867,144873,144885],{"__ignoreMap":20},[101,144868,144869,144871],{"class":103,"line":104},[101,144870,51789],{"class":51289},[101,144872,15560],{"class":111},[101,144874,144875,144877,144879,144881,144883],{"class":103,"line":21},[101,144876,70615],{"class":160},[101,144878,51426],{"class":111},[101,144880,712],{"class":160},[101,144882,51481],{"class":107},[101,144884,1277],{"class":111},[101,144886,144887],{"class":103,"line":1166},[101,144888,1552],{"class":111},[43,144890,144892],{"id":144891},"_214-响应式开发","21.4 响应式开发",[10,144894,144895],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1449,144897],{"style":126388,"src":144898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[10,144900,144901],{},"做法：",[1118,144903,144904,144907],{},[58,144905,144906],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[58,144908,144909],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1449,144911],{"style":126388,"src":144912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[10,144914,144915],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[72,144917,144919],{"id":144918},"_2141-简单代码示范","21.4.1 简单代码示范",[92,144921,144922],{"className":126532,"code":144549,"language":126534,"meta":20,"style":20},[98,144923,144924,144928,144934,144948,144952,144958,144972],{"__ignoreMap":20},[101,144925,144926],{"class":103,"line":104},[101,144927,144556],{"class":170},[101,144929,144930,144932],{"class":103,"line":21},[101,144931,50624],{"class":51289},[101,144933,15560],{"class":111},[101,144935,144936,144938,144940,144942,144944,144946],{"class":103,"line":1166},[101,144937,70615],{"class":160},[101,144939,51426],{"class":111},[101,144941,144571],{"class":160},[101,144943,439],{"class":107},[101,144945,130395],{"class":111},[101,144947,144578],{"class":170},[101,144949,144950],{"class":103,"line":1181},[101,144951,1552],{"class":111},[101,144953,144954,144956],{"class":103,"line":1187},[101,144955,130380],{"class":1950},[101,144957,15560],{"class":111},[101,144959,144960,144962,144964,144966,144968,144970],{"class":103,"line":1201},[101,144961,70557],{"class":160},[101,144963,51426],{"class":111},[101,144965,557],{"class":160},[101,144967,144599],{"class":107},[101,144969,130395],{"class":111},[101,144971,144604],{"class":170},[101,144973,144974],{"class":103,"line":1207},[101,144975,1552],{"class":111},[10,144977,144978],{},"父盒子一般命名为container",[72,144980,144982],{"id":144981},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[10,144984,144985,144986],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[261,144987,144988],{},"使得 Web 开发更加快捷",[1118,144990,144991],{},[58,144992,144993,144994],{},"官网：",[261,144995,144996],{},[14,144997,144998],{"href":144998,"rel":144999},"http:\u002F\u002Fgetbootstrap.com\u002F",[18],[10,145001,145002],{},"可以直接去官网拿现成的东西",[55,145004,145005],{},[58,145006,145007],{},"Bootstrap的使用",[10,145009,145010],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[10,145012,145013],{},"Bootstrap 使用四步曲：",[10,145015,145016,145019],{},[261,145017,145018],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1449,145021],{"style":126388,"src":145022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[10,145024,145025],{},"打开Bootstrap官网，然后下载",[1449,145027],{"style":126388,"src":145028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1449,145030],{"style":126388,"src":145031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[10,145033,145034],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[10,145036,145037],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[10,145039,145040],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1449,145042],{"style":126388,"src":145043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[92,145045,145047],{"className":126532,"code":145046,"language":126534,"meta":20,"style":20},".center {\n  color: red;\n}\n",[98,145048,145049,145055,145065],{"__ignoreMap":20},[101,145050,145051,145053],{"class":103,"line":104},[101,145052,126823],{"class":1950},[101,145054,15560],{"class":111},[101,145056,145057,145059,145061,145063],{"class":103,"line":21},[101,145058,70894],{"class":160},[101,145060,51426],{"class":111},[101,145062,57410],{"class":160},[101,145064,1277],{"class":111},[101,145066,145067],{"class":103,"line":1166},[101,145068,1552],{"class":111},[10,145070,145071,145074],{},[98,145072,145073],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1449,145076],{"style":126388,"src":145077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1449,145079],{"style":126388,"src":145080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1449,145082],{"style":126388,"src":145083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[10,145085,145086],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1449,145088],{"style":126388,"src":145089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[10,145091,145092],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[55,145094,145095],{"start":21},[58,145096,145097],{},"布局容器",[1449,145099],{"style":126388,"src":145100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[10,145102,145103],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[10,145105,145106],{},"container-fluid用于移动式布局比较方便",[55,145108,145109],{"start":1166},[58,145110,145111,145112],{},"bootstrap ",[261,145113,145114],{},"栅格系统原理",[1449,145116],{"style":126388,"src":145117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[55,145119,145120],{"start":1181},[58,145121,145122],{},[261,145123,145124],{},"栅格选项参数",[1449,145126],{"style":126388,"src":145127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[10,145129,145130],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[10,145132,14621],{},[92,145134,145135],{"className":126532,"code":145046,"language":126534,"meta":20,"style":20},[98,145136,145137,145143,145153],{"__ignoreMap":20},[101,145138,145139,145141],{"class":103,"line":104},[101,145140,126823],{"class":1950},[101,145142,15560],{"class":111},[101,145144,145145,145147,145149,145151],{"class":103,"line":21},[101,145146,70894],{"class":160},[101,145148,51426],{"class":111},[101,145150,57410],{"class":160},[101,145152,1277],{"class":111},[101,145154,145155],{"class":103,"line":1166},[101,145156,1552],{"class":111},[10,145158,135575],{},[1449,145160],{"style":126388,"src":145161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[10,145163,145164],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[10,145166,145167],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[10,145169,145170],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[10,145172,145173],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[10,145175,145176],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[10,145178,145179],{},"汇总展示说明：",[92,145181,145182],{"className":127279,"code":130636,"language":127281,"meta":20,"style":20},[98,145183,145184,145188,145202,145206],{"__ignoreMap":20},[101,145185,145186],{"class":103,"line":104},[101,145187,130643],{"class":170},[101,145189,145190,145192,145194,145196,145198,145200],{"class":103,"line":21},[101,145191,1021],{"class":111},[101,145193,51600],{"class":51289},[101,145195,53475],{"class":1950},[101,145197,157],{"class":111},[101,145199,130656],{"class":216},[101,145201,51296],{"class":111},[101,145203,145204],{"class":103,"line":1166},[101,145205,130663],{"class":111},[101,145207,145208,145210,145212],{"class":103,"line":1181},[101,145209,51774],{"class":111},[101,145211,51600],{"class":51289},[101,145213,51296],{"class":111},[1449,145215],{"style":126388,"src":145216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[10,145218,145219],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[92,145221,145222],{"className":127279,"code":130636,"language":127281,"meta":20,"style":20},[98,145223,145224,145228,145242,145246],{"__ignoreMap":20},[101,145225,145226],{"class":103,"line":104},[101,145227,130643],{"class":170},[101,145229,145230,145232,145234,145236,145238,145240],{"class":103,"line":21},[101,145231,1021],{"class":111},[101,145233,51600],{"class":51289},[101,145235,53475],{"class":1950},[101,145237,157],{"class":111},[101,145239,130656],{"class":216},[101,145241,51296],{"class":111},[101,145243,145244],{"class":103,"line":1166},[101,145245,130663],{"class":111},[101,145247,145248,145250,145252],{"class":103,"line":1181},[101,145249,51774],{"class":111},[101,145251,51600],{"class":51289},[101,145253,51296],{"class":111},[55,145255,145256],{"start":1187},[58,145257,145258],{},[261,145259,145260],{},"列嵌套",[1449,145262],{"style":126388,"src":145263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[10,145265,145266],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[10,145268,145269],{},"没加row内部这样：",[1449,145271],{"style":126388,"src":145272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[10,145274,145275],{},"加上row之后内部为：",[1449,145277],{"style":126388,"src":145278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[55,145280,145281],{"start":1201},[58,145282,145283],{},[261,145284,145285],{},"列偏移",[1449,145287],{"style":126388,"src":145288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[10,145290,145291],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[10,145293,145294],{},"要加偏移量，即偏移份数",[10,145296,145297],{},"偏移的份数=12-两个盒子的份数",[55,145299,145300],{"start":1207},[58,145301,145302],{},[261,145303,145304],{},"列排序",[1449,145306],{"style":126388,"src":145307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[10,145309,145310],{},"pull拉左；push推右",[55,145312,145313],{"start":1298},[58,145314,145315],{},[261,145316,145317],{},"响应式工具",[1449,145319],{"style":126388,"src":145320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[10,145322,145323],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[72,145325,145327],{"id":145326},"_2143-响应式小项目","21.4.3 响应式小项目",[10,145329,145330],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[10,145332,145333],{},"ul {",[10,145335,145336],{},"list-style: none;",[10,145338,145339],{},"margin:0;",[10,145341,145342],{},"padding:0; }",[1449,145344],{"style":126388,"src":145345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1449,145347],{"style":126388,"src":145348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[10,145350,145351],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[10,145353,68878],{},[92,145355,145356],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},[98,145357,145358,145364,145374],{"__ignoreMap":20},[101,145359,145360,145362],{"class":103,"line":104},[101,145361,130380],{"class":1950},[101,145363,15560],{"class":111},[101,145365,145366,145368,145370,145372],{"class":103,"line":21},[101,145367,131012],{"class":160},[101,145369,51426],{"class":111},[101,145371,23725],{"class":160},[101,145373,1277],{"class":111},[101,145375,145376],{"class":103,"line":1166},[101,145377,1552],{"class":111},[10,145379,70442],{},[92,145381,145382],{"className":126532,"code":139202,"language":126534,"meta":20,"style":20},[98,145383,145384,145390,145400],{"__ignoreMap":20},[101,145385,145386,145388],{"class":103,"line":104},[101,145387,130380],{"class":1950},[101,145389,15560],{"class":111},[101,145391,145392,145394,145396,145398],{"class":103,"line":21},[101,145393,131012],{"class":160},[101,145395,51426],{"class":111},[101,145397,23725],{"class":160},[101,145399,1277],{"class":111},[101,145401,145402],{"class":103,"line":1166},[101,145403,1552],{"class":111},[43,145405,145407],{"id":145406},"_215-swiper-插件使用","21.5 swiper 插件使用",[1118,145409,145410,145413,145416],{},[58,145411,145412],{},"下载需要的css和js文件html页面中 引入相关文件",[58,145414,145415],{},"官网找到类似案例，复制html结构，css样式 js 语法",[58,145417,145418],{},"根据需求定制修改模块",[1449,145420],{"style":126388,"src":145421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[10,145423,145424],{},"解压后将这两部分放到项目中",[1449,145426],{"style":126388,"src":145427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[10,145429,145430],{},"这个插件可以帮助我们实现轮播图效果",[10,145432,145433],{},"用法：",[1449,145435],{"style":126388,"src":145436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[10,145438,145439],{},"找到自己喜欢的",[1449,145441],{"style":126388,"src":145442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[10,145444,145445],{},"右键，查看网页源代码",[1449,145447],{"style":126388,"src":145448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[10,145450,145451],{},"复制人家的结构内容",[10,145453,145454],{},"然后去看API文档：",[1449,145456],{"style":126388,"src":145457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[10,145459,145460],{},"可以看看如何修改样式",[10,145462,145463],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5114,145465,145466],{},"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":20,"searchDepth":21,"depth":21,"links":145468},[145469,145474,145478,145483,145488],{"id":144269,"depth":21,"text":144270,"children":145470},[145471,145472,145473],{"id":144273,"depth":1166,"text":144274},{"id":144283,"depth":1166,"text":144284},{"id":144378,"depth":1166,"text":144379},{"id":144393,"depth":21,"text":144394,"children":145475},[145476,145477],{"id":144415,"depth":1166,"text":144416},{"id":144431,"depth":1166,"text":144432},{"id":144506,"depth":21,"text":144507,"children":145479},[145480,145481,145482],{"id":144519,"depth":1166,"text":144520},{"id":144743,"depth":1166,"text":144744},{"id":144750,"depth":1166,"text":144751},{"id":144891,"depth":21,"text":144892,"children":145484},[145485,145486,145487],{"id":144918,"depth":1166,"text":144919},{"id":144981,"depth":1166,"text":144982},{"id":145326,"depth":1166,"text":145327},{"id":145406,"depth":21,"text":145407},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144261,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145495,"title":145496,"body":145497,"description":23365,"extension":24,"meta":145717,"navigation":27,"path":145718,"seo":145719,"stem":145720,"__hash__":145721},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145498,"toc":145713},[145499,145502,145506,145509,145524,145529,145532,145537,145572,145577,145589,145594,145607,145612,145629,145634,145654,145659,145677,145680,145683,145686,145689,145693,145696,145699,145702,145705,145708,145711],[39,145500,145496],{"id":145501},"_22-代码提交与新型相对单位",[43,145503,145505],{"id":145504},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[10,145507,145508],{},"法1：",[55,145510,145511,145518,145521],{},[58,145512,145513,145514],{},"登录网站注册：",[14,145515,145516],{"href":145516,"rel":145517},"https:\u002F\u002Fgitee.com\u002F",[18],[58,145519,145520],{},"码云创建新的仓库",[58,145522,145523],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1118,145525,145526],{},[58,145527,145528],{},"在网站根目录右键-- Git Bash Here",[1449,145530],{"style":126388,"src":145531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1118,145533,145534],{},[58,145535,145536],{},"如果是第一次利用git提交，请配置好全局选项",[92,145538,145540],{"className":117276,"code":145539,"language":117278,"meta":20,"style":20},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[98,145541,145542,145558],{"__ignoreMap":20},[101,145543,145544,145547,145549,145552,145555],{"class":103,"line":104},[101,145545,145546],{"class":1950},"git",[101,145548,119699],{"class":216},[101,145550,145551],{"class":160}," --global",[101,145553,145554],{"class":216}," user.name",[101,145556,145557],{"class":216}," \"你的名字\"\n",[101,145559,145560,145562,145564,145566,145569],{"class":103,"line":21},[101,145561,145546],{"class":1950},[101,145563,119699],{"class":216},[101,145565,145551],{"class":160},[101,145567,145568],{"class":216}," user.email",[101,145570,145571],{"class":216}," \"你的邮箱\"\n",[1118,145573,145574],{},[58,145575,145576],{},"初始化仓库",[92,145578,145580],{"className":117276,"code":145579,"language":117278,"meta":20,"style":20},"git init\n",[98,145581,145582],{"__ignoreMap":20},[101,145583,145584,145586],{"class":103,"line":104},[101,145585,145546],{"class":1950},[101,145587,145588],{"class":216}," init\n",[1118,145590,145591],{},[58,145592,145593],{},"把本地文件放到暂存区",[92,145595,145597],{"className":117276,"code":145596,"language":117278,"meta":20,"style":20},"git add .\n",[98,145598,145599],{"__ignoreMap":20},[101,145600,145601,145603,145605],{"class":103,"line":104},[101,145602,145546],{"class":1950},[101,145604,5197],{"class":216},[101,145606,28730],{"class":216},[1118,145608,145609],{},[58,145610,145611],{},"把本地文件放到本地仓库里面",[92,145613,145615],{"className":117276,"code":145614,"language":117278,"meta":20,"style":20},"git commit -m \"first commit\"\n",[98,145616,145617],{"__ignoreMap":20},[101,145618,145619,145621,145624,145626],{"class":103,"line":104},[101,145620,145546],{"class":1950},[101,145622,145623],{"class":216}," commit",[101,145625,100862],{"class":160},[101,145627,145628],{"class":216}," \"first commit\"\n",[1118,145630,145631],{},[58,145632,145633],{},"链接远程仓库",[92,145635,145637],{"className":117276,"code":145636,"language":117278,"meta":20,"style":20},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[98,145638,145639],{"__ignoreMap":20},[101,145640,145641,145643,145646,145648,145651],{"class":103,"line":104},[101,145642,145546],{"class":1950},[101,145644,145645],{"class":216}," remote",[101,145647,5197],{"class":216},[101,145649,145650],{"class":216}," origin",[101,145652,145653],{"class":216}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1118,145655,145656],{},[58,145657,145658],{},"把本地仓库的文件推送到远程仓库 push",[92,145660,145662],{"className":117276,"code":145661,"language":117278,"meta":20,"style":20},"git push -u origin master\n",[98,145663,145664],{"__ignoreMap":20},[101,145665,145666,145668,145670,145672,145674],{"class":103,"line":104},[101,145667,145546],{"class":1950},[101,145669,29005],{"class":216},[101,145671,28279],{"class":160},[101,145673,145650],{"class":216},[101,145675,145676],{"class":216}," master\n",[1449,145678],{"style":126388,"src":145679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[10,145681,145682],{},"上方方法暂未实现，后边学完git后在整",[10,145684,145685],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1449,145687],{"style":126388,"src":145688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[43,145690,145692],{"id":145691},"_222-新型相对单位","22.2 新型相对单位",[1449,145694],{"style":126388,"src":145695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1449,145697],{"style":126388,"src":145698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[10,145700,145701],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[10,145703,145704],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1449,145706],{"style":126388,"src":145707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[10,145709,145710],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5114,145712,23946],{},{"title":20,"searchDepth":21,"depth":21,"links":145714},[145715,145716],{"id":145504,"depth":21,"text":145505},{"id":145691,"depth":21,"text":145692},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145496,"description":23365},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145723,"title":145724,"body":145725,"description":145729,"extension":24,"meta":145730,"navigation":27,"path":145731,"seo":145732,"stem":145733,"__hash__":145734},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145726,"toc":145727},[],{"title":20,"searchDepth":21,"depth":21,"links":145728},[],"自己正经开始学编程的第一门语言！",{"category":26},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145724,"description":145729},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145736,"title":145737,"body":145738,"description":23365,"extension":24,"meta":146885,"navigation":27,"path":146886,"seo":146887,"stem":146888,"__hash__":146889},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145739,"toc":146861},[145740,145743,145747,145750,145753,145778,145781,145787,145791,145794,145821,145824,145864,145867,145879,145882,145888,145892,145896,145923,145940,145947,145951,145954,145980,145983,145987,145990,146030,146033,146050,146056,146060,146065,146109,146112,146130,146133,146201,146205,146212,146215,146230,146233,146242,146245,146256,146259,146268,146271,146288,146291,146306,146310,146314,146317,146319,146339,146343,146346,146349,146360,146363,146369,146373,146379,146406,146409,146421,146424,146435,146438,146444,146448,146454,146504,146507,146549,146552,146585,146588,146622,146626,146629,146649,146652,146688,146691,146704,146708,146712,146718,146721,146734,146738,146741,146747,146750,146754,146757,146760,146809,146813,146829,146835,146842,146848,146858],[39,145741,145737],{"id":145742},"_1-python环境与第一个程序",[43,145744,145746],{"id":145745},"_11-什么是python","1.1 什么是Python",[10,145748,145749],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[10,145751,145752],{},"理解 Python 时抓住三个关键词：",[55,145754,145755,145758,145761],{},[58,145756,145757],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[58,145759,145760],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[58,145762,145763,145764,324,145767,324,145770,324,145773,324,145775,28374],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[98,145765,145766],{},"os",[98,145768,145769],{},"sys",[98,145771,145772],{},"json",[98,145774,57849],{},[98,145776,145777],{},"datetime",[10,145779,145780],{},"Python 程序的运行链路：",[92,145782,145785],{"className":145783,"code":145784,"language":5175,"meta":20},[5173],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[98,145786,145784],{"__ignoreMap":20},[43,145788,145790],{"id":145789},"_12-python解释器","1.2 Python解释器",[10,145792,145793],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[92,145795,145797],{"className":23811,"code":145796,"language":23813,"meta":20,"style":20},"python --version\npython3 --version\npython\npython3\n",[98,145798,145799,145805,145811,145816],{"__ignoreMap":20},[101,145800,145801,145803],{"class":103,"line":104},[101,145802,30369],{"class":1950},[101,145804,26282],{"class":160},[101,145806,145807,145809],{"class":103,"line":21},[101,145808,100859],{"class":1950},[101,145810,26282],{"class":160},[101,145812,145813],{"class":103,"line":1166},[101,145814,145815],{"class":1950},"python\n",[101,145817,145818],{"class":103,"line":1181},[101,145819,145820],{"class":1950},"python3\n",[10,145822,145823],{},"进入交互模式后，可以直接输入表达式：",[92,145825,145827],{"className":30367,"code":145826,"language":30369,"meta":20,"style":20},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[98,145828,145829,145840,145845,145859],{"__ignoreMap":20},[101,145830,145831,145834,145836,145838],{"class":103,"line":104},[101,145832,145833],{"class":107},">>>",[101,145835,25107],{"class":160},[101,145837,45555],{"class":107},[101,145839,47712],{"class":160},[101,145841,145842],{"class":103,"line":21},[101,145843,145844],{"class":160},"3\n",[101,145846,145847,145849,145852,145854,145857],{"class":103,"line":1166},[101,145848,145833],{"class":107},[101,145850,145851],{"class":160}," print",[101,145853,112],{"class":111},[101,145855,145856],{"class":216},"\"hello python\"",[101,145858,118],{"class":111},[101,145860,145861],{"class":103,"line":1181},[101,145862,145863],{"class":111},"hello python\n",[10,145865,145866],{},"退出交互模式：",[92,145868,145870],{"className":30367,"code":145869,"language":30369,"meta":20,"style":20},"exit()\n",[98,145871,145872],{"__ignoreMap":20},[101,145873,145874,145877],{"class":103,"line":104},[101,145875,145876],{"class":160},"exit",[101,145878,1963],{"class":111},[10,145880,145881],{},"或使用快捷键：",[92,145883,145886],{"className":145884,"code":145885,"language":5175,"meta":20},[5173],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[98,145887,145885],{"__ignoreMap":20},[43,145889,145891],{"id":145890},"_13-安装python","1.3 安装Python",[72,145893,145895],{"id":145894},"_131-windows安装","1.3.1 Windows安装",[55,145897,145898,145905,145908,145914,145920],{},[58,145899,145900,145901],{},"打开 Python 官网：",[14,145902,145903],{"href":145903,"rel":145904},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[18],[58,145906,145907],{},"下载 Windows Installer。",[58,145909,145910,145911,28374],{},"安装时勾选 ",[98,145912,145913],{},"Add Python to PATH",[58,145915,145916,145917,28374],{},"点击 ",[98,145918,145919],{},"Install Now",[58,145921,145922],{},"安装完成后打开命令提示符验证：",[92,145924,145926],{"className":23811,"code":145925,"language":23813,"meta":20,"style":20},"python --version\npip --version\n",[98,145927,145928,145934],{"__ignoreMap":20},[101,145929,145930,145932],{"class":103,"line":104},[101,145931,30369],{"class":1950},[101,145933,26282],{"class":160},[101,145935,145936,145938],{"class":103,"line":21},[101,145937,23820],{"class":1950},[101,145939,26282],{"class":160},[10,145941,145942,145943,145946],{},"如果提示 ",[98,145944,145945],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[72,145948,145950],{"id":145949},"_132-macos安装","1.3.2 macOS安装",[10,145952,145953],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[92,145955,145957],{"className":23811,"code":145956,"language":23813,"meta":20,"style":20},"brew install python\npython3 --version\npip3 --version\n",[98,145958,145959,145968,145974],{"__ignoreMap":20},[101,145960,145961,145964,145966],{"class":103,"line":104},[101,145962,145963],{"class":1950},"brew",[101,145965,23823],{"class":216},[101,145967,124298],{"class":216},[101,145969,145970,145972],{"class":103,"line":21},[101,145971,100859],{"class":1950},[101,145973,26282],{"class":160},[101,145975,145976,145978],{"class":103,"line":1166},[101,145977,119680],{"class":1950},[101,145979,26282],{"class":160},[10,145981,145982],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[72,145984,145986],{"id":145985},"_133-linux安装","1.3.3 Linux安装",[10,145988,145989],{},"Ubuntu\u002FDebian：",[92,145991,145993],{"className":23811,"code":145992,"language":23813,"meta":20,"style":20},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[98,145994,145995,146003,146018,146024],{"__ignoreMap":20},[101,145996,145997,145999,146001],{"class":103,"line":104},[101,145998,24565],{"class":1950},[101,146000,117297],{"class":216},[101,146002,26231],{"class":216},[101,146004,146005,146007,146009,146011,146013,146015],{"class":103,"line":21},[101,146006,24565],{"class":1950},[101,146008,117297],{"class":216},[101,146010,23823],{"class":216},[101,146012,104383],{"class":216},[101,146014,100778],{"class":216},[101,146016,146017],{"class":216}," python3-venv\n",[101,146019,146020,146022],{"class":103,"line":1166},[101,146021,100859],{"class":1950},[101,146023,26282],{"class":160},[101,146025,146026,146028],{"class":103,"line":1181},[101,146027,119680],{"class":1950},[101,146029,26282],{"class":160},[10,146031,146032],{},"Fedora：",[92,146034,146036],{"className":23811,"code":146035,"language":23813,"meta":20,"style":20},"sudo dnf install python3 python3-pip\n",[98,146037,146038],{"__ignoreMap":20},[101,146039,146040,146042,146044,146046,146048],{"class":103,"line":104},[101,146041,24565],{"class":1950},[101,146043,26304],{"class":216},[101,146045,23823],{"class":216},[101,146047,104383],{"class":216},[101,146049,119745],{"class":216},[10,146051,146052,146053,146055],{},"Linux 上通常使用 ",[98,146054,100859],{}," 命令，避免和系统旧版本 Python 冲突。",[43,146057,146059],{"id":146058},"_14-pip包管理器","1.4 pip包管理器",[10,146061,146062,146064],{},[98,146063,23820],{}," 用来安装第三方库。",[92,146066,146068],{"className":23811,"code":146067,"language":23813,"meta":20,"style":20},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[98,146069,146070,146079,146088,146096,146102],{"__ignoreMap":20},[101,146071,146072,146074,146076],{"class":103,"line":104},[101,146073,23820],{"class":1950},[101,146075,23823],{"class":216},[101,146077,146078],{"class":216}," requests\n",[101,146080,146081,146083,146086],{"class":103,"line":21},[101,146082,23820],{"class":1950},[101,146084,146085],{"class":216}," uninstall",[101,146087,146078],{"class":216},[101,146089,146090,146092,146094],{"class":103,"line":1166},[101,146091,23820],{"class":1950},[101,146093,117554],{"class":216},[101,146095,146078],{"class":216},[101,146097,146098,146100],{"class":103,"line":1181},[101,146099,23820],{"class":1950},[101,146101,118935],{"class":216},[101,146103,146104,146106],{"class":103,"line":1187},[101,146105,23820],{"class":1950},[101,146107,146108],{"class":216}," freeze\n",[10,146110,146111],{},"国内网络较慢时可以临时使用镜像：",[92,146113,146115],{"className":23811,"code":146114,"language":23813,"meta":20,"style":20},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[98,146116,146117],{"__ignoreMap":20},[101,146118,146119,146121,146123,146126,146128],{"class":103,"line":104},[101,146120,23820],{"class":1950},[101,146122,23823],{"class":216},[101,146124,146125],{"class":216}," requests",[101,146127,26419],{"class":160},[101,146129,119708],{"class":216},[10,146131,146132],{},"常见第三方库：",[249,146134,146135,146144],{},[252,146136,146137],{},[255,146138,146139,146142],{},[258,146140,146141],{},"库",[258,146143,102676],{},[296,146145,146146,146154,146161,146169,146177,146185,146193],{},[255,146147,146148,146151],{},[301,146149,146150],{},"requests",[301,146152,146153],{},"网络请求",[255,146155,146156,146158],{},[301,146157,100606],{},[301,146159,146160],{},"数值计算",[255,146162,146163,146166],{},[301,146164,146165],{},"pandas",[301,146167,146168],{},"表格数据处理",[255,146170,146171,146174],{},[301,146172,146173],{},"matplotlib",[301,146175,146176],{},"绘图",[255,146178,146179,146182],{},[301,146180,146181],{},"pyecharts",[301,146183,146184],{},"ECharts 图表",[255,146186,146187,146190],{},[301,146188,146189],{},"flask",[301,146191,146192],{},"Web 后端",[255,146194,146195,146198],{},[301,146196,146197],{},"pytest",[301,146199,146200],{},"自动化测试",[43,146202,146204],{"id":146203},"_15-虚拟环境","1.5 虚拟环境",[10,146206,146207,146208,146211],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[98,146209,146210],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[10,146213,146214],{},"创建虚拟环境：",[92,146216,146218],{"className":23811,"code":146217,"language":23813,"meta":20,"style":20},"python -m venv .venv\n",[98,146219,146220],{"__ignoreMap":20},[101,146221,146222,146224,146226,146228],{"class":103,"line":104},[101,146223,30369],{"class":1950},[101,146225,100862],{"class":160},[101,146227,100865],{"class":216},[101,146229,100868],{"class":216},[10,146231,146232],{},"Windows 激活：",[92,146234,146236],{"className":23811,"code":146235,"language":23813,"meta":20,"style":20},".venv\\Scripts\\activate\n",[98,146237,146238],{"__ignoreMap":20},[101,146239,146240],{"class":103,"line":104},[101,146241,146235],{"class":1950},[10,146243,146244],{},"macOS\u002FLinux 激活：",[92,146246,146248],{"className":23811,"code":146247,"language":23813,"meta":20,"style":20},"source .venv\u002Fbin\u002Factivate\n",[98,146249,146250],{"__ignoreMap":20},[101,146251,146252,146254],{"class":103,"line":104},[101,146253,100873],{"class":160},[101,146255,100876],{"class":216},[10,146257,146258],{},"退出虚拟环境：",[92,146260,146262],{"className":23811,"code":146261,"language":23813,"meta":20,"style":20},"deactivate\n",[98,146263,146264],{"__ignoreMap":20},[101,146265,146266],{"class":103,"line":104},[101,146267,146261],{"class":1950},[10,146269,146270],{},"保存依赖：",[92,146272,146274],{"className":23811,"code":146273,"language":23813,"meta":20,"style":20},"pip freeze > requirements.txt\n",[98,146275,146276],{"__ignoreMap":20},[101,146277,146278,146280,146283,146285],{"class":103,"line":104},[101,146279,23820],{"class":1950},[101,146281,146282],{"class":216}," freeze",[101,146284,26211],{"class":107},[101,146286,146287],{"class":216}," requirements.txt\n",[10,146289,146290],{},"安装依赖：",[92,146292,146294],{"className":23811,"code":146293,"language":23813,"meta":20,"style":20},"pip install -r requirements.txt\n",[98,146295,146296],{"__ignoreMap":20},[101,146297,146298,146300,146302,146304],{"class":103,"line":104},[101,146299,23820],{"class":1950},[101,146301,23823],{"class":216},[101,146303,119619],{"class":160},[101,146305,146287],{"class":216},[43,146307,146309],{"id":146308},"_16-开发工具","1.6 开发工具",[72,146311,146313],{"id":146312},"_161-pycharm","1.6.1 PyCharm",[10,146315,146316],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[10,146318,122042],{},[55,146320,146321,146324,146327,146333,146336],{},[58,146322,146323],{},"New Project：创建项目。",[58,146325,146326],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[58,146328,146329,146330,125963],{},"New Python File：创建 ",[98,146331,146332],{},".py",[58,146334,146335],{},"Run：运行当前文件。",[58,146337,146338],{},"Debug：断点调试。",[72,146340,146342],{"id":146341},"_162-vs-code","1.6.2 VS Code",[10,146344,146345],{},"VS Code 轻量，适合后续多语言开发。",[10,146347,146348],{},"建议安装插件：",[55,146350,146351,146354,146357],{},[58,146352,146353],{},"Python。",[58,146355,146356],{},"Pylance。",[58,146358,146359],{},"Jupyter。",[10,146361,146362],{},"选择解释器：",[92,146364,146367],{"className":146365,"code":146366,"language":5175,"meta":20},[5173],"Ctrl + Shift + P -> Python: Select Interpreter\n",[98,146368,146366],{"__ignoreMap":20},[43,146370,146372],{"id":146371},"_17-第一个python程序","1.7 第一个Python程序",[10,146374,146375,146376,24607],{},"创建文件 ",[98,146377,146378],{},"hello.py",[92,146380,146382],{"className":30367,"code":146381,"language":30369,"meta":20,"style":20},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[98,146383,146384,146395],{"__ignoreMap":20},[101,146385,146386,146388,146390,146393],{"class":103,"line":104},[101,146387,30404],{"class":160},[101,146389,112],{"class":111},[101,146391,146392],{"class":216},"\"Hello World\"",[101,146394,118],{"class":111},[101,146396,146397,146399,146401,146404],{"class":103,"line":21},[101,146398,30404],{"class":160},[101,146400,112],{"class":111},[101,146402,146403],{"class":216},"\"你好，Python\"",[101,146405,118],{"class":111},[10,146407,146408],{},"在终端运行：",[92,146410,146412],{"className":23811,"code":146411,"language":23813,"meta":20,"style":20},"python hello.py\n",[98,146413,146414],{"__ignoreMap":20},[101,146415,146416,146418],{"class":103,"line":104},[101,146417,30369],{"class":1950},[101,146419,146420],{"class":216}," hello.py\n",[10,146422,146423],{},"或：",[92,146425,146427],{"className":23811,"code":146426,"language":23813,"meta":20,"style":20},"python3 hello.py\n",[98,146428,146429],{"__ignoreMap":20},[101,146430,146431,146433],{"class":103,"line":104},[101,146432,100859],{"class":1950},[101,146434,146420],{"class":216},[10,146436,146437],{},"输出：",[92,146439,146442],{"className":146440,"code":146441,"language":5175,"meta":20},[5173],"Hello World\n你好，Python\n",[98,146443,146441],{"__ignoreMap":20},[43,146445,146447],{"id":146446},"_18-print函数","1.8 print函数",[10,146449,146450,146453],{},[98,146451,146452],{},"print()"," 用来输出内容。",[92,146455,146457],{"className":30367,"code":146456,"language":30369,"meta":20,"style":20},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[98,146458,146459,146469,146479,146489],{"__ignoreMap":20},[101,146460,146461,146463,146465,146467],{"class":103,"line":104},[101,146462,30404],{"class":160},[101,146464,112],{"class":111},[101,146466,5832],{"class":216},[101,146468,118],{"class":111},[101,146470,146471,146473,146475,146477],{"class":103,"line":21},[101,146472,30404],{"class":160},[101,146474,112],{"class":111},[101,146476,422],{"class":160},[101,146478,118],{"class":111},[101,146480,146481,146483,146485,146487],{"class":103,"line":1166},[101,146482,30404],{"class":160},[101,146484,112],{"class":111},[101,146486,161],{"class":160},[101,146488,118],{"class":111},[101,146490,146491,146493,146495,146498,146500,146502],{"class":103,"line":1181},[101,146492,30404],{"class":160},[101,146494,112],{"class":111},[101,146496,146497],{"class":216},"\"年龄:\"",[101,146499,12423],{"class":111},[101,146501,761],{"class":160},[101,146503,118],{"class":111},[10,146505,146506],{},"多个内容用逗号隔开，默认中间加空格：",[92,146508,146510],{"className":30367,"code":146509,"language":30369,"meta":20,"style":20},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[98,146511,146512,146522,146532],{"__ignoreMap":20},[101,146513,146514,146517,146519],{"class":103,"line":104},[101,146515,146516],{"class":111},"name ",[101,146518,157],{"class":107},[101,146520,146521],{"class":216}," \"张三\"\n",[101,146523,146524,146527,146529],{"class":103,"line":21},[101,146525,146526],{"class":111},"age ",[101,146528,157],{"class":107},[101,146530,146531],{"class":160}," 18\n",[101,146533,146534,146536,146538,146541,146544,146546],{"class":103,"line":1166},[101,146535,30404],{"class":160},[101,146537,112],{"class":111},[101,146539,146540],{"class":216},"\"姓名:\"",[101,146542,146543],{"class":111},", name, ",[101,146545,146497],{"class":216},[101,146547,146548],{"class":111},", age)\n",[10,146550,146551],{},"修改分隔符：",[92,146553,146555],{"className":30367,"code":146554,"language":30369,"meta":20,"style":20},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[98,146556,146557],{"__ignoreMap":20},[101,146558,146559,146561,146563,146566,146568,146570,146572,146574,146576,146579,146581,146583],{"class":103,"line":104},[101,146560,30404],{"class":160},[101,146562,112],{"class":111},[101,146564,146565],{"class":216},"\"2024\"",[101,146567,12423],{"class":111},[101,146569,54305],{"class":216},[101,146571,12423],{"class":111},[101,146573,54305],{"class":216},[101,146575,12423],{"class":111},[101,146577,146578],{"class":5204},"sep",[101,146580,157],{"class":107},[101,146582,32472],{"class":216},[101,146584,118],{"class":111},[10,146586,146587],{},"修改结尾符：",[92,146589,146591],{"className":30367,"code":146590,"language":30369,"meta":20,"style":20},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[98,146592,146593,146611],{"__ignoreMap":20},[101,146594,146595,146597,146599,146601,146603,146605,146607,146609],{"class":103,"line":104},[101,146596,30404],{"class":160},[101,146598,112],{"class":111},[101,146600,5832],{"class":216},[101,146602,12423],{"class":111},[101,146604,45790],{"class":5204},[101,146606,157],{"class":107},[101,146608,4346],{"class":216},[101,146610,118],{"class":111},[101,146612,146613,146615,146617,146620],{"class":103,"line":21},[101,146614,30404],{"class":160},[101,146616,112],{"class":111},[101,146618,146619],{"class":216},"\"python\"",[101,146621,118],{"class":111},[43,146623,146625],{"id":146624},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[10,146627,146628],{},"交互运行适合临时验证：",[92,146630,146632],{"className":30367,"code":146631,"language":30369,"meta":20,"style":20},">>> 10 * 3\n30\n",[98,146633,146634,146644],{"__ignoreMap":20},[101,146635,146636,146638,146640,146642],{"class":103,"line":104},[101,146637,145833],{"class":107},[101,146639,2025],{"class":160},[101,146641,6506],{"class":107},[101,146643,120016],{"class":160},[101,146645,146646],{"class":103,"line":21},[101,146647,146648],{"class":160},"30\n",[10,146650,146651],{},"脚本运行适合保存程序：",[92,146653,146655],{"className":30367,"code":146654,"language":30369,"meta":20,"style":20},"price = 8\ncount = 5\nprint(price * count)\n",[98,146656,146657,146667,146676],{"__ignoreMap":20},[101,146658,146659,146662,146664],{"class":103,"line":104},[101,146660,146661],{"class":111},"price ",[101,146663,157],{"class":107},[101,146665,146666],{"class":160}," 8\n",[101,146668,146669,146672,146674],{"class":103,"line":21},[101,146670,146671],{"class":111},"count ",[101,146673,157],{"class":107},[101,146675,54416],{"class":160},[101,146677,146678,146680,146683,146685],{"class":103,"line":1166},[101,146679,30404],{"class":160},[101,146681,146682],{"class":111},"(price ",[101,146684,566],{"class":107},[101,146686,146687],{"class":111}," count)\n",[10,146689,146690],{},"实际学习中推荐：",[55,146692,146693,146696,146701],{},[58,146694,146695],{},"临时试一个语法，用交互模式。",[58,146697,146698,146699,125963],{},"写完整练习，用 ",[98,146700,146332],{},[58,146702,146703],{},"写项目，用独立目录和虚拟环境。",[43,146705,146707],{"id":146706},"_110-常见错误","1.10 常见错误",[72,146709,146711],{"id":146710},"_1101-命令找不到","1.10.1 命令找不到",[92,146713,146716],{"className":146714,"code":146715,"language":5175,"meta":20},[5173],"python: command not found\n",[98,146717,146715],{"__ignoreMap":20},[10,146719,146720],{},"原因：",[55,146722,146723,146726,146729],{},[58,146724,146725],{},"没安装 Python。",[58,146727,146728],{},"PATH 没配置。",[58,146730,146731,146732,28374],{},"Linux\u002FmacOS 应该使用 ",[98,146733,100859],{},[72,146735,146737],{"id":146736},"_1102-文件名冲突","1.10.2 文件名冲突",[10,146739,146740],{},"不要把文件命名为：",[92,146742,146745],{"className":146743,"code":146744,"language":5175,"meta":20},[5173],"random.py\njson.py\ntime.py\nrequests.py\n",[98,146746,146744],{"__ignoreMap":20},[10,146748,146749],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[72,146751,146753],{"id":146752},"_1103-中文乱码","1.10.3 中文乱码",[10,146755,146756],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[10,146758,146759],{},"如果读写文件出现乱码，要明确指定编码：",[92,146761,146763],{"className":30367,"code":146762,"language":30369,"meta":20,"style":20},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[98,146764,146765,146799],{"__ignoreMap":20},[101,146766,146767,146769,146772,146774,146777,146779,146782,146784,146787,146789,146792,146794,146796],{"class":103,"line":104},[101,146768,107813],{"class":107},[101,146770,146771],{"class":160}," open",[101,146773,112],{"class":111},[101,146775,146776],{"class":216},"\"data.txt\"",[101,146778,12423],{"class":111},[101,146780,146781],{"class":216},"\"r\"",[101,146783,12423],{"class":111},[101,146785,146786],{"class":5204},"encoding",[101,146788,157],{"class":107},[101,146790,146791],{"class":216},"\"utf-8\"",[101,146793,13702],{"class":111},[101,146795,31372],{"class":107},[101,146797,146798],{"class":111}," f:\n",[101,146800,146801,146804,146806],{"class":103,"line":21},[101,146802,146803],{"class":111},"    content ",[101,146805,157],{"class":107},[101,146807,146808],{"class":111}," f.read()\n",[43,146810,146812],{"id":146811},"_111-本章练习","1.11 本章练习",[55,146814,146815,146818,146824],{},[58,146816,146817],{},"安装 Python，并在终端输出版本号。",[58,146819,146820,146821,146823],{},"新建 ",[98,146822,146378],{},"，输出自己的姓名、年龄、学习目标。",[58,146825,104346,146826,146828],{},[98,146827,146452],{}," 输出下面格式：",[92,146830,146833],{"className":146831,"code":146832,"language":5175,"meta":20},[5173],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[98,146834,146832],{"__ignoreMap":20},[55,146836,146837],{"start":1181},[58,146838,104346,146839,146841],{},[98,146840,146578],{}," 输出日期：",[92,146843,146846],{"className":146844,"code":146845,"language":5175,"meta":20},[5173],"2024-10-10\n",[98,146847,146845],{"__ignoreMap":20},[55,146849,146850],{"start":1187},[58,146851,104346,146852,146854,146855,146857],{},[98,146853,45790],{}," 让两次 ",[98,146856,146452],{}," 输出在同一行。",[5114,146859,146860],{},"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":20,"searchDepth":21,"depth":21,"links":146862},[146863,146864,146865,146870,146871,146872,146876,146877,146878,146879,146884],{"id":145745,"depth":21,"text":145746},{"id":145789,"depth":21,"text":145790},{"id":145890,"depth":21,"text":145891,"children":146866},[146867,146868,146869],{"id":145894,"depth":1166,"text":145895},{"id":145949,"depth":1166,"text":145950},{"id":145985,"depth":1166,"text":145986},{"id":146058,"depth":21,"text":146059},{"id":146203,"depth":21,"text":146204},{"id":146308,"depth":21,"text":146309,"children":146873},[146874,146875],{"id":146312,"depth":1166,"text":146313},{"id":146341,"depth":1166,"text":146342},{"id":146371,"depth":21,"text":146372},{"id":146446,"depth":21,"text":146447},{"id":146624,"depth":21,"text":146625},{"id":146706,"depth":21,"text":146707,"children":146880},[146881,146882,146883],{"id":146710,"depth":1166,"text":146711},{"id":146736,"depth":1166,"text":146737},{"id":146752,"depth":1166,"text":146753},{"id":146811,"depth":21,"text":146812},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145737,"description":23365},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146891,"title":146892,"body":146893,"description":23365,"extension":24,"meta":149297,"navigation":27,"path":149298,"seo":149299,"stem":149300,"__hash__":149301},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146894,"toc":149282},[146895,146898,146902,146905,146908,146925,146928,146970,146973,146977,146980,146983,147020,147023,147057,147060,147152,147156,147170,147173,147200,147203,147207,147310,147317,147320,147337,147341,147348,147537,147540,147613,147617,147620,147704,147707,147739,147743,147947,147950,147954,147960,148062,148065,148321,148325,148328,148331,148345,148347,148533,148537,148899,148905,148909,148912,149036,149039,149218,149221,149225,149258,149262,149279],[39,146896,146892],{"id":146897},"_10-json与pyecharts折线图",[43,146899,146901],{"id":146900},"_101-数据可视化","10.1 数据可视化",[10,146903,146904],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[10,146906,146907],{},"常见图表：",[55,146909,146910,146913,146916,146919,146922],{},[58,146911,146912],{},"折线图：看趋势。",[58,146914,146915],{},"柱状图：看分类对比。",[58,146917,146918],{},"饼图：看占比。",[58,146920,146921],{},"地图：看地域分布。",[58,146923,146924],{},"散点图：看两个变量之间的关系。",[10,146926,146927],{},"Python 可视化常用库：",[249,146929,146930,146938],{},[252,146931,146932],{},[255,146933,146934,146936],{},[258,146935,146141],{},[258,146937,23729],{},[296,146939,146940,146947,146955,146962],{},[255,146941,146942,146944],{},[301,146943,146173],{},[301,146945,146946],{},"基础、经典、可定制",[255,146948,146949,146952],{},[301,146950,146951],{},"seaborn",[301,146953,146954],{},"统计图表更美观",[255,146956,146957,146959],{},[301,146958,146181],{},[301,146960,146961],{},"生成交互式网页图表",[255,146963,146964,146967],{},[301,146965,146966],{},"plotly",[301,146968,146969],{},"交互图表能力强",[10,146971,146972],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[43,146974,146976],{"id":146975},"_102-json回顾","10.2 JSON回顾",[10,146978,146979],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[10,146981,146982],{},"Python 字典：",[92,146984,146986],{"className":30367,"code":146985,"language":30369,"meta":20,"style":20},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[98,146987,146988,146996,147007,147016],{"__ignoreMap":20},[101,146989,146990,146992,146994],{"class":103,"line":104},[101,146991,101638],{"class":111},[101,146993,157],{"class":107},[101,146995,15560],{"class":111},[101,146997,146998,147001,147003,147005],{"class":103,"line":21},[101,146999,147000],{"class":216},"    \"name\"",[101,147002,51426],{"class":111},[101,147004,69258],{"class":216},[101,147006,31455],{"class":111},[101,147008,147009,147012,147014],{"class":103,"line":1166},[101,147010,147011],{"class":216},"    \"value\"",[101,147013,51426],{"class":111},[101,147015,97438],{"class":160},[101,147017,147018],{"class":103,"line":1181},[101,147019,1552],{"class":111},[10,147021,147022],{},"JSON 字符串：",[92,147024,147027],{"className":147025,"code":147026,"language":145772,"meta":20,"style":20},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[98,147028,147029,147033,147044,147053],{"__ignoreMap":20},[101,147030,147031],{"class":103,"line":104},[101,147032,1533],{"class":111},[101,147034,147035,147038,147040,147042],{"class":103,"line":21},[101,147036,147037],{"class":160},"  \"name\"",[101,147039,51426],{"class":111},[101,147041,69258],{"class":216},[101,147043,31455],{"class":111},[101,147045,147046,147049,147051],{"class":103,"line":1166},[101,147047,147048],{"class":160},"  \"value\"",[101,147050,51426],{"class":111},[101,147052,97438],{"class":160},[101,147054,147055],{"class":103,"line":1181},[101,147056,1552],{"class":111},[10,147058,147059],{},"Python 与 JSON 的转换：",[92,147061,147063],{"className":30367,"code":147062,"language":30369,"meta":20,"style":20},"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",[98,147064,147065,147072,147076,147101,147105,147124,147131,147135,147145],{"__ignoreMap":20},[101,147066,147067,147069],{"class":103,"line":104},[101,147068,30381],{"class":107},[101,147070,147071],{"class":111}," json\n",[101,147073,147074],{"class":103,"line":21},[101,147075,2387],{"emptyLinePlaceholder":27},[101,147077,147078,147080,147082,147084,147086,147088,147090,147092,147095,147097,147099],{"class":103,"line":1166},[101,147079,101638],{"class":111},[101,147081,157],{"class":107},[101,147083,4435],{"class":111},[101,147085,62668],{"class":216},[101,147087,51426],{"class":111},[101,147089,69258],{"class":216},[101,147091,12423],{"class":111},[101,147093,147094],{"class":216},"\"value\"",[101,147096,51426],{"class":111},[101,147098,422],{"class":160},[101,147100,1552],{"class":111},[101,147102,147103],{"class":103,"line":1181},[101,147104,2387],{"emptyLinePlaceholder":27},[101,147106,147107,147110,147112,147115,147118,147120,147122],{"class":103,"line":1187},[101,147108,147109],{"class":111},"json_text ",[101,147111,157],{"class":107},[101,147113,147114],{"class":111}," json.dumps(data, ",[101,147116,147117],{"class":5204},"ensure_ascii",[101,147119,157],{"class":107},[101,147121,33976],{"class":160},[101,147123,118],{"class":111},[101,147125,147126,147128],{"class":103,"line":1201},[101,147127,30404],{"class":160},[101,147129,147130],{"class":111},"(json_text)\n",[101,147132,147133],{"class":103,"line":1207},[101,147134,2387],{"emptyLinePlaceholder":27},[101,147136,147137,147140,147142],{"class":103,"line":1298},[101,147138,147139],{"class":111},"new_data ",[101,147141,157],{"class":107},[101,147143,147144],{"class":111}," json.loads(json_text)\n",[101,147146,147147,147149],{"class":103,"line":1304},[101,147148,30404],{"class":160},[101,147150,147151],{"class":111},"(new_data)\n",[43,147153,147155],{"id":147154},"_103-安装pyecharts","10.3 安装pyecharts",[92,147157,147159],{"className":23811,"code":147158,"language":23813,"meta":20,"style":20},"pip install pyecharts\n",[98,147160,147161],{"__ignoreMap":20},[101,147162,147163,147165,147167],{"class":103,"line":104},[101,147164,23820],{"class":1950},[101,147166,23823],{"class":216},[101,147168,147169],{"class":216}," pyecharts\n",[10,147171,147172],{},"验证：",[92,147174,147176],{"className":30367,"code":147175,"language":30369,"meta":20,"style":20},"import pyecharts\n\nprint(pyecharts.__version__)\n",[98,147177,147178,147184,147188],{"__ignoreMap":20},[101,147179,147180,147182],{"class":103,"line":104},[101,147181,30381],{"class":107},[101,147183,147169],{"class":111},[101,147185,147186],{"class":103,"line":21},[101,147187,2387],{"emptyLinePlaceholder":27},[101,147189,147190,147192,147195,147198],{"class":103,"line":1166},[101,147191,30404],{"class":160},[101,147193,147194],{"class":111},"(pyecharts.",[101,147196,147197],{"class":160},"__version__",[101,147199,118],{"class":111},[10,147201,147202],{},"如果使用虚拟环境，要先激活环境再安装。",[43,147204,147206],{"id":147205},"_104-第一个折线图","10.4 第一个折线图",[92,147208,147210],{"className":30367,"code":147209,"language":30369,"meta":20,"style":20},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[98,147211,147212,147224,147228,147238,147268,147300],{"__ignoreMap":20},[101,147213,147214,147216,147219,147221],{"class":103,"line":104},[101,147215,30726],{"class":107},[101,147217,147218],{"class":111}," pyecharts.charts ",[101,147220,30381],{"class":107},[101,147222,147223],{"class":111}," Line\n",[101,147225,147226],{"class":103,"line":21},[101,147227,2387],{"emptyLinePlaceholder":27},[101,147229,147230,147233,147235],{"class":103,"line":1166},[101,147231,147232],{"class":111},"line ",[101,147234,157],{"class":107},[101,147236,147237],{"class":111}," Line()\n",[101,147239,147240,147243,147246,147248,147251,147253,147256,147258,147261,147263,147266],{"class":103,"line":1181},[101,147241,147242],{"class":111},"line.add_xaxis([",[101,147244,147245],{"class":216},"\"周一\"",[101,147247,12423],{"class":111},[101,147249,147250],{"class":216},"\"周二\"",[101,147252,12423],{"class":111},[101,147254,147255],{"class":216},"\"周三\"",[101,147257,12423],{"class":111},[101,147259,147260],{"class":216},"\"周四\"",[101,147262,12423],{"class":111},[101,147264,147265],{"class":216},"\"周五\"",[101,147267,4644],{"class":111},[101,147269,147270,147273,147276,147278,147280,147282,147284,147286,147288,147290,147293,147295,147298],{"class":103,"line":1187},[101,147271,147272],{"class":111},"line.add_yaxis(",[101,147274,147275],{"class":216},"\"销售额\"",[101,147277,77507],{"class":111},[101,147279,422],{"class":160},[101,147281,12423],{"class":111},[101,147283,928],{"class":160},[101,147285,12423],{"class":111},[101,147287,973],{"class":160},[101,147289,12423],{"class":111},[101,147291,147292],{"class":160},"150",[101,147294,12423],{"class":111},[101,147296,147297],{"class":160},"180",[101,147299,4644],{"class":111},[101,147301,147302,147305,147308],{"class":103,"line":1201},[101,147303,147304],{"class":111},"line.render(",[101,147306,147307],{"class":216},"\"line.html\"",[101,147309,118],{"class":111},[10,147311,147312,147313,147316],{},"运行后会生成 ",[98,147314,147315],{},"line.html","，用浏览器打开即可看到图表。",[10,147318,147319],{},"核心步骤：",[55,147321,147322,147325,147328,147331,147334],{},[58,147323,147324],{},"导入图表类。",[58,147326,147327],{},"创建图表对象。",[58,147329,147330],{},"添加 x 轴数据。",[58,147332,147333],{},"添加 y 轴数据。",[58,147335,147336],{},"渲染为 HTML。",[43,147338,147340],{"id":147339},"_105-全局配置","10.5 全局配置",[10,147342,147343,147344,147347],{},"常用配置在 ",[98,147345,147346],{},"pyecharts.options"," 中。",[92,147349,147351],{"className":30367,"code":147350,"language":30369,"meta":20,"style":20},"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",[98,147352,147353,147370,147380,147384,147392,147416,147444,147449,147468,147487,147505,147525,147529],{"__ignoreMap":20},[101,147354,147355,147357,147360,147362,147365,147367],{"class":103,"line":104},[101,147356,30726],{"class":107},[101,147358,147359],{"class":111}," pyecharts ",[101,147361,30381],{"class":107},[101,147363,147364],{"class":111}," options ",[101,147366,31372],{"class":107},[101,147368,147369],{"class":111}," opts\n",[101,147371,147372,147374,147376,147378],{"class":103,"line":21},[101,147373,30726],{"class":107},[101,147375,147218],{"class":111},[101,147377,30381],{"class":107},[101,147379,147223],{"class":111},[101,147381,147382],{"class":103,"line":1166},[101,147383,2387],{"emptyLinePlaceholder":27},[101,147385,147386,147388,147390],{"class":103,"line":1181},[101,147387,147232],{"class":111},[101,147389,157],{"class":107},[101,147391,147237],{"class":111},[101,147393,147394,147396,147398,147400,147402,147404,147406,147408,147410,147412,147414],{"class":103,"line":1187},[101,147395,147242],{"class":111},[101,147397,147245],{"class":216},[101,147399,12423],{"class":111},[101,147401,147250],{"class":216},[101,147403,12423],{"class":111},[101,147405,147255],{"class":216},[101,147407,12423],{"class":111},[101,147409,147260],{"class":216},[101,147411,12423],{"class":111},[101,147413,147265],{"class":216},[101,147415,4644],{"class":111},[101,147417,147418,147420,147422,147424,147426,147428,147430,147432,147434,147436,147438,147440,147442],{"class":103,"line":1201},[101,147419,147272],{"class":111},[101,147421,147275],{"class":216},[101,147423,77507],{"class":111},[101,147425,422],{"class":160},[101,147427,12423],{"class":111},[101,147429,928],{"class":160},[101,147431,12423],{"class":111},[101,147433,973],{"class":160},[101,147435,12423],{"class":111},[101,147437,147292],{"class":160},[101,147439,12423],{"class":111},[101,147441,147297],{"class":160},[101,147443,4644],{"class":111},[101,147445,147446],{"class":103,"line":1207},[101,147447,147448],{"class":111},"line.set_global_opts(\n",[101,147450,147451,147454,147456,147459,147461,147463,147466],{"class":103,"line":1298},[101,147452,147453],{"class":5204},"    title_opts",[101,147455,157],{"class":107},[101,147457,147458],{"class":111},"opts.TitleOpts(",[101,147460,51396],{"class":5204},[101,147462,157],{"class":107},[101,147464,147465],{"class":216},"\"一周销售额\"",[101,147467,38036],{"class":111},[101,147469,147470,147473,147475,147478,147480,147482,147485],{"class":103,"line":1304},[101,147471,147472],{"class":5204},"    xaxis_opts",[101,147474,157],{"class":107},[101,147476,147477],{"class":111},"opts.AxisOpts(",[101,147479,79799],{"class":5204},[101,147481,157],{"class":107},[101,147483,147484],{"class":216},"\"日期\"",[101,147486,38036],{"class":111},[101,147488,147489,147492,147494,147496,147498,147500,147503],{"class":103,"line":1316},[101,147490,147491],{"class":5204},"    yaxis_opts",[101,147493,157],{"class":107},[101,147495,147477],{"class":111},[101,147497,79799],{"class":5204},[101,147499,157],{"class":107},[101,147501,147502],{"class":216},"\"金额\"",[101,147504,38036],{"class":111},[101,147506,147507,147510,147512,147515,147518,147520,147523],{"class":103,"line":1599},[101,147508,147509],{"class":5204},"    tooltip_opts",[101,147511,157],{"class":107},[101,147513,147514],{"class":111},"opts.TooltipOpts(",[101,147516,147517],{"class":5204},"trigger",[101,147519,157],{"class":107},[101,147521,147522],{"class":216},"\"axis\"",[101,147524,38036],{"class":111},[101,147526,147527],{"class":103,"line":1604},[101,147528,118],{"class":111},[101,147530,147531,147533,147535],{"class":103,"line":1610},[101,147532,147304],{"class":111},[101,147534,147307],{"class":216},[101,147536,118],{"class":111},[10,147538,147539],{},"常见全局配置：",[249,147541,147542,147551],{},[252,147543,147544],{},[255,147545,147546,147549],{},[258,147547,147548],{},"配置",[258,147550,102676],{},[296,147552,147553,147563,147573,147583,147593,147603],{},[255,147554,147555,147560],{},[301,147556,147557],{},[98,147558,147559],{},"TitleOpts",[301,147561,147562],{},"标题",[255,147564,147565,147570],{},[301,147566,147567],{},[98,147568,147569],{},"LegendOpts",[301,147571,147572],{},"图例",[255,147574,147575,147580],{},[301,147576,147577],{},[98,147578,147579],{},"TooltipOpts",[301,147581,147582],{},"提示框",[255,147584,147585,147590],{},[301,147586,147587],{},[98,147588,147589],{},"AxisOpts",[301,147591,147592],{},"坐标轴",[255,147594,147595,147600],{},[301,147596,147597],{},[98,147598,147599],{},"VisualMapOpts",[301,147601,147602],{},"视觉映射",[255,147604,147605,147610],{},[301,147606,147607],{},[98,147608,147609],{},"DataZoomOpts",[301,147611,147612],{},"区域缩放",[43,147614,147616],{"id":147615},"_106-系列配置","10.6 系列配置",[10,147618,147619],{},"系列配置作用于某一组数据。",[92,147621,147623],{"className":30367,"code":147622,"language":30369,"meta":20,"style":20},"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",[98,147624,147625,147630,147641,147670,147681,147700],{"__ignoreMap":20},[101,147626,147627],{"class":103,"line":104},[101,147628,147629],{"class":111},"line.add_yaxis(\n",[101,147631,147632,147635,147637,147639],{"class":103,"line":21},[101,147633,147634],{"class":5204},"    series_name",[101,147636,157],{"class":107},[101,147638,147275],{"class":216},[101,147640,31455],{"class":111},[101,147642,147643,147646,147648,147650,147652,147654,147656,147658,147660,147662,147664,147666,147668],{"class":103,"line":1166},[101,147644,147645],{"class":5204},"    y_axis",[101,147647,157],{"class":107},[101,147649,1001],{"class":111},[101,147651,422],{"class":160},[101,147653,12423],{"class":111},[101,147655,928],{"class":160},[101,147657,12423],{"class":111},[101,147659,973],{"class":160},[101,147661,12423],{"class":111},[101,147663,147292],{"class":160},[101,147665,12423],{"class":111},[101,147667,147297],{"class":160},[101,147669,87825],{"class":111},[101,147671,147672,147675,147677,147679],{"class":103,"line":1181},[101,147673,147674],{"class":5204},"    is_smooth",[101,147676,157],{"class":107},[101,147678,31465],{"class":160},[101,147680,31455],{"class":111},[101,147682,147683,147686,147688,147691,147694,147696,147698],{"class":103,"line":1187},[101,147684,147685],{"class":5204},"    label_opts",[101,147687,157],{"class":107},[101,147689,147690],{"class":111},"opts.LabelOpts(",[101,147692,147693],{"class":5204},"is_show",[101,147695,157],{"class":107},[101,147697,31465],{"class":160},[101,147699,38036],{"class":111},[101,147701,147702],{"class":103,"line":1201},[101,147703,118],{"class":111},[10,147705,147706],{},"常用参数：",[55,147708,147709,147715,147721,147727,147733],{},[58,147710,147711,147714],{},[98,147712,147713],{},"series_name","：系列名称。",[58,147716,147717,147720],{},[98,147718,147719],{},"y_axis","：y 轴数据。",[58,147722,147723,147726],{},[98,147724,147725],{},"is_smooth","：是否平滑曲线。",[58,147728,147729,147732],{},[98,147730,147731],{},"label_opts","：标签配置。",[58,147734,147735,147738],{},[98,147736,147737],{},"symbol_size","：标记点大小。",[43,147740,147742],{"id":147741},"_107-多条折线","10.7 多条折线",[92,147744,147746],{"className":30367,"code":147745,"language":30369,"meta":20,"style":20},"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",[98,147747,147748,147762,147772,147776,147805,147809,147817,147822,147860,147897,147901,147918,147934,147938],{"__ignoreMap":20},[101,147749,147750,147752,147754,147756,147758,147760],{"class":103,"line":104},[101,147751,30726],{"class":107},[101,147753,147359],{"class":111},[101,147755,30381],{"class":107},[101,147757,147364],{"class":111},[101,147759,31372],{"class":107},[101,147761,147369],{"class":111},[101,147763,147764,147766,147768,147770],{"class":103,"line":21},[101,147765,30726],{"class":107},[101,147767,147218],{"class":111},[101,147769,30381],{"class":107},[101,147771,147223],{"class":111},[101,147773,147774],{"class":103,"line":1166},[101,147775,2387],{"emptyLinePlaceholder":27},[101,147777,147778,147781,147783,147785,147787,147789,147791,147793,147795,147797,147799,147801,147803],{"class":103,"line":1181},[101,147779,147780],{"class":111},"dates ",[101,147782,157],{"class":107},[101,147784,52215],{"class":111},[101,147786,147245],{"class":216},[101,147788,12423],{"class":111},[101,147790,147250],{"class":216},[101,147792,12423],{"class":111},[101,147794,147255],{"class":216},[101,147796,12423],{"class":111},[101,147798,147260],{"class":216},[101,147800,12423],{"class":111},[101,147802,147265],{"class":216},[101,147804,33235],{"class":111},[101,147806,147807],{"class":103,"line":1187},[101,147808,2387],{"emptyLinePlaceholder":27},[101,147810,147811,147813,147815],{"class":103,"line":1201},[101,147812,147232],{"class":111},[101,147814,157],{"class":107},[101,147816,147237],{"class":111},[101,147818,147819],{"class":103,"line":1207},[101,147820,147821],{"class":111},"line.add_xaxis(dates)\n",[101,147823,147824,147826,147829,147831,147833,147835,147838,147840,147842,147844,147846,147848,147850,147852,147854,147856,147858],{"class":103,"line":1298},[101,147825,147272],{"class":111},[101,147827,147828],{"class":216},"\"线上销售\"",[101,147830,77507],{"class":111},[101,147832,422],{"class":160},[101,147834,12423],{"class":111},[101,147836,147837],{"class":160},"130",[101,147839,12423],{"class":111},[101,147841,928],{"class":160},[101,147843,12423],{"class":111},[101,147845,21036],{"class":160},[101,147847,12423],{"class":111},[101,147849,1709],{"class":160},[101,147851,112182],{"class":111},[101,147853,147725],{"class":5204},[101,147855,157],{"class":107},[101,147857,31465],{"class":160},[101,147859,118],{"class":111},[101,147861,147862,147864,147867,147869,147871,147873,147875,147877,147879,147881,147883,147885,147887,147889,147891,147893,147895],{"class":103,"line":1304},[101,147863,147272],{"class":111},[101,147865,147866],{"class":216},"\"线下销售\"",[101,147868,77507],{"class":111},[101,147870,723],{"class":160},[101,147872,12423],{"class":111},[101,147874,973],{"class":160},[101,147876,12423],{"class":111},[101,147878,422],{"class":160},[101,147880,12423],{"class":111},[101,147882,928],{"class":160},[101,147884,12423],{"class":111},[101,147886,147292],{"class":160},[101,147888,112182],{"class":111},[101,147890,147725],{"class":5204},[101,147892,157],{"class":107},[101,147894,31465],{"class":160},[101,147896,118],{"class":111},[101,147898,147899],{"class":103,"line":1316},[101,147900,147448],{"class":111},[101,147902,147903,147905,147907,147909,147911,147913,147916],{"class":103,"line":1599},[101,147904,147453],{"class":5204},[101,147906,157],{"class":107},[101,147908,147458],{"class":111},[101,147910,51396],{"class":5204},[101,147912,157],{"class":107},[101,147914,147915],{"class":216},"\"线上线下销售趋势\"",[101,147917,38036],{"class":111},[101,147919,147920,147922,147924,147926,147928,147930,147932],{"class":103,"line":1604},[101,147921,147509],{"class":5204},[101,147923,157],{"class":107},[101,147925,147514],{"class":111},[101,147927,147517],{"class":5204},[101,147929,157],{"class":107},[101,147931,147522],{"class":216},[101,147933,38036],{"class":111},[101,147935,147936],{"class":103,"line":1610},[101,147937,118],{"class":111},[101,147939,147940,147942,147945],{"class":103,"line":1615},[101,147941,147304],{"class":111},[101,147943,147944],{"class":216},"\"sales.html\"",[101,147946,118],{"class":111},[10,147948,147949],{},"多条折线适合比较不同指标或不同地区。",[43,147951,147953],{"id":147952},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[10,147955,147956,147957,24607],{},"假设 ",[98,147958,147959],{},"sales.json",[92,147961,147963],{"className":147025,"code":147962,"language":145772,"meta":20,"style":20},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[98,147964,147965,147970,148002,148030,148058],{"__ignoreMap":20},[101,147966,147967],{"class":103,"line":104},[101,147968,147969],{"class":111},"[\n",[101,147971,147972,147975,147978,147980,147982,147984,147987,147989,147991,147993,147996,147998,148000],{"class":103,"line":21},[101,147973,147974],{"class":111},"  {",[101,147976,147977],{"class":160},"\"date\"",[101,147979,51426],{"class":111},[101,147981,147245],{"class":216},[101,147983,12423],{"class":111},[101,147985,147986],{"class":160},"\"online\"",[101,147988,51426],{"class":111},[101,147990,422],{"class":160},[101,147992,12423],{"class":111},[101,147994,147995],{"class":160},"\"offline\"",[101,147997,51426],{"class":111},[101,147999,723],{"class":160},[101,148001,4917],{"class":111},[101,148003,148004,148006,148008,148010,148012,148014,148016,148018,148020,148022,148024,148026,148028],{"class":103,"line":1166},[101,148005,147974],{"class":111},[101,148007,147977],{"class":160},[101,148009,51426],{"class":111},[101,148011,147250],{"class":216},[101,148013,12423],{"class":111},[101,148015,147986],{"class":160},[101,148017,51426],{"class":111},[101,148019,147837],{"class":160},[101,148021,12423],{"class":111},[101,148023,147995],{"class":160},[101,148025,51426],{"class":111},[101,148027,973],{"class":160},[101,148029,4917],{"class":111},[101,148031,148032,148034,148036,148038,148040,148042,148044,148046,148048,148050,148052,148054,148056],{"class":103,"line":1181},[101,148033,147974],{"class":111},[101,148035,147977],{"class":160},[101,148037,51426],{"class":111},[101,148039,147255],{"class":216},[101,148041,12423],{"class":111},[101,148043,147986],{"class":160},[101,148045,51426],{"class":111},[101,148047,928],{"class":160},[101,148049,12423],{"class":111},[101,148051,147995],{"class":160},[101,148053,51426],{"class":111},[101,148055,422],{"class":160},[101,148057,1552],{"class":111},[101,148059,148060],{"class":103,"line":1187},[101,148061,33235],{"class":111},[10,148063,148064],{},"读取并绘图：",[92,148066,148068],{"className":30367,"code":148067,"language":30369,"meta":20,"style":20},"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",[98,148069,148070,148076,148090,148100,148104,148136,148149,148153,148161,148170,148179,148183,148195,148204,148213,148222,148226,148234,148238,148255,148272,148276,148293,148309,148313],{"__ignoreMap":20},[101,148071,148072,148074],{"class":103,"line":104},[101,148073,30381],{"class":107},[101,148075,147071],{"class":111},[101,148077,148078,148080,148082,148084,148086,148088],{"class":103,"line":21},[101,148079,30726],{"class":107},[101,148081,147359],{"class":111},[101,148083,30381],{"class":107},[101,148085,147364],{"class":111},[101,148087,31372],{"class":107},[101,148089,147369],{"class":111},[101,148091,148092,148094,148096,148098],{"class":103,"line":1166},[101,148093,30726],{"class":107},[101,148095,147218],{"class":111},[101,148097,30381],{"class":107},[101,148099,147223],{"class":111},[101,148101,148102],{"class":103,"line":1181},[101,148103,2387],{"emptyLinePlaceholder":27},[101,148105,148106,148108,148110,148112,148115,148117,148119,148121,148123,148125,148127,148129,148131,148134],{"class":103,"line":1187},[101,148107,107813],{"class":107},[101,148109,146771],{"class":160},[101,148111,112],{"class":111},[101,148113,148114],{"class":216},"\"sales.json\"",[101,148116,12423],{"class":111},[101,148118,146781],{"class":216},[101,148120,12423],{"class":111},[101,148122,146786],{"class":5204},[101,148124,157],{"class":107},[101,148126,146791],{"class":216},[101,148128,13702],{"class":111},[101,148130,31372],{"class":107},[101,148132,148133],{"class":5204}," file",[101,148135,3726],{"class":111},[101,148137,148138,148140,148142,148145,148147],{"class":103,"line":1201},[101,148139,101401],{"class":111},[101,148141,157],{"class":107},[101,148143,148144],{"class":111}," json.load(",[101,148146,45343],{"class":5204},[101,148148,118],{"class":111},[101,148150,148151],{"class":103,"line":1207},[101,148152,2387],{"emptyLinePlaceholder":27},[101,148154,148155,148157,148159],{"class":103,"line":1298},[101,148156,147780],{"class":111},[101,148158,157],{"class":107},[101,148160,51827],{"class":111},[101,148162,148163,148166,148168],{"class":103,"line":1304},[101,148164,148165],{"class":111},"online_sales ",[101,148167,157],{"class":107},[101,148169,51827],{"class":111},[101,148171,148172,148175,148177],{"class":103,"line":1316},[101,148173,148174],{"class":111},"offline_sales ",[101,148176,157],{"class":107},[101,148178,51827],{"class":111},[101,148180,148181],{"class":103,"line":1599},[101,148182,2387],{"emptyLinePlaceholder":27},[101,148184,148185,148187,148190,148192],{"class":103,"line":1604},[101,148186,3012],{"class":107},[101,148188,148189],{"class":111}," item ",[101,148191,26032],{"class":107},[101,148193,148194],{"class":111}," data:\n",[101,148196,148197,148200,148202],{"class":103,"line":1610},[101,148198,148199],{"class":111},"    dates.append(item[",[101,148201,147977],{"class":216},[101,148203,4644],{"class":111},[101,148205,148206,148209,148211],{"class":103,"line":1615},[101,148207,148208],{"class":111},"    online_sales.append(item[",[101,148210,147986],{"class":216},[101,148212,4644],{"class":111},[101,148214,148215,148218,148220],{"class":103,"line":1629},[101,148216,148217],{"class":111},"    offline_sales.append(item[",[101,148219,147995],{"class":216},[101,148221,4644],{"class":111},[101,148223,148224],{"class":103,"line":1634},[101,148225,2387],{"emptyLinePlaceholder":27},[101,148227,148228,148230,148232],{"class":103,"line":1640},[101,148229,147232],{"class":111},[101,148231,157],{"class":107},[101,148233,147237],{"class":111},[101,148235,148236],{"class":103,"line":1661},[101,148237,147821],{"class":111},[101,148239,148240,148242,148244,148247,148249,148251,148253],{"class":103,"line":1666},[101,148241,147272],{"class":111},[101,148243,147828],{"class":216},[101,148245,148246],{"class":111},", online_sales, ",[101,148248,147725],{"class":5204},[101,148250,157],{"class":107},[101,148252,31465],{"class":160},[101,148254,118],{"class":111},[101,148256,148257,148259,148261,148264,148266,148268,148270],{"class":103,"line":1680},[101,148258,147272],{"class":111},[101,148260,147866],{"class":216},[101,148262,148263],{"class":111},", offline_sales, ",[101,148265,147725],{"class":5204},[101,148267,157],{"class":107},[101,148269,31465],{"class":160},[101,148271,118],{"class":111},[101,148273,148274],{"class":103,"line":1685},[101,148275,147448],{"class":111},[101,148277,148278,148280,148282,148284,148286,148288,148291],{"class":103,"line":1714},[101,148279,147453],{"class":5204},[101,148281,157],{"class":107},[101,148283,147458],{"class":111},[101,148285,51396],{"class":5204},[101,148287,157],{"class":107},[101,148289,148290],{"class":216},"\"销售趋势\"",[101,148292,38036],{"class":111},[101,148294,148295,148297,148299,148301,148303,148305,148307],{"class":103,"line":1719},[101,148296,147509],{"class":5204},[101,148298,157],{"class":107},[101,148300,147514],{"class":111},[101,148302,147517],{"class":5204},[101,148304,157],{"class":107},[101,148306,147522],{"class":216},[101,148308,38036],{"class":111},[101,148310,148311],{"class":103,"line":1736},[101,148312,118],{"class":111},[101,148314,148315,148317,148319],{"class":103,"line":1741},[101,148316,147304],{"class":111},[101,148318,147944],{"class":216},[101,148320,118],{"class":111},[43,148322,148324],{"id":148323},"_109-数据清洗","10.9 数据清洗",[10,148326,148327],{},"真实数据经常不整齐，需要清洗。",[10,148329,148330],{},"常见问题：",[55,148332,148333,148336,148339,148342],{},[58,148334,148335],{},"数字是字符串。",[58,148337,148338],{},"字段缺失。",[58,148340,148341],{},"空值。",[58,148343,148344],{},"日期格式不统一。",[10,148346,15123],{},[92,148348,148350],{"className":30367,"code":148349,"language":30369,"meta":20,"style":20},"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",[98,148351,148352,148361,148384,148404,148425,148429,148433,148441,148450,148454,148465,148479,148488,148493,148497,148505,148515,148519,148526],{"__ignoreMap":20},[101,148353,148354,148357,148359],{"class":103,"line":104},[101,148355,148356],{"class":111},"raw_data ",[101,148358,157],{"class":107},[101,148360,55436],{"class":111},[101,148362,148363,148366,148368,148370,148372,148374,148377,148379,148382],{"class":103,"line":21},[101,148364,148365],{"class":111},"    {",[101,148367,147977],{"class":216},[101,148369,51426],{"class":111},[101,148371,147245],{"class":216},[101,148373,12423],{"class":111},[101,148375,148376],{"class":216},"\"sales\"",[101,148378,51426],{"class":111},[101,148380,148381],{"class":216},"\"100\"",[101,148383,4917],{"class":111},[101,148385,148386,148388,148390,148392,148394,148396,148398,148400,148402],{"class":103,"line":1166},[101,148387,148365],{"class":111},[101,148389,147977],{"class":216},[101,148391,51426],{"class":111},[101,148393,147250],{"class":216},[101,148395,12423],{"class":111},[101,148397,148376],{"class":216},[101,148399,51426],{"class":111},[101,148401,7640],{"class":216},[101,148403,4917],{"class":111},[101,148405,148406,148408,148410,148412,148414,148416,148418,148420,148423],{"class":103,"line":1181},[101,148407,148365],{"class":111},[101,148409,147977],{"class":216},[101,148411,51426],{"class":111},[101,148413,147255],{"class":216},[101,148415,12423],{"class":111},[101,148417,148376],{"class":216},[101,148419,51426],{"class":111},[101,148421,148422],{"class":216},"\"120\"",[101,148424,4917],{"class":111},[101,148426,148427],{"class":103,"line":1187},[101,148428,33235],{"class":111},[101,148430,148431],{"class":103,"line":1201},[101,148432,2387],{"emptyLinePlaceholder":27},[101,148434,148435,148437,148439],{"class":103,"line":1207},[101,148436,147780],{"class":111},[101,148438,157],{"class":107},[101,148440,51827],{"class":111},[101,148442,148443,148446,148448],{"class":103,"line":1298},[101,148444,148445],{"class":111},"sales ",[101,148447,157],{"class":107},[101,148449,51827],{"class":111},[101,148451,148452],{"class":103,"line":1304},[101,148453,2387],{"emptyLinePlaceholder":27},[101,148455,148456,148458,148460,148462],{"class":103,"line":1316},[101,148457,3012],{"class":107},[101,148459,148189],{"class":111},[101,148461,26032],{"class":107},[101,148463,148464],{"class":111}," raw_data:\n",[101,148466,148467,148470,148472,148475,148477],{"class":103,"line":1599},[101,148468,148469],{"class":111},"    value ",[101,148471,157],{"class":107},[101,148473,148474],{"class":111}," item.get(",[101,148476,148376],{"class":216},[101,148478,118],{"class":111},[101,148480,148481,148483,148485],{"class":103,"line":1604},[101,148482,3088],{"class":107},[101,148484,38919],{"class":107},[101,148486,148487],{"class":111}," value:\n",[101,148489,148490],{"class":103,"line":1610},[101,148491,148492],{"class":107},"        continue\n",[101,148494,148495],{"class":103,"line":1615},[101,148496,2387],{"emptyLinePlaceholder":27},[101,148498,148499,148501,148503],{"class":103,"line":1629},[101,148500,148199],{"class":111},[101,148502,147977],{"class":216},[101,148504,4644],{"class":111},[101,148506,148507,148510,148512],{"class":103,"line":1634},[101,148508,148509],{"class":111},"    sales.append(",[101,148511,115],{"class":160},[101,148513,148514],{"class":111},"(value))\n",[101,148516,148517],{"class":103,"line":1640},[101,148518,2387],{"emptyLinePlaceholder":27},[101,148520,148521,148523],{"class":103,"line":1661},[101,148522,30404],{"class":160},[101,148524,148525],{"class":111},"(dates)\n",[101,148527,148528,148530],{"class":103,"line":1666},[101,148529,30404],{"class":160},[101,148531,148532],{"class":111},"(sales)\n",[43,148534,148536],{"id":148535},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[92,148538,148540],{"className":30367,"code":148539,"language":30369,"meta":20,"style":20},"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",[98,148541,148542,148556,148566,148570,148578,148599,148621,148643,148665,148687,148691,148695,148717,148738,148742,148750,148754,148758,148768,148777,148787,148803,148807,148811,148828,148844,148860,148876,148886,148890],{"__ignoreMap":20},[101,148543,148544,148546,148548,148550,148552,148554],{"class":103,"line":104},[101,148545,30726],{"class":107},[101,148547,147359],{"class":111},[101,148549,30381],{"class":107},[101,148551,147364],{"class":111},[101,148553,31372],{"class":107},[101,148555,147369],{"class":111},[101,148557,148558,148560,148562,148564],{"class":103,"line":21},[101,148559,30726],{"class":107},[101,148561,147218],{"class":111},[101,148563,30381],{"class":107},[101,148565,147223],{"class":111},[101,148567,148568],{"class":103,"line":1166},[101,148569,2387],{"emptyLinePlaceholder":27},[101,148571,148572,148574,148576],{"class":103,"line":1181},[101,148573,148445],{"class":111},[101,148575,157],{"class":107},[101,148577,55436],{"class":111},[101,148579,148580,148582,148584,148586,148589,148591,148593,148595,148597],{"class":103,"line":1187},[101,148581,148365],{"class":111},[101,148583,147977],{"class":216},[101,148585,51426],{"class":111},[101,148587,148588],{"class":216},"\"2024-10-01\"",[101,148590,12423],{"class":111},[101,148592,84073],{"class":216},[101,148594,51426],{"class":111},[101,148596,92012],{"class":160},[101,148598,4917],{"class":111},[101,148600,148601,148603,148605,148607,148610,148612,148614,148616,148619],{"class":103,"line":1201},[101,148602,148365],{"class":111},[101,148604,147977],{"class":216},[101,148606,51426],{"class":111},[101,148608,148609],{"class":216},"\"2024-10-02\"",[101,148611,12423],{"class":111},[101,148613,84073],{"class":216},[101,148615,51426],{"class":111},[101,148617,148618],{"class":160},"1800",[101,148620,4917],{"class":111},[101,148622,148623,148625,148627,148629,148632,148634,148636,148638,148641],{"class":103,"line":1207},[101,148624,148365],{"class":111},[101,148626,147977],{"class":216},[101,148628,51426],{"class":111},[101,148630,148631],{"class":216},"\"2024-10-03\"",[101,148633,12423],{"class":111},[101,148635,84073],{"class":216},[101,148637,51426],{"class":111},[101,148639,148640],{"class":160},"1500",[101,148642,4917],{"class":111},[101,148644,148645,148647,148649,148651,148654,148656,148658,148660,148663],{"class":103,"line":1298},[101,148646,148365],{"class":111},[101,148648,147977],{"class":216},[101,148650,51426],{"class":111},[101,148652,148653],{"class":216},"\"2024-10-04\"",[101,148655,12423],{"class":111},[101,148657,84073],{"class":216},[101,148659,51426],{"class":111},[101,148661,148662],{"class":160},"2100",[101,148664,4917],{"class":111},[101,148666,148667,148669,148671,148673,148676,148678,148680,148682,148685],{"class":103,"line":1304},[101,148668,148365],{"class":111},[101,148670,147977],{"class":216},[101,148672,51426],{"class":111},[101,148674,148675],{"class":216},"\"2024-10-05\"",[101,148677,12423],{"class":111},[101,148679,84073],{"class":216},[101,148681,51426],{"class":111},[101,148683,148684],{"class":160},"2600",[101,148686,4917],{"class":111},[101,148688,148689],{"class":103,"line":1316},[101,148690,33235],{"class":111},[101,148692,148693],{"class":103,"line":1599},[101,148694,2387],{"emptyLinePlaceholder":27},[101,148696,148697,148699,148701,148704,148706,148708,148710,148712,148714],{"class":103,"line":1604},[101,148698,147780],{"class":111},[101,148700,157],{"class":107},[101,148702,148703],{"class":111}," [item[",[101,148705,147977],{"class":216},[101,148707,4430],{"class":111},[101,148709,3012],{"class":107},[101,148711,148189],{"class":111},[101,148713,26032],{"class":107},[101,148715,148716],{"class":111}," sales]\n",[101,148718,148719,148722,148724,148726,148728,148730,148732,148734,148736],{"class":103,"line":1610},[101,148720,148721],{"class":111},"amounts ",[101,148723,157],{"class":107},[101,148725,148703],{"class":111},[101,148727,84073],{"class":216},[101,148729,4430],{"class":111},[101,148731,3012],{"class":107},[101,148733,148189],{"class":111},[101,148735,26032],{"class":107},[101,148737,148716],{"class":111},[101,148739,148740],{"class":103,"line":1615},[101,148741,2387],{"emptyLinePlaceholder":27},[101,148743,148744,148746,148748],{"class":103,"line":1629},[101,148745,147232],{"class":111},[101,148747,157],{"class":107},[101,148749,147237],{"class":111},[101,148751,148752],{"class":103,"line":1634},[101,148753,147821],{"class":111},[101,148755,148756],{"class":103,"line":1640},[101,148757,147629],{"class":111},[101,148759,148760,148762,148764,148766],{"class":103,"line":1661},[101,148761,147634],{"class":5204},[101,148763,157],{"class":107},[101,148765,147275],{"class":216},[101,148767,31455],{"class":111},[101,148769,148770,148772,148774],{"class":103,"line":1666},[101,148771,147645],{"class":5204},[101,148773,157],{"class":107},[101,148775,148776],{"class":111},"amounts,\n",[101,148778,148779,148781,148783,148785],{"class":103,"line":1680},[101,148780,147674],{"class":5204},[101,148782,157],{"class":107},[101,148784,31465],{"class":160},[101,148786,31455],{"class":111},[101,148788,148789,148791,148793,148795,148797,148799,148801],{"class":103,"line":1685},[101,148790,147685],{"class":5204},[101,148792,157],{"class":107},[101,148794,147690],{"class":111},[101,148796,147693],{"class":5204},[101,148798,157],{"class":107},[101,148800,31465],{"class":160},[101,148802,38036],{"class":111},[101,148804,148805],{"class":103,"line":1714},[101,148806,118],{"class":111},[101,148808,148809],{"class":103,"line":1719},[101,148810,147448],{"class":111},[101,148812,148813,148815,148817,148819,148821,148823,148826],{"class":103,"line":1736},[101,148814,147453],{"class":5204},[101,148816,157],{"class":107},[101,148818,147458],{"class":111},[101,148820,51396],{"class":5204},[101,148822,157],{"class":107},[101,148824,148825],{"class":216},"\"每日销售额\"",[101,148827,38036],{"class":111},[101,148829,148830,148832,148834,148836,148838,148840,148842],{"class":103,"line":1741},[101,148831,147472],{"class":5204},[101,148833,157],{"class":107},[101,148835,147477],{"class":111},[101,148837,79799],{"class":5204},[101,148839,157],{"class":107},[101,148841,147484],{"class":216},[101,148843,38036],{"class":111},[101,148845,148846,148848,148850,148852,148854,148856,148858],{"class":103,"line":1746},[101,148847,147491],{"class":5204},[101,148849,157],{"class":107},[101,148851,147477],{"class":111},[101,148853,79799],{"class":5204},[101,148855,157],{"class":107},[101,148857,147502],{"class":216},[101,148859,38036],{"class":111},[101,148861,148862,148864,148866,148868,148870,148872,148874],{"class":103,"line":1751},[101,148863,147509],{"class":5204},[101,148865,157],{"class":107},[101,148867,147514],{"class":111},[101,148869,147517],{"class":5204},[101,148871,157],{"class":107},[101,148873,147522],{"class":216},[101,148875,38036],{"class":111},[101,148877,148878,148881,148883],{"class":103,"line":1765},[101,148879,148880],{"class":5204},"    datazoom_opts",[101,148882,157],{"class":107},[101,148884,148885],{"class":111},"[opts.DataZoomOpts()],\n",[101,148887,148888],{"class":103,"line":1770},[101,148889,118],{"class":111},[101,148891,148892,148894,148897],{"class":103,"line":2564},[101,148893,147304],{"class":111},[101,148895,148896],{"class":216},"\"daily_sales.html\"",[101,148898,118],{"class":111},[10,148900,148901,148904],{},[98,148902,148903],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[43,148906,148908],{"id":148907},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[10,148910,148911],{},"如果数据结构如下：",[92,148913,148915],{"className":30367,"code":148914,"language":30369,"meta":20,"style":20},"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",[98,148916,148917,148925,148933,148955,148976,148981,148988,149008,149028,149032],{"__ignoreMap":20},[101,148918,148919,148921,148923],{"class":103,"line":104},[101,148920,101638],{"class":111},[101,148922,157],{"class":107},[101,148924,15560],{"class":111},[101,148926,148927,148930],{"class":103,"line":21},[101,148928,148929],{"class":216},"    \"北京\"",[101,148931,148932],{"class":111},": [\n",[101,148934,148935,148937,148939,148941,148944,148946,148949,148951,148953],{"class":103,"line":1166},[101,148936,4904],{"class":111},[101,148938,147977],{"class":216},[101,148940,51426],{"class":111},[101,148942,148943],{"class":216},"\"2024-01-01\"",[101,148945,12423],{"class":111},[101,148947,148948],{"class":216},"\"confirm\"",[101,148950,51426],{"class":111},[101,148952,557],{"class":160},[101,148954,4917],{"class":111},[101,148956,148957,148959,148961,148963,148966,148968,148970,148972,148974],{"class":103,"line":1181},[101,148958,4904],{"class":111},[101,148960,147977],{"class":216},[101,148962,51426],{"class":111},[101,148964,148965],{"class":216},"\"2024-01-02\"",[101,148967,12423],{"class":111},[101,148969,148948],{"class":216},[101,148971,51426],{"class":111},[101,148973,609],{"class":160},[101,148975,4917],{"class":111},[101,148977,148978],{"class":103,"line":1187},[101,148979,148980],{"class":111},"    ],\n",[101,148982,148983,148986],{"class":103,"line":1201},[101,148984,148985],{"class":216},"    \"上海\"",[101,148987,148932],{"class":111},[101,148989,148990,148992,148994,148996,148998,149000,149002,149004,149006],{"class":103,"line":1207},[101,148991,4904],{"class":111},[101,148993,147977],{"class":216},[101,148995,51426],{"class":111},[101,148997,148943],{"class":216},[101,148999,12423],{"class":111},[101,149001,148948],{"class":216},[101,149003,51426],{"class":111},[101,149005,506],{"class":160},[101,149007,4917],{"class":111},[101,149009,149010,149012,149014,149016,149018,149020,149022,149024,149026],{"class":103,"line":1298},[101,149011,4904],{"class":111},[101,149013,147977],{"class":216},[101,149015,51426],{"class":111},[101,149017,148965],{"class":216},[101,149019,12423],{"class":111},[101,149021,148948],{"class":216},[101,149023,51426],{"class":111},[101,149025,634],{"class":160},[101,149027,4917],{"class":111},[101,149029,149030],{"class":103,"line":1304},[101,149031,148980],{"class":111},[101,149033,149034],{"class":103,"line":1316},[101,149035,1552],{"class":111},[10,149037,149038],{},"绘制多地区趋势：",[92,149040,149042],{"className":30367,"code":149041,"language":30369,"meta":20,"style":20},"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",[98,149043,149044,149058,149068,149072,149097,149101,149109,149113,149117,149129,149151,149164,149168,149172,149189,149205,149209],{"__ignoreMap":20},[101,149045,149046,149048,149050,149052,149054,149056],{"class":103,"line":104},[101,149047,30726],{"class":107},[101,149049,147359],{"class":111},[101,149051,30381],{"class":107},[101,149053,147364],{"class":111},[101,149055,31372],{"class":107},[101,149057,147369],{"class":111},[101,149059,149060,149062,149064,149066],{"class":103,"line":21},[101,149061,30726],{"class":107},[101,149063,147218],{"class":111},[101,149065,30381],{"class":107},[101,149067,147223],{"class":111},[101,149069,149070],{"class":103,"line":1166},[101,149071,2387],{"emptyLinePlaceholder":27},[101,149073,149074,149076,149078,149080,149082,149084,149086,149088,149090,149093,149095],{"class":103,"line":1181},[101,149075,147780],{"class":111},[101,149077,157],{"class":107},[101,149079,148703],{"class":111},[101,149081,147977],{"class":216},[101,149083,4430],{"class":111},[101,149085,3012],{"class":107},[101,149087,148189],{"class":111},[101,149089,26032],{"class":107},[101,149091,149092],{"class":111}," data[",[101,149094,69258],{"class":216},[101,149096,77516],{"class":111},[101,149098,149099],{"class":103,"line":1187},[101,149100,2387],{"emptyLinePlaceholder":27},[101,149102,149103,149105,149107],{"class":103,"line":1201},[101,149104,147232],{"class":111},[101,149106,157],{"class":107},[101,149108,147237],{"class":111},[101,149110,149111],{"class":103,"line":1207},[101,149112,147821],{"class":111},[101,149114,149115],{"class":103,"line":1298},[101,149116,2387],{"emptyLinePlaceholder":27},[101,149118,149119,149121,149124,149126],{"class":103,"line":1304},[101,149120,3012],{"class":107},[101,149122,149123],{"class":111}," city, records ",[101,149125,26032],{"class":107},[101,149127,149128],{"class":111}," data.items():\n",[101,149130,149131,149134,149136,149138,149140,149142,149144,149146,149148],{"class":103,"line":1316},[101,149132,149133],{"class":111},"    values ",[101,149135,157],{"class":107},[101,149137,148703],{"class":111},[101,149139,148948],{"class":216},[101,149141,4430],{"class":111},[101,149143,3012],{"class":107},[101,149145,148189],{"class":111},[101,149147,26032],{"class":107},[101,149149,149150],{"class":111}," records]\n",[101,149152,149153,149156,149158,149160,149162],{"class":103,"line":1599},[101,149154,149155],{"class":111},"    line.add_yaxis(city, values, ",[101,149157,147725],{"class":5204},[101,149159,157],{"class":107},[101,149161,31465],{"class":160},[101,149163,118],{"class":111},[101,149165,149166],{"class":103,"line":1604},[101,149167,2387],{"emptyLinePlaceholder":27},[101,149169,149170],{"class":103,"line":1610},[101,149171,147448],{"class":111},[101,149173,149174,149176,149178,149180,149182,149184,149187],{"class":103,"line":1615},[101,149175,147453],{"class":5204},[101,149177,157],{"class":107},[101,149179,147458],{"class":111},[101,149181,51396],{"class":5204},[101,149183,157],{"class":107},[101,149185,149186],{"class":216},"\"多地区趋势图\"",[101,149188,38036],{"class":111},[101,149190,149191,149193,149195,149197,149199,149201,149203],{"class":103,"line":1629},[101,149192,147509],{"class":5204},[101,149194,157],{"class":107},[101,149196,147514],{"class":111},[101,149198,147517],{"class":5204},[101,149200,157],{"class":107},[101,149202,147522],{"class":216},[101,149204,38036],{"class":111},[101,149206,149207],{"class":103,"line":1634},[101,149208,118],{"class":111},[101,149210,149211,149213,149216],{"class":103,"line":1640},[101,149212,147304],{"class":111},[101,149214,149215],{"class":216},"\"trend.html\"",[101,149217,118],{"class":111},[10,149219,149220],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[43,149222,149224],{"id":149223},"_1012-易错点","10.12 易错点",[55,149226,149227,149233,149239,149249,149255],{},[58,149228,149229,149232],{},[98,149230,149231],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[58,149234,149235,149238],{},[98,149236,149237],{},"render()"," 生成的是 HTML，不是图片。",[58,149240,149241,149242,149245,149246,28374],{},"JSON 字符串用 ",[98,149243,149244],{},"json.loads()","，JSON 文件用 ",[98,149247,149248],{},"json.load()",[58,149250,149251,149252,28374],{},"中文 JSON 保存时加 ",[98,149253,149254],{},"ensure_ascii=False",[58,149256,149257],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[43,149259,149261],{"id":149260},"_1013-本章练习","10.13 本章练习",[55,149263,149264,149267,149270,149273,149276],{},[58,149265,149266],{},"安装 pyecharts 并生成第一个折线图。",[58,149268,149269],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[58,149271,149272],{},"绘制两条折线，对比线上和线下销售额。",[58,149274,149275],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[58,149277,149278],{},"对含有空值的销售数据进行清洗后再绘图。",[5114,149280,149281],{},"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":20,"searchDepth":21,"depth":21,"links":149283},[149284,149285,149286,149287,149288,149289,149290,149291,149292,149293,149294,149295,149296],{"id":146900,"depth":21,"text":146901},{"id":146975,"depth":21,"text":146976},{"id":147154,"depth":21,"text":147155},{"id":147205,"depth":21,"text":147206},{"id":147339,"depth":21,"text":147340},{"id":147615,"depth":21,"text":147616},{"id":147741,"depth":21,"text":147742},{"id":147952,"depth":21,"text":147953},{"id":148323,"depth":21,"text":148324},{"id":148535,"depth":21,"text":148536},{"id":148907,"depth":21,"text":148908},{"id":149223,"depth":21,"text":149224},{"id":149260,"depth":21,"text":149261},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146892,"description":23365},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149303,"title":149304,"body":149305,"description":23365,"extension":24,"meta":151665,"navigation":27,"path":151666,"seo":151667,"stem":151668,"__hash__":151669},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149306,"toc":151642},[149307,149310,149314,149317,149320,149396,149399,149490,149493,149497,149500,149544,149557,149561,149564,149631,149634,149638,149641,149725,149733,149737,149742,149883,149886,149897,149903,149909,150023,150027,150030,150033,150286,150289,150293,150296,150400,150403,150407,150558,150562,150569,150682,150686,150689,150795,150798,150802,150805,150836,150839,150944,150947,150951,150955,150965,151033,151037,151044,151108,151111,151115,151121,151217,151226,151230,151554,151563,151567,151595,151599,151639],[39,149308,149304],{"id":149309},"_11-面向对象基础",[43,149311,149313],{"id":149312},"_111-什么是面向对象","11.1 什么是面向对象",[10,149315,149316],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[10,149318,149319],{},"面向过程：",[92,149321,149323],{"className":30367,"code":149322,"language":30369,"meta":20,"style":20},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[98,149324,149325,149334,149342,149346,149356,149387,149391],{"__ignoreMap":20},[101,149326,149327,149329,149331],{"class":103,"line":104},[101,149328,146516],{"class":111},[101,149330,157],{"class":107},[101,149332,149333],{"class":216}," \"小明\"\n",[101,149335,149336,149338,149340],{"class":103,"line":21},[101,149337,146526],{"class":111},[101,149339,157],{"class":107},[101,149341,146531],{"class":160},[101,149343,149344],{"class":103,"line":1166},[101,149345,2387],{"emptyLinePlaceholder":27},[101,149347,149348,149350,149353],{"class":103,"line":1181},[101,149349,31936],{"class":107},[101,149351,149352],{"class":1950}," introduce",[101,149354,149355],{"class":111},"(name, age):\n",[101,149357,149358,149360,149362,149364,149367,149369,149371,149373,149376,149378,149380,149382,149385],{"class":103,"line":1187},[101,149359,31288],{"class":160},[101,149361,112],{"class":111},[101,149363,164],{"class":107},[101,149365,149366],{"class":216},"\"我叫",[101,149368,1007],{"class":160},[101,149370,79799],{"class":111},[101,149372,1057],{"class":160},[101,149374,149375],{"class":216},"，今年",[101,149377,1007],{"class":160},[101,149379,70210],{"class":111},[101,149381,1057],{"class":160},[101,149383,149384],{"class":216},"岁\"",[101,149386,118],{"class":111},[101,149388,149389],{"class":103,"line":1201},[101,149390,2387],{"emptyLinePlaceholder":27},[101,149392,149393],{"class":103,"line":1207},[101,149394,149395],{"class":111},"introduce(name, age)\n",[10,149397,149398],{},"面向对象：",[92,149400,149402],{"className":30367,"code":149401,"language":30369,"meta":20,"style":20},"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",[98,149403,149404,149412,149420,149449,149453,149457,149467,149476,149485],{"__ignoreMap":20},[101,149405,149406,149408,149410],{"class":103,"line":104},[101,149407,14682],{"class":107},[101,149409,7886],{"class":1950},[101,149411,3726],{"class":111},[101,149413,149414,149416,149418],{"class":103,"line":21},[101,149415,30790],{"class":107},[101,149417,149352],{"class":1950},[101,149419,30796],{"class":111},[101,149421,149422,149424,149426,149428,149430,149433,149435,149437,149439,149441,149443,149445,149447],{"class":103,"line":1166},[101,149423,32440],{"class":160},[101,149425,112],{"class":111},[101,149427,164],{"class":107},[101,149429,149366],{"class":216},[101,149431,149432],{"class":160},"{self",[101,149434,80290],{"class":111},[101,149436,1057],{"class":160},[101,149438,149375],{"class":216},[101,149440,149432],{"class":160},[101,149442,80302],{"class":111},[101,149444,1057],{"class":160},[101,149446,149384],{"class":216},[101,149448,118],{"class":111},[101,149450,149451],{"class":103,"line":1181},[101,149452,2387],{"emptyLinePlaceholder":27},[101,149454,149455],{"class":103,"line":1187},[101,149456,2387],{"emptyLinePlaceholder":27},[101,149458,149459,149462,149464],{"class":103,"line":1201},[101,149460,149461],{"class":111},"student ",[101,149463,157],{"class":107},[101,149465,149466],{"class":111}," Student()\n",[101,149468,149469,149472,149474],{"class":103,"line":1207},[101,149470,149471],{"class":111},"student.name ",[101,149473,157],{"class":107},[101,149475,149333],{"class":216},[101,149477,149478,149481,149483],{"class":103,"line":1298},[101,149479,149480],{"class":111},"student.age ",[101,149482,157],{"class":107},[101,149484,146531],{"class":160},[101,149486,149487],{"class":103,"line":1304},[101,149488,149489],{"class":111},"student.introduce()\n",[10,149491,149492],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[43,149494,149496],{"id":149495},"_112-类和对象","11.2 类和对象",[10,149498,149499],{},"类是模板，对象是根据模板创建出来的具体实例。",[92,149501,149503],{"className":30367,"code":149502,"language":30369,"meta":20,"style":20},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[98,149504,149505,149513,149518,149522,149526,149535],{"__ignoreMap":20},[101,149506,149507,149509,149511],{"class":103,"line":104},[101,149508,14682],{"class":107},[101,149510,7886],{"class":1950},[101,149512,3726],{"class":111},[101,149514,149515],{"class":103,"line":21},[101,149516,149517],{"class":107},"    pass\n",[101,149519,149520],{"class":103,"line":1166},[101,149521,2387],{"emptyLinePlaceholder":27},[101,149523,149524],{"class":103,"line":1181},[101,149525,2387],{"emptyLinePlaceholder":27},[101,149527,149528,149531,149533],{"class":103,"line":1187},[101,149529,149530],{"class":111},"student1 ",[101,149532,157],{"class":107},[101,149534,149466],{"class":111},[101,149536,149537,149540,149542],{"class":103,"line":1201},[101,149538,149539],{"class":111},"student2 ",[101,149541,157],{"class":107},[101,149543,149466],{"class":111},[10,149545,149546,149549,149550,100998,149553,149556],{},[98,149547,149548],{},"Student"," 是类，",[98,149551,149552],{},"student1",[98,149554,149555],{},"student2"," 是对象。",[43,149558,149560],{"id":149559},"_113-属性","11.3 属性",[10,149562,149563],{},"属性是对象保存的数据。",[92,149565,149567],{"className":30367,"code":149566,"language":30369,"meta":20,"style":20},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[98,149568,149569,149577,149581,149585,149589,149597,149605,149613,149617,149624],{"__ignoreMap":20},[101,149570,149571,149573,149575],{"class":103,"line":104},[101,149572,14682],{"class":107},[101,149574,7886],{"class":1950},[101,149576,3726],{"class":111},[101,149578,149579],{"class":103,"line":21},[101,149580,149517],{"class":107},[101,149582,149583],{"class":103,"line":1166},[101,149584,2387],{"emptyLinePlaceholder":27},[101,149586,149587],{"class":103,"line":1181},[101,149588,2387],{"emptyLinePlaceholder":27},[101,149590,149591,149593,149595],{"class":103,"line":1187},[101,149592,149461],{"class":111},[101,149594,157],{"class":107},[101,149596,149466],{"class":111},[101,149598,149599,149601,149603],{"class":103,"line":1201},[101,149600,149471],{"class":111},[101,149602,157],{"class":107},[101,149604,149333],{"class":216},[101,149606,149607,149609,149611],{"class":103,"line":1207},[101,149608,149480],{"class":111},[101,149610,157],{"class":107},[101,149612,146531],{"class":160},[101,149614,149615],{"class":103,"line":1298},[101,149616,2387],{"emptyLinePlaceholder":27},[101,149618,149619,149621],{"class":103,"line":1304},[101,149620,30404],{"class":160},[101,149622,149623],{"class":111},"(student.name)\n",[101,149625,149626,149628],{"class":103,"line":1316},[101,149627,30404],{"class":160},[101,149629,149630],{"class":111},"(student.age)\n",[10,149632,149633],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[43,149635,149637],{"id":149636},"_114-方法","11.4 方法",[10,149639,149640],{},"类中的函数叫方法。",[92,149642,149643],{"className":30367,"code":149401,"language":30369,"meta":20,"style":20},[98,149644,149645,149653,149661,149689,149693,149697,149705,149713,149721],{"__ignoreMap":20},[101,149646,149647,149649,149651],{"class":103,"line":104},[101,149648,14682],{"class":107},[101,149650,7886],{"class":1950},[101,149652,3726],{"class":111},[101,149654,149655,149657,149659],{"class":103,"line":21},[101,149656,30790],{"class":107},[101,149658,149352],{"class":1950},[101,149660,30796],{"class":111},[101,149662,149663,149665,149667,149669,149671,149673,149675,149677,149679,149681,149683,149685,149687],{"class":103,"line":1166},[101,149664,32440],{"class":160},[101,149666,112],{"class":111},[101,149668,164],{"class":107},[101,149670,149366],{"class":216},[101,149672,149432],{"class":160},[101,149674,80290],{"class":111},[101,149676,1057],{"class":160},[101,149678,149375],{"class":216},[101,149680,149432],{"class":160},[101,149682,80302],{"class":111},[101,149684,1057],{"class":160},[101,149686,149384],{"class":216},[101,149688,118],{"class":111},[101,149690,149691],{"class":103,"line":1181},[101,149692,2387],{"emptyLinePlaceholder":27},[101,149694,149695],{"class":103,"line":1187},[101,149696,2387],{"emptyLinePlaceholder":27},[101,149698,149699,149701,149703],{"class":103,"line":1201},[101,149700,149461],{"class":111},[101,149702,157],{"class":107},[101,149704,149466],{"class":111},[101,149706,149707,149709,149711],{"class":103,"line":1207},[101,149708,149471],{"class":111},[101,149710,157],{"class":107},[101,149712,149333],{"class":216},[101,149714,149715,149717,149719],{"class":103,"line":1298},[101,149716,149480],{"class":111},[101,149718,157],{"class":107},[101,149720,146531],{"class":160},[101,149722,149723],{"class":103,"line":1304},[101,149724,149489],{"class":111},[10,149726,149727,149729,149730,149732],{},[98,149728,30812],{}," 表示当前对象。调用方法时不需要手动传入 ",[98,149731,30812],{},"，Python 会自动传。",[43,149734,149736],{"id":149735},"_115-构造方法__init__","11.5 构造方法__init__",[10,149738,149739,149741],{},[98,149740,30818],{}," 在对象创建时自动执行，用于初始化属性。",[92,149743,149745],{"className":30367,"code":149744,"language":30369,"meta":20,"style":20},"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",[98,149746,149747,149755,149764,149776,149788,149799,149803,149811,149849,149853,149857,149879],{"__ignoreMap":20},[101,149748,149749,149751,149753],{"class":103,"line":104},[101,149750,14682],{"class":107},[101,149752,7886],{"class":1950},[101,149754,3726],{"class":111},[101,149756,149757,149759,149761],{"class":103,"line":21},[101,149758,30790],{"class":107},[101,149760,30793],{"class":160},[101,149762,149763],{"class":111},"(self, name, age, score):\n",[101,149765,149766,149768,149771,149773],{"class":103,"line":1166},[101,149767,30834],{"class":160},[101,149769,149770],{"class":111},".name ",[101,149772,157],{"class":107},[101,149774,149775],{"class":111}," name\n",[101,149777,149778,149780,149783,149785],{"class":103,"line":1181},[101,149779,30834],{"class":160},[101,149781,149782],{"class":111},".age ",[101,149784,157],{"class":107},[101,149786,149787],{"class":111}," age\n",[101,149789,149790,149792,149795,149797],{"class":103,"line":1187},[101,149791,30834],{"class":160},[101,149793,149794],{"class":111},".score ",[101,149796,157],{"class":107},[101,149798,1566],{"class":111},[101,149800,149801],{"class":103,"line":1201},[101,149802,2387],{"emptyLinePlaceholder":27},[101,149804,149805,149807,149809],{"class":103,"line":1207},[101,149806,30790],{"class":107},[101,149808,149352],{"class":1950},[101,149810,30796],{"class":111},[101,149812,149813,149815,149817,149819,149821,149823,149825,149827,149829,149831,149833,149835,149838,149840,149843,149845,149847],{"class":103,"line":1298},[101,149814,32440],{"class":160},[101,149816,112],{"class":111},[101,149818,164],{"class":107},[101,149820,149366],{"class":216},[101,149822,149432],{"class":160},[101,149824,80290],{"class":111},[101,149826,1057],{"class":160},[101,149828,149375],{"class":216},[101,149830,149432],{"class":160},[101,149832,80302],{"class":111},[101,149834,1057],{"class":160},[101,149836,149837],{"class":216},"岁，成绩",[101,149839,149432],{"class":160},[101,149841,149842],{"class":111},".score",[101,149844,1057],{"class":160},[101,149846,362],{"class":216},[101,149848,118],{"class":111},[101,149850,149851],{"class":103,"line":1304},[101,149852,2387],{"emptyLinePlaceholder":27},[101,149854,149855],{"class":103,"line":1316},[101,149856,2387],{"emptyLinePlaceholder":27},[101,149858,149859,149861,149863,149866,149869,149871,149873,149875,149877],{"class":103,"line":1599},[101,149860,149461],{"class":111},[101,149862,157],{"class":107},[101,149864,149865],{"class":111}," Student(",[101,149867,149868],{"class":216},"\"小明\"",[101,149870,12423],{"class":111},[101,149872,761],{"class":160},[101,149874,12423],{"class":111},[101,149876,1100],{"class":160},[101,149878,118],{"class":111},[101,149880,149881],{"class":103,"line":1604},[101,149882,149489],{"class":111},[10,149884,149885],{},"构造方法的好处：",[55,149887,149888,149891,149894],{},[58,149889,149890],{},"创建对象时必须提供必要数据。",[58,149892,149893],{},"属性初始化集中，不容易漏。",[58,149895,149896],{},"对象状态更完整。",[43,149898,149900,149901],{"id":149899},"_116-str","11.6 ",[261,149902,1286],{},[10,149904,149905,149906,28374],{},"直接打印对象时，默认输出不直观。可以定义 ",[98,149907,149908],{},"__str__",[92,149910,149912],{"className":30367,"code":149911,"language":30369,"meta":20,"style":20},"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",[98,149913,149914,149922,149931,149941,149951,149955,149964,149992,149996,150000,150016],{"__ignoreMap":20},[101,149915,149916,149918,149920],{"class":103,"line":104},[101,149917,14682],{"class":107},[101,149919,7886],{"class":1950},[101,149921,3726],{"class":111},[101,149923,149924,149926,149928],{"class":103,"line":21},[101,149925,30790],{"class":107},[101,149927,30793],{"class":160},[101,149929,149930],{"class":111},"(self, name, age):\n",[101,149932,149933,149935,149937,149939],{"class":103,"line":1166},[101,149934,30834],{"class":160},[101,149936,149770],{"class":111},[101,149938,157],{"class":107},[101,149940,149775],{"class":111},[101,149942,149943,149945,149947,149949],{"class":103,"line":1181},[101,149944,30834],{"class":160},[101,149946,149782],{"class":111},[101,149948,157],{"class":107},[101,149950,149787],{"class":111},[101,149952,149953],{"class":103,"line":1187},[101,149954,2387],{"emptyLinePlaceholder":27},[101,149956,149957,149959,149962],{"class":103,"line":1201},[101,149958,30790],{"class":107},[101,149960,149961],{"class":160}," __str__",[101,149963,30796],{"class":111},[101,149965,149966,149968,149971,149974,149976,149978,149980,149983,149985,149987,149989],{"class":103,"line":1207},[101,149967,14740],{"class":107},[101,149969,149970],{"class":107}," f",[101,149972,149973],{"class":216},"\"Student(name=",[101,149975,149432],{"class":160},[101,149977,80290],{"class":111},[101,149979,1057],{"class":160},[101,149981,149982],{"class":216},", age=",[101,149984,149432],{"class":160},[101,149986,80302],{"class":111},[101,149988,1057],{"class":160},[101,149990,149991],{"class":216},")\"\n",[101,149993,149994],{"class":103,"line":1298},[101,149995,2387],{"emptyLinePlaceholder":27},[101,149997,149998],{"class":103,"line":1304},[101,149999,2387],{"emptyLinePlaceholder":27},[101,150001,150002,150004,150006,150008,150010,150012,150014],{"class":103,"line":1316},[101,150003,149461],{"class":111},[101,150005,157],{"class":107},[101,150007,149865],{"class":111},[101,150009,149868],{"class":216},[101,150011,12423],{"class":111},[101,150013,761],{"class":160},[101,150015,118],{"class":111},[101,150017,150018,150020],{"class":103,"line":1599},[101,150019,30404],{"class":160},[101,150021,150022],{"class":111},"(student)\n",[43,150024,150026],{"id":150025},"_117-封装","11.7 封装",[10,150028,150029],{},"封装就是把数据和方法放到类中，并控制访问方式。",[10,150031,150032],{},"Python 中以双下划线开头的属性通常视为私有属性。",[92,150034,150036],{"className":30367,"code":150035,"language":30369,"meta":20,"style":20},"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",[98,150037,150038,150047,150056,150068,150080,150084,150093,150102,150106,150116,150129,150140,150145,150156,150160,150169,150181,150192,150196,150209,150220,150224,150235,150239,150243,150261,150270,150279],{"__ignoreMap":20},[101,150039,150040,150042,150045],{"class":103,"line":104},[101,150041,14682],{"class":107},[101,150043,150044],{"class":1950}," Account",[101,150046,3726],{"class":111},[101,150048,150049,150051,150053],{"class":103,"line":21},[101,150050,30790],{"class":107},[101,150052,30793],{"class":160},[101,150054,150055],{"class":111},"(self, owner, balance):\n",[101,150057,150058,150060,150063,150065],{"class":103,"line":1166},[101,150059,30834],{"class":160},[101,150061,150062],{"class":111},".owner ",[101,150064,157],{"class":107},[101,150066,150067],{"class":111}," owner\n",[101,150069,150070,150072,150075,150077],{"class":103,"line":1181},[101,150071,30834],{"class":160},[101,150073,150074],{"class":111},".__balance ",[101,150076,157],{"class":107},[101,150078,150079],{"class":111}," balance\n",[101,150081,150082],{"class":103,"line":1187},[101,150083,2387],{"emptyLinePlaceholder":27},[101,150085,150086,150088,150091],{"class":103,"line":1201},[101,150087,30790],{"class":107},[101,150089,150090],{"class":1950}," get_balance",[101,150092,30796],{"class":111},[101,150094,150095,150097,150099],{"class":103,"line":1207},[101,150096,14740],{"class":107},[101,150098,38862],{"class":160},[101,150100,150101],{"class":111},".__balance\n",[101,150103,150104],{"class":103,"line":1298},[101,150105,2387],{"emptyLinePlaceholder":27},[101,150107,150108,150110,150113],{"class":103,"line":1304},[101,150109,30790],{"class":107},[101,150111,150112],{"class":1950}," deposit",[101,150114,150115],{"class":111},"(self, money):\n",[101,150117,150118,150120,150123,150125,150127],{"class":103,"line":1316},[101,150119,2484],{"class":107},[101,150121,150122],{"class":111}," money ",[101,150124,1575],{"class":107},[101,150126,4080],{"class":160},[101,150128,3726],{"class":111},[101,150130,150131,150133,150135,150138],{"class":103,"line":1599},[101,150132,34639],{"class":160},[101,150134,112],{"class":111},[101,150136,150137],{"class":216},"\"存款金额必须大于0\"",[101,150139,118],{"class":111},[101,150141,150142],{"class":103,"line":1604},[101,150143,150144],{"class":107},"            return\n",[101,150146,150147,150149,150151,150153],{"class":103,"line":1610},[101,150148,30834],{"class":160},[101,150150,150074],{"class":111},[101,150152,9465],{"class":107},[101,150154,150155],{"class":111}," money\n",[101,150157,150158],{"class":103,"line":1615},[101,150159,2387],{"emptyLinePlaceholder":27},[101,150161,150162,150164,150167],{"class":103,"line":1629},[101,150163,30790],{"class":107},[101,150165,150166],{"class":1950}," withdraw",[101,150168,150115],{"class":111},[101,150170,150171,150173,150175,150177,150179],{"class":103,"line":1634},[101,150172,2484],{"class":107},[101,150174,150122],{"class":111},[101,150176,1575],{"class":107},[101,150178,4080],{"class":160},[101,150180,3726],{"class":111},[101,150182,150183,150185,150187,150190],{"class":103,"line":1640},[101,150184,34639],{"class":160},[101,150186,112],{"class":111},[101,150188,150189],{"class":216},"\"取款金额必须大于0\"",[101,150191,118],{"class":111},[101,150193,150194],{"class":103,"line":1661},[101,150195,150144],{"class":107},[101,150197,150198,150200,150202,150204,150206],{"class":103,"line":1666},[101,150199,2484],{"class":107},[101,150201,150122],{"class":111},[101,150203,1071],{"class":107},[101,150205,38862],{"class":160},[101,150207,150208],{"class":111},".__balance:\n",[101,150210,150211,150213,150215,150218],{"class":103,"line":1680},[101,150212,34639],{"class":160},[101,150214,112],{"class":111},[101,150216,150217],{"class":216},"\"余额不足\"",[101,150219,118],{"class":111},[101,150221,150222],{"class":103,"line":1685},[101,150223,150144],{"class":107},[101,150225,150226,150228,150230,150233],{"class":103,"line":1714},[101,150227,30834],{"class":160},[101,150229,150074],{"class":111},[101,150231,150232],{"class":107},"-=",[101,150234,150155],{"class":111},[101,150236,150237],{"class":103,"line":1719},[101,150238,2387],{"emptyLinePlaceholder":27},[101,150240,150241],{"class":103,"line":1736},[101,150242,2387],{"emptyLinePlaceholder":27},[101,150244,150245,150248,150250,150253,150255,150257,150259],{"class":103,"line":1741},[101,150246,150247],{"class":111},"account ",[101,150249,157],{"class":107},[101,150251,150252],{"class":111}," Account(",[101,150254,149868],{"class":216},[101,150256,12423],{"class":111},[101,150258,6398],{"class":160},[101,150260,118],{"class":111},[101,150262,150263,150266,150268],{"class":103,"line":1746},[101,150264,150265],{"class":111},"account.deposit(",[101,150267,1709],{"class":160},[101,150269,118],{"class":111},[101,150271,150272,150275,150277],{"class":103,"line":1751},[101,150273,150274],{"class":111},"account.withdraw(",[101,150276,422],{"class":160},[101,150278,118],{"class":111},[101,150280,150281,150283],{"class":103,"line":1765},[101,150282,30404],{"class":160},[101,150284,150285],{"class":111},"(account.get_balance())\n",[10,150287,150288],{},"封装的意义是避免外部随意修改内部状态。",[43,150290,150292],{"id":150291},"_118-继承","11.8 继承",[10,150294,150295],{},"继承可以让子类复用父类的属性和方法。",[92,150297,150299],{"className":30367,"code":150298,"language":30369,"meta":20,"style":20},"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",[98,150300,150301,150310,150319,150330,150334,150338,150352,150361,150372,150376,150380,150390,150395],{"__ignoreMap":20},[101,150302,150303,150305,150308],{"class":103,"line":104},[101,150304,14682],{"class":107},[101,150306,150307],{"class":1950}," Animal",[101,150309,3726],{"class":111},[101,150311,150312,150314,150317],{"class":103,"line":21},[101,150313,30790],{"class":107},[101,150315,150316],{"class":1950}," eat",[101,150318,30796],{"class":111},[101,150320,150321,150323,150325,150328],{"class":103,"line":1166},[101,150322,32440],{"class":160},[101,150324,112],{"class":111},[101,150326,150327],{"class":216},"\"吃东西\"",[101,150329,118],{"class":111},[101,150331,150332],{"class":103,"line":1181},[101,150333,2387],{"emptyLinePlaceholder":27},[101,150335,150336],{"class":103,"line":1187},[101,150337,2387],{"emptyLinePlaceholder":27},[101,150339,150340,150342,150345,150347,150350],{"class":103,"line":1201},[101,150341,14682],{"class":107},[101,150343,150344],{"class":1950}," Dog",[101,150346,112],{"class":111},[101,150348,150349],{"class":1950},"Animal",[101,150351,30775],{"class":111},[101,150353,150354,150356,150359],{"class":103,"line":1207},[101,150355,30790],{"class":107},[101,150357,150358],{"class":1950}," bark",[101,150360,30796],{"class":111},[101,150362,150363,150365,150367,150370],{"class":103,"line":1298},[101,150364,32440],{"class":160},[101,150366,112],{"class":111},[101,150368,150369],{"class":216},"\"汪汪\"",[101,150371,118],{"class":111},[101,150373,150374],{"class":103,"line":1304},[101,150375,2387],{"emptyLinePlaceholder":27},[101,150377,150378],{"class":103,"line":1316},[101,150379,2387],{"emptyLinePlaceholder":27},[101,150381,150382,150385,150387],{"class":103,"line":1599},[101,150383,150384],{"class":111},"dog ",[101,150386,157],{"class":107},[101,150388,150389],{"class":111}," Dog()\n",[101,150391,150392],{"class":103,"line":1604},[101,150393,150394],{"class":111},"dog.eat()\n",[101,150396,150397],{"class":103,"line":1610},[101,150398,150399],{"class":111},"dog.bark()\n",[10,150401,150402],{},"子类可以扩展新方法，也可以重写父类方法。",[43,150404,150406],{"id":150405},"_119-方法重写","11.9 方法重写",[92,150408,150410],{"className":30367,"code":150409,"language":30369,"meta":20,"style":20},"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",[98,150411,150412,150420,150429,150440,150444,150448,150460,150468,150478,150482,150486,150499,150507,150518,150522,150526,150534,150544,150548,150553],{"__ignoreMap":20},[101,150413,150414,150416,150418],{"class":103,"line":104},[101,150415,14682],{"class":107},[101,150417,150307],{"class":1950},[101,150419,3726],{"class":111},[101,150421,150422,150424,150427],{"class":103,"line":21},[101,150423,30790],{"class":107},[101,150425,150426],{"class":1950}," speak",[101,150428,30796],{"class":111},[101,150430,150431,150433,150435,150438],{"class":103,"line":1166},[101,150432,32440],{"class":160},[101,150434,112],{"class":111},[101,150436,150437],{"class":216},"\"动物叫\"",[101,150439,118],{"class":111},[101,150441,150442],{"class":103,"line":1181},[101,150443,2387],{"emptyLinePlaceholder":27},[101,150445,150446],{"class":103,"line":1187},[101,150447,2387],{"emptyLinePlaceholder":27},[101,150449,150450,150452,150454,150456,150458],{"class":103,"line":1201},[101,150451,14682],{"class":107},[101,150453,150344],{"class":1950},[101,150455,112],{"class":111},[101,150457,150349],{"class":1950},[101,150459,30775],{"class":111},[101,150461,150462,150464,150466],{"class":103,"line":1207},[101,150463,30790],{"class":107},[101,150465,150426],{"class":1950},[101,150467,30796],{"class":111},[101,150469,150470,150472,150474,150476],{"class":103,"line":1298},[101,150471,32440],{"class":160},[101,150473,112],{"class":111},[101,150475,150369],{"class":216},[101,150477,118],{"class":111},[101,150479,150480],{"class":103,"line":1304},[101,150481,2387],{"emptyLinePlaceholder":27},[101,150483,150484],{"class":103,"line":1316},[101,150485,2387],{"emptyLinePlaceholder":27},[101,150487,150488,150490,150493,150495,150497],{"class":103,"line":1599},[101,150489,14682],{"class":107},[101,150491,150492],{"class":1950}," Cat",[101,150494,112],{"class":111},[101,150496,150349],{"class":1950},[101,150498,30775],{"class":111},[101,150500,150501,150503,150505],{"class":103,"line":1604},[101,150502,30790],{"class":107},[101,150504,150426],{"class":1950},[101,150506,30796],{"class":111},[101,150508,150509,150511,150513,150516],{"class":103,"line":1610},[101,150510,32440],{"class":160},[101,150512,112],{"class":111},[101,150514,150515],{"class":216},"\"喵喵\"",[101,150517,118],{"class":111},[101,150519,150520],{"class":103,"line":1615},[101,150521,2387],{"emptyLinePlaceholder":27},[101,150523,150524],{"class":103,"line":1629},[101,150525,2387],{"emptyLinePlaceholder":27},[101,150527,150528,150530,150532],{"class":103,"line":1634},[101,150529,150384],{"class":111},[101,150531,157],{"class":107},[101,150533,150389],{"class":111},[101,150535,150536,150539,150541],{"class":103,"line":1640},[101,150537,150538],{"class":111},"cat ",[101,150540,157],{"class":107},[101,150542,150543],{"class":111}," Cat()\n",[101,150545,150546],{"class":103,"line":1661},[101,150547,2387],{"emptyLinePlaceholder":27},[101,150549,150550],{"class":103,"line":1666},[101,150551,150552],{"class":111},"dog.speak()\n",[101,150554,150555],{"class":103,"line":1680},[101,150556,150557],{"class":111},"cat.speak()\n",[43,150559,150561],{"id":150560},"_1110-super","11.10 super",[10,150563,150564,150565,150568],{},"子类可以通过 ",[98,150566,150567],{},"super()"," 调用父类方法。",[92,150570,150572],{"className":30367,"code":150571,"language":30369,"meta":20,"style":20},"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",[98,150573,150574,150582,150591,150601,150605,150609,150621,150630,150641,150651,150655,150659,150675],{"__ignoreMap":20},[101,150575,150576,150578,150580],{"class":103,"line":104},[101,150577,14682],{"class":107},[101,150579,15557],{"class":1950},[101,150581,3726],{"class":111},[101,150583,150584,150586,150588],{"class":103,"line":21},[101,150585,30790],{"class":107},[101,150587,30793],{"class":160},[101,150589,150590],{"class":111},"(self, name):\n",[101,150592,150593,150595,150597,150599],{"class":103,"line":1166},[101,150594,30834],{"class":160},[101,150596,149770],{"class":111},[101,150598,157],{"class":107},[101,150600,149775],{"class":111},[101,150602,150603],{"class":103,"line":1181},[101,150604,2387],{"emptyLinePlaceholder":27},[101,150606,150607],{"class":103,"line":1187},[101,150608,2387],{"emptyLinePlaceholder":27},[101,150610,150611,150613,150615,150617,150619],{"class":103,"line":1201},[101,150612,14682],{"class":107},[101,150614,7886],{"class":1950},[101,150616,112],{"class":111},[101,150618,19034],{"class":1950},[101,150620,30775],{"class":111},[101,150622,150623,150625,150627],{"class":103,"line":1207},[101,150624,30790],{"class":107},[101,150626,30793],{"class":160},[101,150628,150629],{"class":111},"(self, name, score):\n",[101,150631,150632,150634,150636,150638],{"class":103,"line":1298},[101,150633,30806],{"class":160},[101,150635,17249],{"class":111},[101,150637,30818],{"class":160},[101,150639,150640],{"class":111},"(name)\n",[101,150642,150643,150645,150647,150649],{"class":103,"line":1304},[101,150644,30834],{"class":160},[101,150646,149794],{"class":111},[101,150648,157],{"class":107},[101,150650,1566],{"class":111},[101,150652,150653],{"class":103,"line":1316},[101,150654,2387],{"emptyLinePlaceholder":27},[101,150656,150657],{"class":103,"line":1599},[101,150658,2387],{"emptyLinePlaceholder":27},[101,150660,150661,150663,150665,150667,150669,150671,150673],{"class":103,"line":1604},[101,150662,149461],{"class":111},[101,150664,157],{"class":107},[101,150666,149865],{"class":111},[101,150668,149868],{"class":216},[101,150670,12423],{"class":111},[101,150672,1100],{"class":160},[101,150674,118],{"class":111},[101,150676,150677,150679],{"class":103,"line":1610},[101,150678,30404],{"class":160},[101,150680,150681],{"class":111},"(student.name, student.score)\n",[43,150683,150685],{"id":150684},"_1111-多态","11.11 多态",[10,150687,150688],{},"多态指不同对象响应同一个方法，表现出不同结果。",[92,150690,150692],{"className":30367,"code":150691,"language":30369,"meta":20,"style":20},"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",[98,150693,150694,150702,150710,150720,150724,150728,150736,150744,150754,150758,150762,150772,150777,150781,150785,150790],{"__ignoreMap":20},[101,150695,150696,150698,150700],{"class":103,"line":104},[101,150697,14682],{"class":107},[101,150699,150344],{"class":1950},[101,150701,3726],{"class":111},[101,150703,150704,150706,150708],{"class":103,"line":21},[101,150705,30790],{"class":107},[101,150707,150426],{"class":1950},[101,150709,30796],{"class":111},[101,150711,150712,150714,150716,150718],{"class":103,"line":1166},[101,150713,32440],{"class":160},[101,150715,112],{"class":111},[101,150717,150369],{"class":216},[101,150719,118],{"class":111},[101,150721,150722],{"class":103,"line":1181},[101,150723,2387],{"emptyLinePlaceholder":27},[101,150725,150726],{"class":103,"line":1187},[101,150727,2387],{"emptyLinePlaceholder":27},[101,150729,150730,150732,150734],{"class":103,"line":1201},[101,150731,14682],{"class":107},[101,150733,150492],{"class":1950},[101,150735,3726],{"class":111},[101,150737,150738,150740,150742],{"class":103,"line":1207},[101,150739,30790],{"class":107},[101,150741,150426],{"class":1950},[101,150743,30796],{"class":111},[101,150745,150746,150748,150750,150752],{"class":103,"line":1298},[101,150747,32440],{"class":160},[101,150749,112],{"class":111},[101,150751,150515],{"class":216},[101,150753,118],{"class":111},[101,150755,150756],{"class":103,"line":1304},[101,150757,2387],{"emptyLinePlaceholder":27},[101,150759,150760],{"class":103,"line":1316},[101,150761,2387],{"emptyLinePlaceholder":27},[101,150763,150764,150766,150769],{"class":103,"line":1599},[101,150765,31936],{"class":107},[101,150767,150768],{"class":1950}," make_sound",[101,150770,150771],{"class":111},"(animal):\n",[101,150773,150774],{"class":103,"line":1604},[101,150775,150776],{"class":111},"    animal.speak()\n",[101,150778,150779],{"class":103,"line":1610},[101,150780,2387],{"emptyLinePlaceholder":27},[101,150782,150783],{"class":103,"line":1615},[101,150784,2387],{"emptyLinePlaceholder":27},[101,150786,150787],{"class":103,"line":1629},[101,150788,150789],{"class":111},"make_sound(Dog())\n",[101,150791,150792],{"class":103,"line":1634},[101,150793,150794],{"class":111},"make_sound(Cat())\n",[10,150796,150797],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[43,150799,150801],{"id":150800},"_1112-类属性和实例属性","11.12 类属性和实例属性",[10,150803,150804],{},"实例属性属于对象：",[92,150806,150808],{"className":30367,"code":150807,"language":30369,"meta":20,"style":20},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[98,150809,150810,150818,150826],{"__ignoreMap":20},[101,150811,150812,150814,150816],{"class":103,"line":104},[101,150813,14682],{"class":107},[101,150815,7886],{"class":1950},[101,150817,3726],{"class":111},[101,150819,150820,150822,150824],{"class":103,"line":21},[101,150821,30790],{"class":107},[101,150823,30793],{"class":160},[101,150825,150590],{"class":111},[101,150827,150828,150830,150832,150834],{"class":103,"line":1166},[101,150829,30834],{"class":160},[101,150831,149770],{"class":111},[101,150833,157],{"class":107},[101,150835,149775],{"class":111},[10,150837,150838],{},"类属性属于类，所有对象共享：",[92,150840,150842],{"className":30367,"code":150841,"language":30369,"meta":20,"style":20},"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",[98,150843,150844,150852,150862,150866,150874,150884,150888,150892,150905,150919,150923,150930,150937],{"__ignoreMap":20},[101,150845,150846,150848,150850],{"class":103,"line":104},[101,150847,14682],{"class":107},[101,150849,7886],{"class":1950},[101,150851,3726],{"class":111},[101,150853,150854,150857,150859],{"class":103,"line":21},[101,150855,150856],{"class":111},"    school ",[101,150858,157],{"class":107},[101,150860,150861],{"class":216}," \"黑马学校\"\n",[101,150863,150864],{"class":103,"line":1166},[101,150865,2387],{"emptyLinePlaceholder":27},[101,150867,150868,150870,150872],{"class":103,"line":1181},[101,150869,30790],{"class":107},[101,150871,30793],{"class":160},[101,150873,150590],{"class":111},[101,150875,150876,150878,150880,150882],{"class":103,"line":1187},[101,150877,30834],{"class":160},[101,150879,149770],{"class":111},[101,150881,157],{"class":107},[101,150883,149775],{"class":111},[101,150885,150886],{"class":103,"line":1201},[101,150887,2387],{"emptyLinePlaceholder":27},[101,150889,150890],{"class":103,"line":1207},[101,150891,2387],{"emptyLinePlaceholder":27},[101,150893,150894,150897,150899,150901,150903],{"class":103,"line":1298},[101,150895,150896],{"class":111},"s1 ",[101,150898,157],{"class":107},[101,150900,149865],{"class":111},[101,150902,149868],{"class":216},[101,150904,118],{"class":111},[101,150906,150907,150910,150912,150914,150917],{"class":103,"line":1304},[101,150908,150909],{"class":111},"s2 ",[101,150911,157],{"class":107},[101,150913,149865],{"class":111},[101,150915,150916],{"class":216},"\"小红\"",[101,150918,118],{"class":111},[101,150920,150921],{"class":103,"line":1316},[101,150922,2387],{"emptyLinePlaceholder":27},[101,150924,150925,150927],{"class":103,"line":1599},[101,150926,30404],{"class":160},[101,150928,150929],{"class":111},"(s1.school)\n",[101,150931,150932,150934],{"class":103,"line":1604},[101,150933,30404],{"class":160},[101,150935,150936],{"class":111},"(s2.school)\n",[101,150938,150939,150941],{"class":103,"line":1610},[101,150940,30404],{"class":160},[101,150942,150943],{"class":111},"(Student.school)\n",[10,150945,150946],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[43,150948,150950],{"id":150949},"_1113-类方法和静态方法","11.13 类方法和静态方法",[72,150952,150954],{"id":150953},"_11131-类方法","11.13.1 类方法",[10,150956,150957,150958,150961,150962,28374],{},"类方法使用 ",[98,150959,150960],{},"@classmethod","，第一个参数通常是 ",[98,150963,150964],{},"cls",[92,150966,150968],{"className":30367,"code":150967,"language":30369,"meta":20,"style":20},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[98,150969,150970,150978,150986,150990,150998,151008,151018,151022,151026],{"__ignoreMap":20},[101,150971,150972,150974,150976],{"class":103,"line":104},[101,150973,14682],{"class":107},[101,150975,7886],{"class":1950},[101,150977,3726],{"class":111},[101,150979,150980,150982,150984],{"class":103,"line":21},[101,150981,150856],{"class":111},[101,150983,157],{"class":107},[101,150985,150861],{"class":216},[101,150987,150988],{"class":103,"line":1166},[101,150989,2387],{"emptyLinePlaceholder":27},[101,150991,150992,150995],{"class":103,"line":1181},[101,150993,150994],{"class":1950},"    @",[101,150996,150997],{"class":160},"classmethod\n",[101,150999,151000,151002,151005],{"class":103,"line":1187},[101,151001,30790],{"class":107},[101,151003,151004],{"class":1950}," get_school",[101,151006,151007],{"class":111},"(cls):\n",[101,151009,151010,151012,151015],{"class":103,"line":1201},[101,151011,14740],{"class":107},[101,151013,151014],{"class":160}," cls",[101,151016,151017],{"class":111},".school\n",[101,151019,151020],{"class":103,"line":1207},[101,151021,2387],{"emptyLinePlaceholder":27},[101,151023,151024],{"class":103,"line":1298},[101,151025,2387],{"emptyLinePlaceholder":27},[101,151027,151028,151030],{"class":103,"line":1304},[101,151029,30404],{"class":160},[101,151031,151032],{"class":111},"(Student.get_school())\n",[72,151034,151036],{"id":151035},"_11132-静态方法","11.13.2 静态方法",[10,151038,151039,151040,151043],{},"静态方法使用 ",[98,151041,151042],{},"@staticmethod","，不需要访问实例和类。",[92,151045,151047],{"className":30367,"code":151046,"language":30369,"meta":20,"style":20},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[98,151048,151049,151058,151065,151074,151085,151089,151093],{"__ignoreMap":20},[101,151050,151051,151053,151056],{"class":103,"line":104},[101,151052,14682],{"class":107},[101,151054,151055],{"class":1950}," MathUtils",[101,151057,3726],{"class":111},[101,151059,151060,151062],{"class":103,"line":21},[101,151061,150994],{"class":1950},[101,151063,151064],{"class":160},"staticmethod\n",[101,151066,151067,151069,151071],{"class":103,"line":1166},[101,151068,30790],{"class":107},[101,151070,5197],{"class":1950},[101,151072,151073],{"class":111},"(a, b):\n",[101,151075,151076,151078,151080,151082],{"class":103,"line":1181},[101,151077,14740],{"class":107},[101,151079,10857],{"class":111},[101,151081,592],{"class":107},[101,151083,151084],{"class":111}," b\n",[101,151086,151087],{"class":103,"line":1187},[101,151088,2387],{"emptyLinePlaceholder":27},[101,151090,151091],{"class":103,"line":1201},[101,151092,2387],{"emptyLinePlaceholder":27},[101,151094,151095,151097,151100,151102,151104,151106],{"class":103,"line":1207},[101,151096,30404],{"class":160},[101,151098,151099],{"class":111},"(MathUtils.add(",[101,151101,329],{"class":160},[101,151103,12423],{"class":111},[101,151105,189],{"class":160},[101,151107,30486],{"class":111},[10,151109,151110],{},"静态方法本质上是放在类命名空间里的普通函数。",[43,151112,151114],{"id":151113},"_1114-dataclass","11.14 dataclass",[10,151116,151117,151120],{},[98,151118,151119],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[92,151122,151124],{"className":30367,"code":151123,"language":30369,"meta":20,"style":20},"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",[98,151125,151126,151138,151142,151146,151151,151159,151167,151175,151183,151187,151191,151211],{"__ignoreMap":20},[101,151127,151128,151130,151133,151135],{"class":103,"line":104},[101,151129,30726],{"class":107},[101,151131,151132],{"class":111}," dataclasses ",[101,151134,30381],{"class":107},[101,151136,151137],{"class":111}," dataclass\n",[101,151139,151140],{"class":103,"line":21},[101,151141,2387],{"emptyLinePlaceholder":27},[101,151143,151144],{"class":103,"line":1166},[101,151145,2387],{"emptyLinePlaceholder":27},[101,151147,151148],{"class":103,"line":1181},[101,151149,151150],{"class":1950},"@dataclass\n",[101,151152,151153,151155,151157],{"class":103,"line":1187},[101,151154,14682],{"class":107},[101,151156,7886],{"class":1950},[101,151158,3726],{"class":111},[101,151160,151161,151164],{"class":103,"line":1201},[101,151162,151163],{"class":111},"    name: ",[101,151165,151166],{"class":160},"str\n",[101,151168,151169,151172],{"class":103,"line":1207},[101,151170,151171],{"class":111},"    age: ",[101,151173,151174],{"class":160},"int\n",[101,151176,151177,151180],{"class":103,"line":1298},[101,151178,151179],{"class":111},"    score: ",[101,151181,151182],{"class":160},"float\n",[101,151184,151185],{"class":103,"line":1304},[101,151186,2387],{"emptyLinePlaceholder":27},[101,151188,151189],{"class":103,"line":1316},[101,151190,2387],{"emptyLinePlaceholder":27},[101,151192,151193,151195,151197,151199,151201,151203,151205,151207,151209],{"class":103,"line":1599},[101,151194,149461],{"class":111},[101,151196,157],{"class":107},[101,151198,149865],{"class":111},[101,151200,149868],{"class":216},[101,151202,12423],{"class":111},[101,151204,761],{"class":160},[101,151206,12423],{"class":111},[101,151208,1100],{"class":160},[101,151210,118],{"class":111},[101,151212,151213,151215],{"class":103,"line":1604},[101,151214,30404],{"class":160},[101,151216,150022],{"class":111},[10,151218,151219,151220,324,151222,151225],{},"它会自动生成 ",[98,151221,30818],{},[98,151223,151224],{},"__repr__"," 等方法。适合数据模型类。",[43,151227,151229],{"id":151228},"_1115-小案例学生类","11.15 小案例：学生类",[92,151231,151233],{"className":30367,"code":151232,"language":30369,"meta":20,"style":20},"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",[98,151234,151235,151243,151252,151264,151274,151284,151294,151298,151307,151320,151324,151333,151339,151351,151363,151375,151387,151391,151395,151401,151411,151420,151430,151438,151446,151455,151459,151463,151471,151507,151511,151515,151540,151547],{"__ignoreMap":20},[101,151236,151237,151239,151241],{"class":103,"line":104},[101,151238,14682],{"class":107},[101,151240,7886],{"class":1950},[101,151242,3726],{"class":111},[101,151244,151245,151247,151249],{"class":103,"line":21},[101,151246,30790],{"class":107},[101,151248,30793],{"class":160},[101,151250,151251],{"class":111},"(self, student_id, name, age, score):\n",[101,151253,151254,151256,151259,151261],{"class":103,"line":1166},[101,151255,30834],{"class":160},[101,151257,151258],{"class":111},".student_id ",[101,151260,157],{"class":107},[101,151262,151263],{"class":111}," student_id\n",[101,151265,151266,151268,151270,151272],{"class":103,"line":1181},[101,151267,30834],{"class":160},[101,151269,149770],{"class":111},[101,151271,157],{"class":107},[101,151273,149775],{"class":111},[101,151275,151276,151278,151280,151282],{"class":103,"line":1187},[101,151277,30834],{"class":160},[101,151279,149782],{"class":111},[101,151281,157],{"class":107},[101,151283,149787],{"class":111},[101,151285,151286,151288,151290,151292],{"class":103,"line":1201},[101,151287,30834],{"class":160},[101,151289,149794],{"class":111},[101,151291,157],{"class":107},[101,151293,1566],{"class":111},[101,151295,151296],{"class":103,"line":1207},[101,151297,2387],{"emptyLinePlaceholder":27},[101,151299,151300,151302,151305],{"class":103,"line":1298},[101,151301,30790],{"class":107},[101,151303,151304],{"class":1950}," is_passed",[101,151306,30796],{"class":111},[101,151308,151309,151311,151313,151315,151317],{"class":103,"line":1304},[101,151310,14740],{"class":107},[101,151312,38862],{"class":160},[101,151314,149794],{"class":111},[101,151316,1697],{"class":107},[101,151318,151319],{"class":160}," 60\n",[101,151321,151322],{"class":103,"line":1316},[101,151323,2387],{"emptyLinePlaceholder":27},[101,151325,151326,151328,151331],{"class":103,"line":1599},[101,151327,30790],{"class":107},[101,151329,151330],{"class":1950}," to_dict",[101,151332,30796],{"class":111},[101,151334,151335,151337],{"class":103,"line":1604},[101,151336,14740],{"class":107},[101,151338,15560],{"class":111},[101,151340,151341,151344,151346,151348],{"class":103,"line":1610},[101,151342,151343],{"class":216},"            \"student_id\"",[101,151345,51426],{"class":111},[101,151347,30812],{"class":160},[101,151349,151350],{"class":111},".student_id,\n",[101,151352,151353,151356,151358,151360],{"class":103,"line":1615},[101,151354,151355],{"class":216},"            \"name\"",[101,151357,51426],{"class":111},[101,151359,30812],{"class":160},[101,151361,151362],{"class":111},".name,\n",[101,151364,151365,151368,151370,151372],{"class":103,"line":1629},[101,151366,151367],{"class":216},"            \"age\"",[101,151369,51426],{"class":111},[101,151371,30812],{"class":160},[101,151373,151374],{"class":111},".age,\n",[101,151376,151377,151380,151382,151384],{"class":103,"line":1634},[101,151378,151379],{"class":216},"            \"score\"",[101,151381,51426],{"class":111},[101,151383,30812],{"class":160},[101,151385,151386],{"class":111},".score,\n",[101,151388,151389],{"class":103,"line":1640},[101,151390,2516],{"class":111},[101,151392,151393],{"class":103,"line":1661},[101,151394,2387],{"emptyLinePlaceholder":27},[101,151396,151397,151399],{"class":103,"line":1666},[101,151398,150994],{"class":1950},[101,151400,150997],{"class":160},[101,151402,151403,151405,151408],{"class":103,"line":1680},[101,151404,30790],{"class":107},[101,151406,151407],{"class":1950}," from_dict",[101,151409,151410],{"class":111},"(cls, data):\n",[101,151412,151413,151415,151417],{"class":103,"line":1685},[101,151414,14740],{"class":107},[101,151416,151014],{"class":160},[101,151418,151419],{"class":111},"(\n",[101,151421,151422,151425,151428],{"class":103,"line":1714},[101,151423,151424],{"class":111},"            data[",[101,151426,151427],{"class":216},"\"student_id\"",[101,151429,87825],{"class":111},[101,151431,151432,151434,151436],{"class":103,"line":1719},[101,151433,151424],{"class":111},[101,151435,62668],{"class":216},[101,151437,87825],{"class":111},[101,151439,151440,151442,151444],{"class":103,"line":1736},[101,151441,151424],{"class":111},[101,151443,69113],{"class":216},[101,151445,87825],{"class":111},[101,151447,151448,151450,151453],{"class":103,"line":1741},[101,151449,151424],{"class":111},[101,151451,151452],{"class":216},"\"score\"",[101,151454,87825],{"class":111},[101,151456,151457],{"class":103,"line":1746},[101,151458,38115],{"class":111},[101,151460,151461],{"class":103,"line":1751},[101,151462,2387],{"emptyLinePlaceholder":27},[101,151464,151465,151467,151469],{"class":103,"line":1765},[101,151466,30790],{"class":107},[101,151468,149961],{"class":160},[101,151470,30796],{"class":111},[101,151472,151473,151475,151477,151479,151481,151484,151486,151489,151491,151493,151495,151497,151499,151501,151503,151505],{"class":103,"line":1770},[101,151474,14740],{"class":107},[101,151476,149970],{"class":107},[101,151478,362],{"class":216},[101,151480,149432],{"class":160},[101,151482,151483],{"class":111},".student_id",[101,151485,1057],{"class":160},[101,151487,151488],{"class":160}," {self",[101,151490,80290],{"class":111},[101,151492,1057],{"class":160},[101,151494,151488],{"class":160},[101,151496,80302],{"class":111},[101,151498,1057],{"class":160},[101,151500,151488],{"class":160},[101,151502,149842],{"class":111},[101,151504,1057],{"class":160},[101,151506,25122],{"class":216},[101,151508,151509],{"class":103,"line":2564},[101,151510,2387],{"emptyLinePlaceholder":27},[101,151512,151513],{"class":103,"line":2578},[101,151514,2387],{"emptyLinePlaceholder":27},[101,151516,151517,151519,151521,151523,151526,151528,151530,151532,151534,151536,151538],{"class":103,"line":2586},[101,151518,149461],{"class":111},[101,151520,157],{"class":107},[101,151522,149865],{"class":111},[101,151524,151525],{"class":216},"\"001\"",[101,151527,12423],{"class":111},[101,151529,149868],{"class":216},[101,151531,12423],{"class":111},[101,151533,761],{"class":160},[101,151535,12423],{"class":111},[101,151537,1100],{"class":160},[101,151539,118],{"class":111},[101,151541,151542,151544],{"class":103,"line":2591},[101,151543,30404],{"class":160},[101,151545,151546],{"class":111},"(student.is_passed())\n",[101,151548,151549,151551],{"class":103,"line":2597},[101,151550,30404],{"class":160},[101,151552,151553],{"class":111},"(student.to_dict())\n",[10,151555,151556,100998,151559,151562],{},[98,151557,151558],{},"to_dict()",[98,151560,151561],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[43,151564,151566],{"id":151565},"_1116-易错点","11.16 易错点",[55,151568,151569,151575,151581,151586,151589,151592],{},[58,151570,151571,151572,28374],{},"类名推荐使用大驼峰，如 ",[98,151573,151574],{},"StudentManager",[58,151576,151577,151578,151580],{},"方法第一个参数必须写 ",[98,151579,30812],{},"，调用时不用传。",[58,151582,151583,151585],{},[98,151584,30818],{}," 不是普通方法，它在创建对象时自动执行。",[58,151587,151588],{},"私有属性不是绝对安全，只是约定和名称改写。",[58,151590,151591],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[58,151593,151594],{},"类中方法太多时，说明职责可能过重。",[43,151596,151598],{"id":151597},"_1117-本章练习","11.17 本章练习",[55,151600,151601,151607,151613,151618,151631],{},[58,151602,151603,151604,151606],{},"定义 ",[98,151605,149548],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[58,151608,151603,151609,151612],{},[98,151610,151611],{},"Account"," 类，实现存款、取款、查询余额。",[58,151614,151603,151615,151617],{},[98,151616,17214],{}," 类，计算圆的周长和面积。",[58,151619,151603,151620,324,151623,151626,151627,151630],{},[98,151621,151622],{},"Dog",[98,151624,151625],{},"Cat"," 类，并用同一个函数调用它们的 ",[98,151628,151629],{},"speak()"," 方法。",[58,151632,104346,151633,151635,151636,28374],{},[98,151634,151119],{}," 定义一个商品类 ",[98,151637,151638],{},"Product",[5114,151640,151641],{},"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":20,"searchDepth":21,"depth":21,"links":151643},[151644,151645,151646,151647,151648,151649,151651,151652,151653,151654,151655,151656,151657,151661,151662,151663,151664],{"id":149312,"depth":21,"text":149313},{"id":149495,"depth":21,"text":149496},{"id":149559,"depth":21,"text":149560},{"id":149636,"depth":21,"text":149637},{"id":149735,"depth":21,"text":149736},{"id":149899,"depth":21,"text":151650},"11.6 str",{"id":150025,"depth":21,"text":150026},{"id":150291,"depth":21,"text":150292},{"id":150405,"depth":21,"text":150406},{"id":150560,"depth":21,"text":150561},{"id":150684,"depth":21,"text":150685},{"id":150800,"depth":21,"text":150801},{"id":150949,"depth":21,"text":150950,"children":151658},[151659,151660],{"id":150953,"depth":1166,"text":150954},{"id":151035,"depth":1166,"text":151036},{"id":151113,"depth":21,"text":151114},{"id":151228,"depth":21,"text":151229},{"id":151565,"depth":21,"text":151566},{"id":151597,"depth":21,"text":151598},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149304,"description":23365},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151671,"title":151672,"body":151673,"description":23365,"extension":24,"meta":154986,"navigation":27,"path":154987,"seo":154988,"stem":154989,"__hash__":154990},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151674,"toc":154962},[151675,151678,151682,151685,151688,151717,151720,151728,151732,151736,151739,151762,151765,151771,151775,153221,153224,153245,153249,153252,153264,153267,153451,153454,153580,153583,153587,153591,153727,153731,153817,153821,153903,153907,153944,153948,154137,154141,154144,154374,154378,154381,154562,154565,154569,154572,154578,154581,154607,154611,154614,154628,154631,154656,154659,154673,154676,154693,154696,154713,154716,154733,154737,154763,154767,154790,154794,154797,154799,154805,154807,154828,154831,154837,154843,154847,154850,154926,154929,154933,154959],[39,151676,151672],{"id":151677},"_12-综合案例与复习路线",[43,151679,151681],{"id":151680},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[10,151683,151684],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[10,151686,151687],{},"一个合格的入门综合项目最好覆盖：",[55,151689,151690,151693,151696,151699,151702,151705,151708,151711,151714],{},[58,151691,151692],{},"输入输出。",[58,151694,151695],{},"判断和循环。",[58,151697,151698],{},"函数拆分。",[58,151700,151701],{},"列表、字典等容器。",[58,151703,151704],{},"文件持久化。",[58,151706,151707],{},"异常处理。",[58,151709,151710],{},"模块拆分。",[58,151712,151713],{},"可选：面向对象。",[58,151715,151716],{},"可选：数据可视化。",[10,151718,151719],{},"本章整理两个方向：",[55,151721,151722,151725],{},[58,151723,151724],{},"学生管理系统。",[58,151726,151727],{},"销售数据统计和可视化。",[43,151729,151731],{"id":151730},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[72,151733,151735],{"id":151734},"_1221-需求","12.2.1 需求",[10,151737,151738],{},"实现一个命令行学生管理系统：",[55,151740,151741,151744,151747,151750,151753,151756,151759],{},[58,151742,151743],{},"添加学生。",[58,151745,151746],{},"删除学生。",[58,151748,151749],{},"修改学生。",[58,151751,151752],{},"查询学生。",[58,151754,151755],{},"显示所有学生。",[58,151757,151758],{},"保存到 JSON 文件。",[58,151760,151761],{},"程序启动时自动读取 JSON 文件。",[10,151763,151764],{},"学生字段：",[92,151766,151769],{"className":151767,"code":151768,"language":5175,"meta":20},[5173],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[98,151770,151768],{"__ignoreMap":20},[43,151772,151774],{"id":151773},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[92,151776,151778],{"className":30367,"code":151777,"language":30369,"meta":20,"style":20},"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",[98,151779,151780,151786,151796,151800,151814,151818,151822,151831,151843,151849,151853,151859,151890,151900,151907,151918,151924,151928,151932,151942,151973,151999,152003,152007,152016,152027,152038,152049,152060,152071,152082,152093,152097,152101,152111,152123,152139,152146,152153,152157,152161,152171,152179,152186,152199,152209,152220,152224,152228,152237,152245,152251,152263,152271,152282,152286,152290,152299,152315,152319,152326,152337,152342,152346,152362,152377,152392,152396,152401,152409,152417,152425,152433,152437,152442,152453,152457,152461,152470,152485,152495,152499,152511,152522,152526,152530,152535,152539,152550,152554,152558,152567,152582,152590,152594,152606,152616,152620,152624,152639,152652,152665,152669,152682,152694,152706,152710,152714,152725,152729,152733,152742,152757,152765,152769,152781,152791,152795,152799,152804,152808,152812,152822,152828,152850,152869,152888,152907,152912,152916,152920,152929,152937,152948,152952,152956,152982,152992,152997,153001,153005,153013,153023,153027,153035,153040,153056,153060,153074,153079,153093,153098,153111,153116,153129,153134,153147,153152,153165,153176,153180,153186,153197,153201,153205,153217],{"__ignoreMap":20},[101,151781,151782,151784],{"class":103,"line":104},[101,151783,30381],{"class":107},[101,151785,147071],{"class":111},[101,151787,151788,151790,151792,151794],{"class":103,"line":21},[101,151789,30726],{"class":107},[101,151791,108291],{"class":111},[101,151793,30381],{"class":107},[101,151795,108296],{"class":111},[101,151797,151798],{"class":103,"line":1166},[101,151799,2387],{"emptyLinePlaceholder":27},[101,151801,151802,151805,151807,151809,151812],{"class":103,"line":1181},[101,151803,151804],{"class":160},"DATA_FILE",[101,151806,13552],{"class":107},[101,151808,108525],{"class":111},[101,151810,151811],{"class":216},"\"students.json\"",[101,151813,118],{"class":111},[101,151815,151816],{"class":103,"line":1187},[101,151817,2387],{"emptyLinePlaceholder":27},[101,151819,151820],{"class":103,"line":1201},[101,151821,2387],{"emptyLinePlaceholder":27},[101,151823,151824,151826,151829],{"class":103,"line":1207},[101,151825,31936],{"class":107},[101,151827,151828],{"class":1950}," load_students",[101,151830,31942],{"class":111},[101,151832,151833,151835,151837,151840],{"class":103,"line":1298},[101,151834,3088],{"class":107},[101,151836,38919],{"class":107},[101,151838,151839],{"class":160}," DATA_FILE",[101,151841,151842],{"class":111},".exists():\n",[101,151844,151845,151847],{"class":103,"line":1304},[101,151846,14740],{"class":107},[101,151848,51827],{"class":111},[101,151850,151851],{"class":103,"line":1316},[101,151852,2387],{"emptyLinePlaceholder":27},[101,151854,151855,151857],{"class":103,"line":1599},[101,151856,125764],{"class":107},[101,151858,3726],{"class":111},[101,151860,151861,151864,151866,151868,151870,151872,151874,151876,151878,151880,151882,151884,151886,151888],{"class":103,"line":1604},[101,151862,151863],{"class":107},"        with",[101,151865,146771],{"class":160},[101,151867,112],{"class":111},[101,151869,151804],{"class":160},[101,151871,12423],{"class":111},[101,151873,146781],{"class":216},[101,151875,12423],{"class":111},[101,151877,146786],{"class":5204},[101,151879,157],{"class":107},[101,151881,146791],{"class":216},[101,151883,13702],{"class":111},[101,151885,31372],{"class":107},[101,151887,148133],{"class":5204},[101,151889,3726],{"class":111},[101,151891,151892,151894,151896,151898],{"class":103,"line":1610},[101,151893,15720],{"class":107},[101,151895,148144],{"class":111},[101,151897,45343],{"class":5204},[101,151899,118],{"class":111},[101,151901,151902,151904],{"class":103,"line":1615},[101,151903,125792],{"class":107},[101,151905,151906],{"class":111}," json.JSONDecodeError:\n",[101,151908,151909,151911,151913,151916],{"class":103,"line":1629},[101,151910,32440],{"class":160},[101,151912,112],{"class":111},[101,151914,151915],{"class":216},"\"数据文件格式错误，已使用空数据启动\"",[101,151917,118],{"class":111},[101,151919,151920,151922],{"class":103,"line":1634},[101,151921,14740],{"class":107},[101,151923,51827],{"class":111},[101,151925,151926],{"class":103,"line":1640},[101,151927,2387],{"emptyLinePlaceholder":27},[101,151929,151930],{"class":103,"line":1661},[101,151931,2387],{"emptyLinePlaceholder":27},[101,151933,151934,151936,151939],{"class":103,"line":1666},[101,151935,31936],{"class":107},[101,151937,151938],{"class":1950}," save_students",[101,151940,151941],{"class":111},"(students):\n",[101,151943,151944,151946,151948,151950,151952,151954,151957,151959,151961,151963,151965,151967,151969,151971],{"class":103,"line":1680},[101,151945,34167],{"class":107},[101,151947,146771],{"class":160},[101,151949,112],{"class":111},[101,151951,151804],{"class":160},[101,151953,12423],{"class":111},[101,151955,151956],{"class":216},"\"w\"",[101,151958,12423],{"class":111},[101,151960,146786],{"class":5204},[101,151962,157],{"class":107},[101,151964,146791],{"class":216},[101,151966,13702],{"class":111},[101,151968,31372],{"class":107},[101,151970,148133],{"class":5204},[101,151972,3726],{"class":111},[101,151974,151975,151978,151980,151982,151984,151986,151988,151990,151993,151995,151997],{"class":103,"line":1685},[101,151976,151977],{"class":111},"        json.dump(students, ",[101,151979,45343],{"class":5204},[101,151981,12423],{"class":111},[101,151983,147117],{"class":5204},[101,151985,157],{"class":107},[101,151987,33976],{"class":160},[101,151989,12423],{"class":111},[101,151991,151992],{"class":5204},"indent",[101,151994,157],{"class":107},[101,151996,189],{"class":160},[101,151998,118],{"class":111},[101,152000,152001],{"class":103,"line":1714},[101,152002,2387],{"emptyLinePlaceholder":27},[101,152004,152005],{"class":103,"line":1719},[101,152006,2387],{"emptyLinePlaceholder":27},[101,152008,152009,152011,152014],{"class":103,"line":1736},[101,152010,31936],{"class":107},[101,152012,152013],{"class":1950}," show_menu",[101,152015,31942],{"class":111},[101,152017,152018,152020,152022,152025],{"class":103,"line":1741},[101,152019,31288],{"class":160},[101,152021,112],{"class":111},[101,152023,152024],{"class":216},"\"====== 学生管理系统 ======\"",[101,152026,118],{"class":111},[101,152028,152029,152031,152033,152036],{"class":103,"line":1746},[101,152030,31288],{"class":160},[101,152032,112],{"class":111},[101,152034,152035],{"class":216},"\"1. 添加学生\"",[101,152037,118],{"class":111},[101,152039,152040,152042,152044,152047],{"class":103,"line":1751},[101,152041,31288],{"class":160},[101,152043,112],{"class":111},[101,152045,152046],{"class":216},"\"2. 删除学生\"",[101,152048,118],{"class":111},[101,152050,152051,152053,152055,152058],{"class":103,"line":1765},[101,152052,31288],{"class":160},[101,152054,112],{"class":111},[101,152056,152057],{"class":216},"\"3. 修改学生\"",[101,152059,118],{"class":111},[101,152061,152062,152064,152066,152069],{"class":103,"line":1770},[101,152063,31288],{"class":160},[101,152065,112],{"class":111},[101,152067,152068],{"class":216},"\"4. 查询学生\"",[101,152070,118],{"class":111},[101,152072,152073,152075,152077,152080],{"class":103,"line":2564},[101,152074,31288],{"class":160},[101,152076,112],{"class":111},[101,152078,152079],{"class":216},"\"5. 显示所有学生\"",[101,152081,118],{"class":111},[101,152083,152084,152086,152088,152091],{"class":103,"line":2578},[101,152085,31288],{"class":160},[101,152087,112],{"class":111},[101,152089,152090],{"class":216},"\"0. 退出系统\"",[101,152092,118],{"class":111},[101,152094,152095],{"class":103,"line":2586},[101,152096,2387],{"emptyLinePlaceholder":27},[101,152098,152099],{"class":103,"line":2591},[101,152100,2387],{"emptyLinePlaceholder":27},[101,152102,152103,152105,152108],{"class":103,"line":2597},[101,152104,31936],{"class":107},[101,152106,152107],{"class":1950}," find_student",[101,152109,152110],{"class":111},"(students, student_id):\n",[101,152112,152113,152115,152118,152120],{"class":103,"line":2603},[101,152114,3188],{"class":107},[101,152116,152117],{"class":111}," student ",[101,152119,26032],{"class":107},[101,152121,152122],{"class":111}," students:\n",[101,152124,152125,152127,152130,152132,152134,152136],{"class":103,"line":2608},[101,152126,2484],{"class":107},[101,152128,152129],{"class":111}," student[",[101,152131,151427],{"class":216},[101,152133,4430],{"class":111},[101,152135,2936],{"class":107},[101,152137,152138],{"class":111}," student_id:\n",[101,152140,152141,152143],{"class":103,"line":7936},[101,152142,15720],{"class":107},[101,152144,152145],{"class":111}," student\n",[101,152147,152148,152150],{"class":103,"line":7960},[101,152149,4077],{"class":107},[101,152151,152152],{"class":160}," None\n",[101,152154,152155],{"class":103,"line":7965},[101,152156,2387],{"emptyLinePlaceholder":27},[101,152158,152159],{"class":103,"line":7971},[101,152160,2387],{"emptyLinePlaceholder":27},[101,152162,152163,152165,152168],{"class":103,"line":7998},[101,152164,31936],{"class":107},[101,152166,152167],{"class":1950}," input_int",[101,152169,152170],{"class":111},"(prompt):\n",[101,152172,152173,152175,152177],{"class":103,"line":8003},[101,152174,2238],{"class":107},[101,152176,95272],{"class":160},[101,152178,3726],{"class":111},[101,152180,152181,152184],{"class":103,"line":8009},[101,152182,152183],{"class":107},"        try",[101,152185,3726],{"class":111},[101,152187,152188,152190,152192,152194,152196],{"class":103,"line":8021},[101,152189,15720],{"class":107},[101,152191,2369],{"class":160},[101,152193,112],{"class":111},[101,152195,53810],{"class":160},[101,152197,152198],{"class":111},"(prompt))\n",[101,152200,152201,152204,152207],{"class":103,"line":8033},[101,152202,152203],{"class":107},"        except",[101,152205,152206],{"class":160}," ValueError",[101,152208,3726],{"class":111},[101,152210,152211,152213,152215,152218],{"class":103,"line":8045},[101,152212,34639],{"class":160},[101,152214,112],{"class":111},[101,152216,152217],{"class":216},"\"请输入整数\"",[101,152219,118],{"class":111},[101,152221,152222],{"class":103,"line":9704},[101,152223,2387],{"emptyLinePlaceholder":27},[101,152225,152226],{"class":103,"line":9729},[101,152227,2387],{"emptyLinePlaceholder":27},[101,152229,152230,152232,152235],{"class":103,"line":9752},[101,152231,31936],{"class":107},[101,152233,152234],{"class":1950}," input_float",[101,152236,152170],{"class":111},[101,152238,152239,152241,152243],{"class":103,"line":9776},[101,152240,2238],{"class":107},[101,152242,95272],{"class":160},[101,152244,3726],{"class":111},[101,152246,152247,152249],{"class":103,"line":9781},[101,152248,152183],{"class":107},[101,152250,3726],{"class":111},[101,152252,152253,152255,152257,152259,152261],{"class":103,"line":9786},[101,152254,15720],{"class":107},[101,152256,109777],{"class":160},[101,152258,112],{"class":111},[101,152260,53810],{"class":160},[101,152262,152198],{"class":111},[101,152264,152265,152267,152269],{"class":103,"line":9791},[101,152266,152203],{"class":107},[101,152268,152206],{"class":160},[101,152270,3726],{"class":111},[101,152272,152273,152275,152277,152280],{"class":103,"line":9800},[101,152274,34639],{"class":160},[101,152276,112],{"class":111},[101,152278,152279],{"class":216},"\"请输入数字\"",[101,152281,118],{"class":111},[101,152283,152284],{"class":103,"line":9805},[101,152285,2387],{"emptyLinePlaceholder":27},[101,152287,152288],{"class":103,"line":9811},[101,152289,2387],{"emptyLinePlaceholder":27},[101,152291,152292,152294,152297],{"class":103,"line":9832},[101,152293,31936],{"class":107},[101,152295,152296],{"class":1950}," add_student",[101,152298,151941],{"class":111},[101,152300,152301,152304,152306,152308,152310,152313],{"class":103,"line":9838},[101,152302,152303],{"class":111},"    student_id ",[101,152305,157],{"class":107},[101,152307,60594],{"class":160},[101,152309,112],{"class":111},[101,152311,152312],{"class":216},"\"请输入学号:\"",[101,152314,118],{"class":111},[101,152316,152317],{"class":103,"line":9852},[101,152318,2387],{"emptyLinePlaceholder":27},[101,152320,152321,152323],{"class":103,"line":9858},[101,152322,3088],{"class":107},[101,152324,152325],{"class":111}," find_student(students, student_id):\n",[101,152327,152328,152330,152332,152335],{"class":103,"line":9885},[101,152329,32440],{"class":160},[101,152331,112],{"class":111},[101,152333,152334],{"class":216},"\"学号已存在\"",[101,152336,118],{"class":111},[101,152338,152339],{"class":103,"line":9894},[101,152340,152341],{"class":107},"        return\n",[101,152343,152344],{"class":103,"line":9900},[101,152345,2387],{"emptyLinePlaceholder":27},[101,152347,152348,152351,152353,152355,152357,152360],{"class":103,"line":9908},[101,152349,152350],{"class":111},"    name ",[101,152352,157],{"class":107},[101,152354,60594],{"class":160},[101,152356,112],{"class":111},[101,152358,152359],{"class":216},"\"请输入姓名:\"",[101,152361,118],{"class":111},[101,152363,152364,152367,152369,152372,152375],{"class":103,"line":9913},[101,152365,152366],{"class":111},"    age ",[101,152368,157],{"class":107},[101,152370,152371],{"class":111}," input_int(",[101,152373,152374],{"class":216},"\"请输入年龄:\"",[101,152376,118],{"class":111},[101,152378,152379,152382,152384,152387,152390],{"class":103,"line":16592},[101,152380,152381],{"class":111},"    score ",[101,152383,157],{"class":107},[101,152385,152386],{"class":111}," input_float(",[101,152388,152389],{"class":216},"\"请输入成绩:\"",[101,152391,118],{"class":111},[101,152393,152394],{"class":103,"line":16598},[101,152395,2387],{"emptyLinePlaceholder":27},[101,152397,152398],{"class":103,"line":16621},[101,152399,152400],{"class":111},"    students.append({\n",[101,152402,152403,152406],{"class":103,"line":16627},[101,152404,152405],{"class":216},"        \"student_id\"",[101,152407,152408],{"class":111},": student_id,\n",[101,152410,152411,152414],{"class":103,"line":16650},[101,152412,152413],{"class":216},"        \"name\"",[101,152415,152416],{"class":111},": name,\n",[101,152418,152419,152422],{"class":103,"line":16664},[101,152420,152421],{"class":216},"        \"age\"",[101,152423,152424],{"class":111},": age,\n",[101,152426,152427,152430],{"class":103,"line":16684},[101,152428,152429],{"class":216},"        \"score\"",[101,152431,152432],{"class":111},": score,\n",[101,152434,152435],{"class":103,"line":16690},[101,152436,33450],{"class":111},[101,152438,152439],{"class":103,"line":16701},[101,152440,152441],{"class":111},"    save_students(students)\n",[101,152443,152444,152446,152448,152451],{"class":103,"line":16724},[101,152445,31288],{"class":160},[101,152447,112],{"class":111},[101,152449,152450],{"class":216},"\"添加成功\"",[101,152452,118],{"class":111},[101,152454,152455],{"class":103,"line":16746},[101,152456,2387],{"emptyLinePlaceholder":27},[101,152458,152459],{"class":103,"line":16751},[101,152460,2387],{"emptyLinePlaceholder":27},[101,152462,152463,152465,152468],{"class":103,"line":16757},[101,152464,31936],{"class":107},[101,152466,152467],{"class":1950}," delete_student",[101,152469,151941],{"class":111},[101,152471,152472,152474,152476,152478,152480,152483],{"class":103,"line":16771},[101,152473,152303],{"class":111},[101,152475,157],{"class":107},[101,152477,60594],{"class":160},[101,152479,112],{"class":111},[101,152481,152482],{"class":216},"\"请输入要删除的学号:\"",[101,152484,118],{"class":111},[101,152486,152487,152490,152492],{"class":103,"line":16784},[101,152488,152489],{"class":111},"    student ",[101,152491,157],{"class":107},[101,152493,152494],{"class":111}," find_student(students, student_id)\n",[101,152496,152497],{"class":103,"line":16789},[101,152498,2387],{"emptyLinePlaceholder":27},[101,152500,152501,152503,152505,152507,152509],{"class":103,"line":16803},[101,152502,3088],{"class":107},[101,152504,152117],{"class":111},[101,152506,38916],{"class":107},[101,152508,38922],{"class":160},[101,152510,3726],{"class":111},[101,152512,152513,152515,152517,152520],{"class":103,"line":16808},[101,152514,32440],{"class":160},[101,152516,112],{"class":111},[101,152518,152519],{"class":216},"\"学生不存在\"",[101,152521,118],{"class":111},[101,152523,152524],{"class":103,"line":16814},[101,152525,152341],{"class":107},[101,152527,152528],{"class":103,"line":16819},[101,152529,2387],{"emptyLinePlaceholder":27},[101,152531,152532],{"class":103,"line":16833},[101,152533,152534],{"class":111},"    students.remove(student)\n",[101,152536,152537],{"class":103,"line":16838},[101,152538,152441],{"class":111},[101,152540,152541,152543,152545,152548],{"class":103,"line":16843},[101,152542,31288],{"class":160},[101,152544,112],{"class":111},[101,152546,152547],{"class":216},"\"删除成功\"",[101,152549,118],{"class":111},[101,152551,152552],{"class":103,"line":16857},[101,152553,2387],{"emptyLinePlaceholder":27},[101,152555,152556],{"class":103,"line":16869},[101,152557,2387],{"emptyLinePlaceholder":27},[101,152559,152560,152562,152565],{"class":103,"line":16874},[101,152561,31936],{"class":107},[101,152563,152564],{"class":1950}," update_student",[101,152566,151941],{"class":111},[101,152568,152569,152571,152573,152575,152577,152580],{"class":103,"line":16887},[101,152570,152303],{"class":111},[101,152572,157],{"class":107},[101,152574,60594],{"class":160},[101,152576,112],{"class":111},[101,152578,152579],{"class":216},"\"请输入要修改的学号:\"",[101,152581,118],{"class":111},[101,152583,152584,152586,152588],{"class":103,"line":16892},[101,152585,152489],{"class":111},[101,152587,157],{"class":107},[101,152589,152494],{"class":111},[101,152591,152592],{"class":103,"line":16897},[101,152593,2387],{"emptyLinePlaceholder":27},[101,152595,152596,152598,152600,152602,152604],{"class":103,"line":16902},[101,152597,3088],{"class":107},[101,152599,152117],{"class":111},[101,152601,38916],{"class":107},[101,152603,38922],{"class":160},[101,152605,3726],{"class":111},[101,152607,152608,152610,152612,152614],{"class":103,"line":16915},[101,152609,32440],{"class":160},[101,152611,112],{"class":111},[101,152613,152519],{"class":216},[101,152615,118],{"class":111},[101,152617,152618],{"class":103,"line":16920},[101,152619,152341],{"class":107},[101,152621,152622],{"class":103,"line":32622},[101,152623,2387],{"emptyLinePlaceholder":27},[101,152625,152626,152628,152630,152632,152634,152637],{"class":103,"line":32628},[101,152627,152350],{"class":111},[101,152629,157],{"class":107},[101,152631,60594],{"class":160},[101,152633,112],{"class":111},[101,152635,152636],{"class":216},"\"请输入新姓名:\"",[101,152638,118],{"class":111},[101,152640,152641,152643,152645,152647,152650],{"class":103,"line":32634},[101,152642,152366],{"class":111},[101,152644,157],{"class":107},[101,152646,152371],{"class":111},[101,152648,152649],{"class":216},"\"请输入新年龄:\"",[101,152651,118],{"class":111},[101,152653,152654,152656,152658,152660,152663],{"class":103,"line":32640},[101,152655,152381],{"class":111},[101,152657,157],{"class":107},[101,152659,152386],{"class":111},[101,152661,152662],{"class":216},"\"请输入新成绩:\"",[101,152664,118],{"class":111},[101,152666,152667],{"class":103,"line":32646},[101,152668,2387],{"emptyLinePlaceholder":27},[101,152670,152671,152674,152676,152678,152680],{"class":103,"line":32657},[101,152672,152673],{"class":111},"    student[",[101,152675,62668],{"class":216},[101,152677,4430],{"class":111},[101,152679,157],{"class":107},[101,152681,149775],{"class":111},[101,152683,152684,152686,152688,152690,152692],{"class":103,"line":32663},[101,152685,152673],{"class":111},[101,152687,69113],{"class":216},[101,152689,4430],{"class":111},[101,152691,157],{"class":107},[101,152693,149787],{"class":111},[101,152695,152696,152698,152700,152702,152704],{"class":103,"line":32683},[101,152697,152673],{"class":111},[101,152699,151452],{"class":216},[101,152701,4430],{"class":111},[101,152703,157],{"class":107},[101,152705,1566],{"class":111},[101,152707,152708],{"class":103,"line":32689},[101,152709,2387],{"emptyLinePlaceholder":27},[101,152711,152712],{"class":103,"line":32700},[101,152713,152441],{"class":111},[101,152715,152716,152718,152720,152723],{"class":103,"line":32706},[101,152717,31288],{"class":160},[101,152719,112],{"class":111},[101,152721,152722],{"class":216},"\"修改成功\"",[101,152724,118],{"class":111},[101,152726,152727],{"class":103,"line":32712},[101,152728,2387],{"emptyLinePlaceholder":27},[101,152730,152731],{"class":103,"line":32718},[101,152732,2387],{"emptyLinePlaceholder":27},[101,152734,152735,152737,152740],{"class":103,"line":32724},[101,152736,31936],{"class":107},[101,152738,152739],{"class":1950}," query_student",[101,152741,151941],{"class":111},[101,152743,152744,152746,152748,152750,152752,152755],{"class":103,"line":32730},[101,152745,152303],{"class":111},[101,152747,157],{"class":107},[101,152749,60594],{"class":160},[101,152751,112],{"class":111},[101,152753,152754],{"class":216},"\"请输入要查询的学号:\"",[101,152756,118],{"class":111},[101,152758,152759,152761,152763],{"class":103,"line":32736},[101,152760,152489],{"class":111},[101,152762,157],{"class":107},[101,152764,152494],{"class":111},[101,152766,152767],{"class":103,"line":32742},[101,152768,2387],{"emptyLinePlaceholder":27},[101,152770,152771,152773,152775,152777,152779],{"class":103,"line":32762},[101,152772,3088],{"class":107},[101,152774,152117],{"class":111},[101,152776,38916],{"class":107},[101,152778,38922],{"class":160},[101,152780,3726],{"class":111},[101,152782,152783,152785,152787,152789],{"class":103,"line":32768},[101,152784,32440],{"class":160},[101,152786,112],{"class":111},[101,152788,152519],{"class":216},[101,152790,118],{"class":111},[101,152792,152793],{"class":103,"line":32784},[101,152794,152341],{"class":107},[101,152796,152797],{"class":103,"line":32790},[101,152798,2387],{"emptyLinePlaceholder":27},[101,152800,152801],{"class":103,"line":32804},[101,152802,152803],{"class":111},"    print_student(student)\n",[101,152805,152806],{"class":103,"line":32810},[101,152807,2387],{"emptyLinePlaceholder":27},[101,152809,152810],{"class":103,"line":32825},[101,152811,2387],{"emptyLinePlaceholder":27},[101,152813,152814,152816,152819],{"class":103,"line":32831},[101,152815,31936],{"class":107},[101,152817,152818],{"class":1950}," print_student",[101,152820,152821],{"class":111},"(student):\n",[101,152823,152824,152826],{"class":103,"line":32840},[101,152825,31288],{"class":160},[101,152827,151419],{"class":111},[101,152829,152830,152833,152835,152837,152840,152843,152845,152848],{"class":103,"line":32846},[101,152831,152832],{"class":107},"        f",[101,152834,362],{"class":216},[101,152836,1007],{"class":160},[101,152838,152839],{"class":111},"student[",[101,152841,152842],{"class":216},"'student_id'",[101,152844,1051],{"class":111},[101,152846,152847],{"class":160},"}\\t",[101,152849,25122],{"class":216},[101,152851,152852,152854,152856,152858,152860,152863,152865,152867],{"class":103,"line":32855},[101,152853,152832],{"class":107},[101,152855,362],{"class":216},[101,152857,1007],{"class":160},[101,152859,152839],{"class":111},[101,152861,152862],{"class":216},"'name'",[101,152864,1051],{"class":111},[101,152866,152847],{"class":160},[101,152868,25122],{"class":216},[101,152870,152871,152873,152875,152877,152879,152882,152884,152886],{"class":103,"line":32861},[101,152872,152832],{"class":107},[101,152874,362],{"class":216},[101,152876,1007],{"class":160},[101,152878,152839],{"class":111},[101,152880,152881],{"class":216},"'age'",[101,152883,1051],{"class":111},[101,152885,152847],{"class":160},[101,152887,25122],{"class":216},[101,152889,152890,152892,152894,152896,152898,152901,152903,152905],{"class":103,"line":32867},[101,152891,152832],{"class":107},[101,152893,362],{"class":216},[101,152895,1007],{"class":160},[101,152897,152839],{"class":111},[101,152899,152900],{"class":216},"'score'",[101,152902,1051],{"class":111},[101,152904,1057],{"class":160},[101,152906,25122],{"class":216},[101,152908,152909],{"class":103,"line":32876},[101,152910,152911],{"class":111},"    )\n",[101,152913,152914],{"class":103,"line":32882},[101,152915,2387],{"emptyLinePlaceholder":27},[101,152917,152918],{"class":103,"line":32893},[101,152919,2387],{"emptyLinePlaceholder":27},[101,152921,152922,152924,152927],{"class":103,"line":32899},[101,152923,31936],{"class":107},[101,152925,152926],{"class":1950}," show_all_students",[101,152928,151941],{"class":111},[101,152930,152931,152933,152935],{"class":103,"line":32918},[101,152932,3088],{"class":107},[101,152934,38919],{"class":107},[101,152936,152122],{"class":111},[101,152938,152939,152941,152943,152946],{"class":103,"line":32924},[101,152940,32440],{"class":160},[101,152942,112],{"class":111},[101,152944,152945],{"class":216},"\"暂无学生\"",[101,152947,118],{"class":111},[101,152949,152950],{"class":103,"line":32935},[101,152951,152341],{"class":107},[101,152953,152954],{"class":103,"line":32941},[101,152955,2387],{"emptyLinePlaceholder":27},[101,152957,152958,152960,152962,152965,152967,152970,152972,152975,152977,152980],{"class":103,"line":32961},[101,152959,31288],{"class":160},[101,152961,112],{"class":111},[101,152963,152964],{"class":216},"\"学号",[101,152966,1217],{"class":160},[101,152968,152969],{"class":216},"姓名",[101,152971,1217],{"class":160},[101,152973,152974],{"class":216},"年龄",[101,152976,1217],{"class":160},[101,152978,152979],{"class":216},"成绩\"",[101,152981,118],{"class":111},[101,152983,152984,152986,152988,152990],{"class":103,"line":32977},[101,152985,3188],{"class":107},[101,152987,152117],{"class":111},[101,152989,26032],{"class":107},[101,152991,152122],{"class":111},[101,152993,152994],{"class":103,"line":32983},[101,152995,152996],{"class":111},"        print_student(student)\n",[101,152998,152999],{"class":103,"line":32997},[101,153000,2387],{"emptyLinePlaceholder":27},[101,153002,153003],{"class":103,"line":33003},[101,153004,2387],{"emptyLinePlaceholder":27},[101,153006,153007,153009,153011],{"class":103,"line":33009},[101,153008,31936],{"class":107},[101,153010,1960],{"class":1950},[101,153012,31942],{"class":111},[101,153014,153015,153018,153020],{"class":103,"line":33020},[101,153016,153017],{"class":111},"    students ",[101,153019,157],{"class":107},[101,153021,153022],{"class":111}," load_students()\n",[101,153024,153025],{"class":103,"line":33026},[101,153026,2387],{"emptyLinePlaceholder":27},[101,153028,153029,153031,153033],{"class":103,"line":33032},[101,153030,2238],{"class":107},[101,153032,95272],{"class":160},[101,153034,3726],{"class":111},[101,153036,153037],{"class":103,"line":33042},[101,153038,153039],{"class":111},"        show_menu()\n",[101,153041,153042,153045,153047,153049,153051,153054],{"class":103,"line":33048},[101,153043,153044],{"class":111},"        choice ",[101,153046,157],{"class":107},[101,153048,60594],{"class":160},[101,153050,112],{"class":111},[101,153052,153053],{"class":216},"\"请输入操作:\"",[101,153055,118],{"class":111},[101,153057,153058],{"class":103,"line":33059},[101,153059,2387],{"emptyLinePlaceholder":27},[101,153061,153062,153064,153067,153069,153072],{"class":103,"line":33065},[101,153063,2484],{"class":107},[101,153065,153066],{"class":111}," choice ",[101,153068,2936],{"class":107},[101,153070,153071],{"class":216}," \"1\"",[101,153073,3726],{"class":111},[101,153075,153076],{"class":103,"line":33075},[101,153077,153078],{"class":111},"            add_student(students)\n",[101,153080,153081,153084,153086,153088,153091],{"class":103,"line":33080},[101,153082,153083],{"class":107},"        elif",[101,153085,153066],{"class":111},[101,153087,2936],{"class":107},[101,153089,153090],{"class":216}," \"2\"",[101,153092,3726],{"class":111},[101,153094,153095],{"class":103,"line":33086},[101,153096,153097],{"class":111},"            delete_student(students)\n",[101,153099,153100,153102,153104,153106,153109],{"class":103,"line":33135},[101,153101,153083],{"class":107},[101,153103,153066],{"class":111},[101,153105,2936],{"class":107},[101,153107,153108],{"class":216}," \"3\"",[101,153110,3726],{"class":111},[101,153112,153113],{"class":103,"line":33182},[101,153114,153115],{"class":111},"            update_student(students)\n",[101,153117,153118,153120,153122,153124,153127],{"class":103,"line":33187},[101,153119,153083],{"class":107},[101,153121,153066],{"class":111},[101,153123,2936],{"class":107},[101,153125,153126],{"class":216}," \"4\"",[101,153128,3726],{"class":111},[101,153130,153131],{"class":103,"line":33193},[101,153132,153133],{"class":111},"            query_student(students)\n",[101,153135,153136,153138,153140,153142,153145],{"class":103,"line":33212},[101,153137,153083],{"class":107},[101,153139,153066],{"class":111},[101,153141,2936],{"class":107},[101,153143,153144],{"class":216}," \"5\"",[101,153146,3726],{"class":111},[101,153148,153149],{"class":103,"line":33218},[101,153150,153151],{"class":111},"            show_all_students(students)\n",[101,153153,153154,153156,153158,153160,153163],{"class":103,"line":33238},[101,153155,153083],{"class":107},[101,153157,153066],{"class":111},[101,153159,2936],{"class":107},[101,153161,153162],{"class":216}," \"0\"",[101,153164,3726],{"class":111},[101,153166,153167,153169,153171,153174],{"class":103,"line":33244},[101,153168,34639],{"class":160},[101,153170,112],{"class":111},[101,153172,153173],{"class":216},"\"退出系统\"",[101,153175,118],{"class":111},[101,153177,153178],{"class":103,"line":33250},[101,153179,115078],{"class":107},[101,153181,153182,153184],{"class":103,"line":33260},[101,153183,2521],{"class":107},[101,153185,3726],{"class":111},[101,153187,153188,153190,153192,153195],{"class":103,"line":33265},[101,153189,34639],{"class":160},[101,153191,112],{"class":111},[101,153193,153194],{"class":216},"\"输入错误\"",[101,153196,118],{"class":111},[101,153198,153199],{"class":103,"line":33271},[101,153200,2387],{"emptyLinePlaceholder":27},[101,153202,153203],{"class":103,"line":33287},[101,153204,2387],{"emptyLinePlaceholder":27},[101,153206,153207,153209,153211,153213,153215],{"class":103,"line":33332},[101,153208,1518],{"class":107},[101,153210,31209],{"class":160},[101,153212,101539],{"class":107},[101,153214,101542],{"class":216},[101,153216,3726],{"class":111},[101,153218,153219],{"class":103,"line":33338},[101,153220,101549],{"class":111},[10,153222,153223],{},"这个项目串联了：",[55,153225,153226,153229,153232,153235,153238,153240],{},[58,153227,153228],{},"菜单循环。",[58,153230,153231],{},"函数封装。",[58,153233,153234],{},"列表字典。",[58,153236,153237],{},"JSON 读写。",[58,153239,151707],{},[58,153241,153242,28374],{},[98,153243,153244],{},"if __name__ == \"__main__\"",[43,153246,153248],{"id":153247},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[10,153250,153251],{},"可以进一步拆成两个类：",[55,153253,153254,153259],{},[58,153255,153256,153258],{},[98,153257,149548],{},"：表示单个学生。",[58,153260,153261,153263],{},[98,153262,151574],{},"：负责学生增删改查和文件保存。",[10,153265,153266],{},"示意代码：",[92,153268,153270],{"className":30367,"code":153269,"language":30369,"meta":20,"style":20},"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",[98,153271,153272,153282,153286,153290,153294,153302,153309,153315,153321,153327,153331,153339,153345,153355,153365,153375,153385,153389,153393,153399,153407,153415,153423,153431,153439,153447],{"__ignoreMap":20},[101,153273,153274,153276,153278,153280],{"class":103,"line":104},[101,153275,30726],{"class":107},[101,153277,151132],{"class":111},[101,153279,30381],{"class":107},[101,153281,151137],{"class":111},[101,153283,153284],{"class":103,"line":21},[101,153285,2387],{"emptyLinePlaceholder":27},[101,153287,153288],{"class":103,"line":1166},[101,153289,2387],{"emptyLinePlaceholder":27},[101,153291,153292],{"class":103,"line":1181},[101,153293,151150],{"class":1950},[101,153295,153296,153298,153300],{"class":103,"line":1187},[101,153297,14682],{"class":107},[101,153299,7886],{"class":1950},[101,153301,3726],{"class":111},[101,153303,153304,153307],{"class":103,"line":1201},[101,153305,153306],{"class":111},"    student_id: ",[101,153308,151166],{"class":160},[101,153310,153311,153313],{"class":103,"line":1207},[101,153312,151163],{"class":111},[101,153314,151166],{"class":160},[101,153316,153317,153319],{"class":103,"line":1298},[101,153318,151171],{"class":111},[101,153320,151174],{"class":160},[101,153322,153323,153325],{"class":103,"line":1304},[101,153324,151179],{"class":111},[101,153326,151182],{"class":160},[101,153328,153329],{"class":103,"line":1316},[101,153330,2387],{"emptyLinePlaceholder":27},[101,153332,153333,153335,153337],{"class":103,"line":1599},[101,153334,30790],{"class":107},[101,153336,151330],{"class":1950},[101,153338,30796],{"class":111},[101,153340,153341,153343],{"class":103,"line":1604},[101,153342,14740],{"class":107},[101,153344,15560],{"class":111},[101,153346,153347,153349,153351,153353],{"class":103,"line":1610},[101,153348,151343],{"class":216},[101,153350,51426],{"class":111},[101,153352,30812],{"class":160},[101,153354,151350],{"class":111},[101,153356,153357,153359,153361,153363],{"class":103,"line":1615},[101,153358,151355],{"class":216},[101,153360,51426],{"class":111},[101,153362,30812],{"class":160},[101,153364,151362],{"class":111},[101,153366,153367,153369,153371,153373],{"class":103,"line":1629},[101,153368,151367],{"class":216},[101,153370,51426],{"class":111},[101,153372,30812],{"class":160},[101,153374,151374],{"class":111},[101,153376,153377,153379,153381,153383],{"class":103,"line":1634},[101,153378,151379],{"class":216},[101,153380,51426],{"class":111},[101,153382,30812],{"class":160},[101,153384,151386],{"class":111},[101,153386,153387],{"class":103,"line":1640},[101,153388,2516],{"class":111},[101,153390,153391],{"class":103,"line":1661},[101,153392,2387],{"emptyLinePlaceholder":27},[101,153394,153395,153397],{"class":103,"line":1666},[101,153396,150994],{"class":1950},[101,153398,150997],{"class":160},[101,153400,153401,153403,153405],{"class":103,"line":1680},[101,153402,30790],{"class":107},[101,153404,151407],{"class":1950},[101,153406,151410],{"class":111},[101,153408,153409,153411,153413],{"class":103,"line":1685},[101,153410,14740],{"class":107},[101,153412,151014],{"class":160},[101,153414,151419],{"class":111},[101,153416,153417,153419,153421],{"class":103,"line":1714},[101,153418,151424],{"class":111},[101,153420,151427],{"class":216},[101,153422,87825],{"class":111},[101,153424,153425,153427,153429],{"class":103,"line":1719},[101,153426,151424],{"class":111},[101,153428,62668],{"class":216},[101,153430,87825],{"class":111},[101,153432,153433,153435,153437],{"class":103,"line":1736},[101,153434,151424],{"class":111},[101,153436,69113],{"class":216},[101,153438,87825],{"class":111},[101,153440,153441,153443,153445],{"class":103,"line":1741},[101,153442,151424],{"class":111},[101,153444,151452],{"class":216},[101,153446,87825],{"class":111},[101,153448,153449],{"class":103,"line":1746},[101,153450,38115],{"class":111},[10,153452,153453],{},"管理器示意：",[92,153455,153457],{"className":30367,"code":153456,"language":30369,"meta":20,"style":20},"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",[98,153458,153459,153468,153476,153487,153491,153501,153514,153525,153532,153538,153542,153551,153560,153566,153573],{"__ignoreMap":20},[101,153460,153461,153463,153466],{"class":103,"line":104},[101,153462,14682],{"class":107},[101,153464,153465],{"class":1950}," StudentManager",[101,153467,3726],{"class":111},[101,153469,153470,153472,153474],{"class":103,"line":21},[101,153471,30790],{"class":107},[101,153473,30793],{"class":160},[101,153475,30796],{"class":111},[101,153477,153478,153480,153483,153485],{"class":103,"line":1166},[101,153479,30834],{"class":160},[101,153481,153482],{"class":111},".students ",[101,153484,157],{"class":107},[101,153486,51827],{"class":111},[101,153488,153489],{"class":103,"line":1181},[101,153490,2387],{"emptyLinePlaceholder":27},[101,153492,153493,153495,153498],{"class":103,"line":1187},[101,153494,30790],{"class":107},[101,153496,153497],{"class":1950}," find_by_id",[101,153499,153500],{"class":111},"(self, student_id):\n",[101,153502,153503,153505,153507,153509,153511],{"class":103,"line":1201},[101,153504,3390],{"class":107},[101,153506,152117],{"class":111},[101,153508,26032],{"class":107},[101,153510,38862],{"class":160},[101,153512,153513],{"class":111},".students:\n",[101,153515,153516,153518,153521,153523],{"class":103,"line":1207},[101,153517,4629],{"class":107},[101,153519,153520],{"class":111}," student.student_id ",[101,153522,2936],{"class":107},[101,153524,152138],{"class":111},[101,153526,153527,153530],{"class":103,"line":1298},[101,153528,153529],{"class":107},"                return",[101,153531,152145],{"class":111},[101,153533,153534,153536],{"class":103,"line":1304},[101,153535,14740],{"class":107},[101,153537,152152],{"class":160},[101,153539,153540],{"class":103,"line":1316},[101,153541,2387],{"emptyLinePlaceholder":27},[101,153543,153544,153546,153548],{"class":103,"line":1599},[101,153545,30790],{"class":107},[101,153547,5197],{"class":1950},[101,153549,153550],{"class":111},"(self, student):\n",[101,153552,153553,153555,153557],{"class":103,"line":1604},[101,153554,2484],{"class":107},[101,153556,38862],{"class":160},[101,153558,153559],{"class":111},".find_by_id(student.student_id):\n",[101,153561,153562,153564],{"class":103,"line":1610},[101,153563,15720],{"class":107},[101,153565,125787],{"class":160},[101,153567,153568,153570],{"class":103,"line":1615},[101,153569,30834],{"class":160},[101,153571,153572],{"class":111},".students.append(student)\n",[101,153574,153575,153577],{"class":103,"line":1629},[101,153576,14740],{"class":107},[101,153578,153579],{"class":160}," True\n",[10,153581,153582],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[43,153584,153586],{"id":153585},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[72,153588,153590],{"id":153589},"_1251-数据结构","12.5.1 数据结构",[92,153592,153594],{"className":30367,"code":153593,"language":30369,"meta":20,"style":20},"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",[98,153595,153596,153604,153635,153665,153694,153723],{"__ignoreMap":20},[101,153597,153598,153600,153602],{"class":103,"line":104},[101,153599,148445],{"class":111},[101,153601,157],{"class":107},[101,153603,55436],{"class":111},[101,153605,153606,153608,153610,153612,153614,153616,153619,153621,153624,153626,153628,153630,153633],{"class":103,"line":21},[101,153607,148365],{"class":111},[101,153609,147977],{"class":216},[101,153611,51426],{"class":111},[101,153613,148588],{"class":216},[101,153615,12423],{"class":111},[101,153617,153618],{"class":216},"\"category\"",[101,153620,51426],{"class":111},[101,153622,153623],{"class":216},"\"手机\"",[101,153625,12423],{"class":111},[101,153627,84073],{"class":216},[101,153629,51426],{"class":111},[101,153631,153632],{"class":160},"12000",[101,153634,4917],{"class":111},[101,153636,153637,153639,153641,153643,153645,153647,153649,153651,153654,153656,153658,153660,153663],{"class":103,"line":1166},[101,153638,148365],{"class":111},[101,153640,147977],{"class":216},[101,153642,51426],{"class":111},[101,153644,148588],{"class":216},[101,153646,12423],{"class":111},[101,153648,153618],{"class":216},[101,153650,51426],{"class":111},[101,153652,153653],{"class":216},"\"电脑\"",[101,153655,12423],{"class":111},[101,153657,84073],{"class":216},[101,153659,51426],{"class":111},[101,153661,153662],{"class":160},"18000",[101,153664,4917],{"class":111},[101,153666,153667,153669,153671,153673,153675,153677,153679,153681,153683,153685,153687,153689,153692],{"class":103,"line":1181},[101,153668,148365],{"class":111},[101,153670,147977],{"class":216},[101,153672,51426],{"class":111},[101,153674,148609],{"class":216},[101,153676,12423],{"class":111},[101,153678,153618],{"class":216},[101,153680,51426],{"class":111},[101,153682,153623],{"class":216},[101,153684,12423],{"class":111},[101,153686,84073],{"class":216},[101,153688,51426],{"class":111},[101,153690,153691],{"class":160},"15000",[101,153693,4917],{"class":111},[101,153695,153696,153698,153700,153702,153704,153706,153708,153710,153712,153714,153716,153718,153721],{"class":103,"line":1187},[101,153697,148365],{"class":111},[101,153699,147977],{"class":216},[101,153701,51426],{"class":111},[101,153703,148609],{"class":216},[101,153705,12423],{"class":111},[101,153707,153618],{"class":216},[101,153709,51426],{"class":111},[101,153711,153653],{"class":216},[101,153713,12423],{"class":111},[101,153715,84073],{"class":216},[101,153717,51426],{"class":111},[101,153719,153720],{"class":160},"16000",[101,153722,4917],{"class":111},[101,153724,153725],{"class":103,"line":1201},[101,153726,33235],{"class":111},[72,153728,153730],{"id":153729},"_1252-按日期统计","12.5.2 按日期统计",[92,153732,153734],{"className":30367,"code":153733,"language":30369,"meta":20,"style":20},"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",[98,153735,153736,153745,153749,153760,153774,153787,153806,153810],{"__ignoreMap":20},[101,153737,153738,153741,153743],{"class":103,"line":104},[101,153739,153740],{"class":111},"daily_total ",[101,153742,157],{"class":107},[101,153744,87857],{"class":111},[101,153746,153747],{"class":103,"line":21},[101,153748,2387],{"emptyLinePlaceholder":27},[101,153750,153751,153753,153755,153757],{"class":103,"line":1166},[101,153752,3012],{"class":107},[101,153754,148189],{"class":111},[101,153756,26032],{"class":107},[101,153758,153759],{"class":111}," sales:\n",[101,153761,153762,153765,153767,153770,153772],{"class":103,"line":1181},[101,153763,153764],{"class":111},"    date ",[101,153766,157],{"class":107},[101,153768,153769],{"class":111}," item[",[101,153771,147977],{"class":216},[101,153773,33235],{"class":111},[101,153775,153776,153779,153781,153783,153785],{"class":103,"line":1187},[101,153777,153778],{"class":111},"    amount ",[101,153780,157],{"class":107},[101,153782,153769],{"class":111},[101,153784,84073],{"class":216},[101,153786,33235],{"class":111},[101,153788,153789,153792,153794,153797,153799,153801,153803],{"class":103,"line":1201},[101,153790,153791],{"class":111},"    daily_total[date] ",[101,153793,157],{"class":107},[101,153795,153796],{"class":111}," daily_total.get(date, ",[101,153798,303],{"class":160},[101,153800,13702],{"class":111},[101,153802,592],{"class":107},[101,153804,153805],{"class":111}," amount\n",[101,153807,153808],{"class":103,"line":1207},[101,153809,2387],{"emptyLinePlaceholder":27},[101,153811,153812,153814],{"class":103,"line":1298},[101,153813,30404],{"class":160},[101,153815,153816],{"class":111},"(daily_total)\n",[72,153818,153820],{"id":153819},"_1253-按类别统计","12.5.3 按类别统计",[92,153822,153824],{"className":30367,"code":153823,"language":30369,"meta":20,"style":20},"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",[98,153825,153826,153835,153839,153849,153862,153874,153892,153896],{"__ignoreMap":20},[101,153827,153828,153831,153833],{"class":103,"line":104},[101,153829,153830],{"class":111},"category_total ",[101,153832,157],{"class":107},[101,153834,87857],{"class":111},[101,153836,153837],{"class":103,"line":21},[101,153838,2387],{"emptyLinePlaceholder":27},[101,153840,153841,153843,153845,153847],{"class":103,"line":1166},[101,153842,3012],{"class":107},[101,153844,148189],{"class":111},[101,153846,26032],{"class":107},[101,153848,153759],{"class":111},[101,153850,153851,153854,153856,153858,153860],{"class":103,"line":1181},[101,153852,153853],{"class":111},"    category ",[101,153855,157],{"class":107},[101,153857,153769],{"class":111},[101,153859,153618],{"class":216},[101,153861,33235],{"class":111},[101,153863,153864,153866,153868,153870,153872],{"class":103,"line":1187},[101,153865,153778],{"class":111},[101,153867,157],{"class":107},[101,153869,153769],{"class":111},[101,153871,84073],{"class":216},[101,153873,33235],{"class":111},[101,153875,153876,153879,153881,153884,153886,153888,153890],{"class":103,"line":1201},[101,153877,153878],{"class":111},"    category_total[category] ",[101,153880,157],{"class":107},[101,153882,153883],{"class":111}," category_total.get(category, ",[101,153885,303],{"class":160},[101,153887,13702],{"class":111},[101,153889,592],{"class":107},[101,153891,153805],{"class":111},[101,153893,153894],{"class":103,"line":1207},[101,153895,2387],{"emptyLinePlaceholder":27},[101,153897,153898,153900],{"class":103,"line":1298},[101,153899,30404],{"class":160},[101,153901,153902],{"class":111},"(category_total)\n",[72,153904,153906],{"id":153905},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[92,153908,153910],{"className":30367,"code":153909,"language":30369,"meta":20,"style":20},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[98,153911,153912,153937],{"__ignoreMap":20},[101,153913,153914,153917,153919,153921,153924,153927,153930,153933,153935],{"class":103,"line":104},[101,153915,153916],{"class":111},"top_date, top_amount ",[101,153918,157],{"class":107},[101,153920,5939],{"class":160},[101,153922,153923],{"class":111},"(daily_total.items(), ",[101,153925,153926],{"class":5204},"key",[101,153928,153929],{"class":107},"=lambda",[101,153931,153932],{"class":111}," item: item[",[101,153934,329],{"class":160},[101,153936,4644],{"class":111},[101,153938,153939,153941],{"class":103,"line":21},[101,153940,30404],{"class":160},[101,153942,153943],{"class":111},"(top_date, top_amount)\n",[43,153945,153947],{"id":153946},"_126-绘制柱状图","12.6 绘制柱状图",[92,153949,153951],{"className":30367,"code":153950,"language":30369,"meta":20,"style":20},"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",[98,153952,153953,153967,153978,153982,153990,154002,154014,154025,154029,154033,154043,154054,154068,154073,154090,154107,154123,154127],{"__ignoreMap":20},[101,153954,153955,153957,153959,153961,153963,153965],{"class":103,"line":104},[101,153956,30726],{"class":107},[101,153958,147359],{"class":111},[101,153960,30381],{"class":107},[101,153962,147364],{"class":111},[101,153964,31372],{"class":107},[101,153966,147369],{"class":111},[101,153968,153969,153971,153973,153975],{"class":103,"line":21},[101,153970,30726],{"class":107},[101,153972,147218],{"class":111},[101,153974,30381],{"class":107},[101,153976,153977],{"class":111}," Bar\n",[101,153979,153980],{"class":103,"line":1166},[101,153981,2387],{"emptyLinePlaceholder":27},[101,153983,153984,153986,153988],{"class":103,"line":1181},[101,153985,153830],{"class":111},[101,153987,157],{"class":107},[101,153989,15560],{"class":111},[101,153991,153992,153995,153997,154000],{"class":103,"line":1187},[101,153993,153994],{"class":216},"    \"手机\"",[101,153996,51426],{"class":111},[101,153998,153999],{"class":160},"27000",[101,154001,31455],{"class":111},[101,154003,154004,154007,154009,154012],{"class":103,"line":1201},[101,154005,154006],{"class":216},"    \"电脑\"",[101,154008,51426],{"class":111},[101,154010,154011],{"class":160},"34000",[101,154013,31455],{"class":111},[101,154015,154016,154019,154021,154023],{"class":103,"line":1207},[101,154017,154018],{"class":216},"    \"耳机\"",[101,154020,51426],{"class":111},[101,154022,124379],{"class":160},[101,154024,31455],{"class":111},[101,154026,154027],{"class":103,"line":1298},[101,154028,1552],{"class":111},[101,154030,154031],{"class":103,"line":1304},[101,154032,2387],{"emptyLinePlaceholder":27},[101,154034,154035,154038,154040],{"class":103,"line":1316},[101,154036,154037],{"class":111},"bar ",[101,154039,157],{"class":107},[101,154041,154042],{"class":111}," Bar()\n",[101,154044,154045,154048,154051],{"class":103,"line":1599},[101,154046,154047],{"class":111},"bar.add_xaxis(",[101,154049,154050],{"class":160},"list",[101,154052,154053],{"class":111},"(category_total.keys()))\n",[101,154055,154056,154059,154061,154063,154065],{"class":103,"line":1604},[101,154057,154058],{"class":111},"bar.add_yaxis(",[101,154060,147275],{"class":216},[101,154062,12423],{"class":111},[101,154064,154050],{"class":160},[101,154066,154067],{"class":111},"(category_total.values()))\n",[101,154069,154070],{"class":103,"line":1610},[101,154071,154072],{"class":111},"bar.set_global_opts(\n",[101,154074,154075,154077,154079,154081,154083,154085,154088],{"class":103,"line":1615},[101,154076,147453],{"class":5204},[101,154078,157],{"class":107},[101,154080,147458],{"class":111},[101,154082,51396],{"class":5204},[101,154084,157],{"class":107},[101,154086,154087],{"class":216},"\"品类销售额\"",[101,154089,38036],{"class":111},[101,154091,154092,154094,154096,154098,154100,154102,154105],{"class":103,"line":1629},[101,154093,147472],{"class":5204},[101,154095,157],{"class":107},[101,154097,147477],{"class":111},[101,154099,79799],{"class":5204},[101,154101,157],{"class":107},[101,154103,154104],{"class":216},"\"品类\"",[101,154106,38036],{"class":111},[101,154108,154109,154111,154113,154115,154117,154119,154121],{"class":103,"line":1634},[101,154110,147491],{"class":5204},[101,154112,157],{"class":107},[101,154114,147477],{"class":111},[101,154116,79799],{"class":5204},[101,154118,157],{"class":107},[101,154120,147275],{"class":216},[101,154122,38036],{"class":111},[101,154124,154125],{"class":103,"line":1640},[101,154126,118],{"class":111},[101,154128,154129,154132,154135],{"class":103,"line":1661},[101,154130,154131],{"class":111},"bar.render(",[101,154133,154134],{"class":216},"\"category_sales.html\"",[101,154136,118],{"class":111},[43,154138,154140],{"id":154139},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[10,154142,154143],{},"时间线适合展示不同日期、月份、年份的数据变化。",[92,154145,154147],{"className":30367,"code":154146,"language":30369,"meta":20,"style":20},"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",[98,154148,154149,154163,154174,154178,154186,154210,154233,154258,154262,154266,154276,154280,154291,154300,154310,154324,154355,154360,154364],{"__ignoreMap":20},[101,154150,154151,154153,154155,154157,154159,154161],{"class":103,"line":104},[101,154152,30726],{"class":107},[101,154154,147359],{"class":111},[101,154156,30381],{"class":107},[101,154158,147364],{"class":111},[101,154160,31372],{"class":107},[101,154162,147369],{"class":111},[101,154164,154165,154167,154169,154171],{"class":103,"line":21},[101,154166,30726],{"class":107},[101,154168,147218],{"class":111},[101,154170,30381],{"class":107},[101,154172,154173],{"class":111}," Bar, Timeline\n",[101,154175,154176],{"class":103,"line":1166},[101,154177,2387],{"emptyLinePlaceholder":27},[101,154179,154180,154182,154184],{"class":103,"line":1181},[101,154181,101638],{"class":111},[101,154183,157],{"class":107},[101,154185,15560],{"class":111},[101,154187,154188,154191,154194,154196,154198,154200,154202,154204,154206,154208],{"class":103,"line":1187},[101,154189,154190],{"class":216},"    \"2024-10-01\"",[101,154192,154193],{"class":111},": {",[101,154195,153623],{"class":216},[101,154197,51426],{"class":111},[101,154199,153632],{"class":160},[101,154201,12423],{"class":111},[101,154203,153653],{"class":216},[101,154205,51426],{"class":111},[101,154207,153662],{"class":160},[101,154209,4917],{"class":111},[101,154211,154212,154215,154217,154219,154221,154223,154225,154227,154229,154231],{"class":103,"line":1201},[101,154213,154214],{"class":216},"    \"2024-10-02\"",[101,154216,154193],{"class":111},[101,154218,153623],{"class":216},[101,154220,51426],{"class":111},[101,154222,153691],{"class":160},[101,154224,12423],{"class":111},[101,154226,153653],{"class":216},[101,154228,51426],{"class":111},[101,154230,153720],{"class":160},[101,154232,4917],{"class":111},[101,154234,154235,154238,154240,154242,154244,154247,154249,154251,154253,154256],{"class":103,"line":1207},[101,154236,154237],{"class":216},"    \"2024-10-03\"",[101,154239,154193],{"class":111},[101,154241,153623],{"class":216},[101,154243,51426],{"class":111},[101,154245,154246],{"class":160},"17000",[101,154248,12423],{"class":111},[101,154250,153653],{"class":216},[101,154252,51426],{"class":111},[101,154254,154255],{"class":160},"19000",[101,154257,4917],{"class":111},[101,154259,154260],{"class":103,"line":1298},[101,154261,1552],{"class":111},[101,154263,154264],{"class":103,"line":1304},[101,154265,2387],{"emptyLinePlaceholder":27},[101,154267,154268,154271,154273],{"class":103,"line":1316},[101,154269,154270],{"class":111},"timeline ",[101,154272,157],{"class":107},[101,154274,154275],{"class":111}," Timeline()\n",[101,154277,154278],{"class":103,"line":1599},[101,154279,2387],{"emptyLinePlaceholder":27},[101,154281,154282,154284,154287,154289],{"class":103,"line":1604},[101,154283,3012],{"class":107},[101,154285,154286],{"class":111}," date, category_data ",[101,154288,26032],{"class":107},[101,154290,149128],{"class":111},[101,154292,154293,154296,154298],{"class":103,"line":1610},[101,154294,154295],{"class":111},"    bar ",[101,154297,157],{"class":107},[101,154299,154042],{"class":111},[101,154301,154302,154305,154307],{"class":103,"line":1615},[101,154303,154304],{"class":111},"    bar.add_xaxis(",[101,154306,154050],{"class":160},[101,154308,154309],{"class":111},"(category_data.keys()))\n",[101,154311,154312,154315,154317,154319,154321],{"class":103,"line":1629},[101,154313,154314],{"class":111},"    bar.add_yaxis(",[101,154316,147275],{"class":216},[101,154318,12423],{"class":111},[101,154320,154050],{"class":160},[101,154322,154323],{"class":111},"(category_data.values()))\n",[101,154325,154326,154329,154332,154334,154336,154338,154340,154342,154344,154346,154348,154350,154353],{"class":103,"line":1634},[101,154327,154328],{"class":111},"    bar.set_global_opts(",[101,154330,154331],{"class":5204},"title_opts",[101,154333,157],{"class":107},[101,154335,147458],{"class":111},[101,154337,51396],{"class":5204},[101,154339,157],{"class":107},[101,154341,164],{"class":107},[101,154343,362],{"class":216},[101,154345,1007],{"class":160},[101,154347,73915],{"class":111},[101,154349,1057],{"class":160},[101,154351,154352],{"class":216},"销售额\"",[101,154354,30486],{"class":111},[101,154356,154357],{"class":103,"line":1640},[101,154358,154359],{"class":111},"    timeline.add(bar, date)\n",[101,154361,154362],{"class":103,"line":1661},[101,154363,2387],{"emptyLinePlaceholder":27},[101,154365,154366,154369,154372],{"class":103,"line":1666},[101,154367,154368],{"class":111},"timeline.render(",[101,154370,154371],{"class":216},"\"timeline_sales.html\"",[101,154373,118],{"class":111},[43,154375,154377],{"id":154376},"_128-绘制地图","12.8 绘制地图",[10,154379,154380],{},"地图适合展示地区数据。",[92,154382,154384],{"className":30367,"code":154383,"language":30369,"meta":20,"style":20},"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",[98,154385,154386,154400,154411,154415,154423,154436,154448,154461,154474,154478,154482,154492,154507,154512,154529,154548,154552],{"__ignoreMap":20},[101,154387,154388,154390,154392,154394,154396,154398],{"class":103,"line":104},[101,154389,30726],{"class":107},[101,154391,147359],{"class":111},[101,154393,30381],{"class":107},[101,154395,147364],{"class":111},[101,154397,31372],{"class":107},[101,154399,147369],{"class":111},[101,154401,154402,154404,154406,154408],{"class":103,"line":21},[101,154403,30726],{"class":107},[101,154405,147218],{"class":111},[101,154407,30381],{"class":107},[101,154409,154410],{"class":111}," Map\n",[101,154412,154413],{"class":103,"line":1166},[101,154414,2387],{"emptyLinePlaceholder":27},[101,154416,154417,154419,154421],{"class":103,"line":1181},[101,154418,101638],{"class":111},[101,154420,157],{"class":107},[101,154422,55436],{"class":111},[101,154424,154425,154428,154430,154432,154434],{"class":103,"line":1187},[101,154426,154427],{"class":111},"    (",[101,154429,69258],{"class":216},[101,154431,12423],{"class":111},[101,154433,928],{"class":160},[101,154435,38036],{"class":111},[101,154437,154438,154440,154442,154444,154446],{"class":103,"line":1201},[101,154439,154427],{"class":111},[101,154441,69278],{"class":216},[101,154443,12423],{"class":111},[101,154445,147292],{"class":160},[101,154447,38036],{"class":111},[101,154449,154450,154452,154455,154457,154459],{"class":103,"line":1207},[101,154451,154427],{"class":111},[101,154453,154454],{"class":216},"\"广东\"",[101,154456,12423],{"class":111},[101,154458,1709],{"class":160},[101,154460,38036],{"class":111},[101,154462,154463,154465,154468,154470,154472],{"class":103,"line":1298},[101,154464,154427],{"class":111},[101,154466,154467],{"class":216},"\"浙江\"",[101,154469,12423],{"class":111},[101,154471,147297],{"class":160},[101,154473,38036],{"class":111},[101,154475,154476],{"class":103,"line":1304},[101,154477,33235],{"class":111},[101,154479,154480],{"class":103,"line":1316},[101,154481,2387],{"emptyLinePlaceholder":27},[101,154483,154484,154487,154489],{"class":103,"line":1599},[101,154485,154486],{"class":111},"map_chart ",[101,154488,157],{"class":107},[101,154490,154491],{"class":111}," Map()\n",[101,154493,154494,154497,154499,154502,154505],{"class":103,"line":1604},[101,154495,154496],{"class":111},"map_chart.add(",[101,154498,147275],{"class":216},[101,154500,154501],{"class":111},", data, ",[101,154503,154504],{"class":216},"\"china\"",[101,154506,118],{"class":111},[101,154508,154509],{"class":103,"line":1610},[101,154510,154511],{"class":111},"map_chart.set_global_opts(\n",[101,154513,154514,154516,154518,154520,154522,154524,154527],{"class":103,"line":1615},[101,154515,147453],{"class":5204},[101,154517,157],{"class":107},[101,154519,147458],{"class":111},[101,154521,51396],{"class":5204},[101,154523,157],{"class":107},[101,154525,154526],{"class":216},"\"地区销售额\"",[101,154528,38036],{"class":111},[101,154530,154531,154534,154536,154539,154542,154544,154546],{"class":103,"line":1629},[101,154532,154533],{"class":5204},"    visualmap_opts",[101,154535,157],{"class":107},[101,154537,154538],{"class":111},"opts.VisualMapOpts(",[101,154540,154541],{"class":5204},"max_",[101,154543,157],{"class":107},[101,154545,1709],{"class":160},[101,154547,38036],{"class":111},[101,154549,154550],{"class":103,"line":1634},[101,154551,118],{"class":111},[101,154553,154554,154557,154560],{"class":103,"line":1640},[101,154555,154556],{"class":111},"map_chart.render(",[101,154558,154559],{"class":216},"\"map_sales.html\"",[101,154561,118],{"class":111},[10,154563,154564],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[43,154566,154568],{"id":154567},"_129-项目拆分建议","12.9 项目拆分建议",[10,154570,154571],{},"当代码超过一个文件时，可以这样组织：",[92,154573,154576],{"className":154574,"code":154575,"language":5175,"meta":20},[5173],"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",[98,154577,154575],{"__ignoreMap":20},[10,154579,154580],{},"职责：",[55,154582,154583,154589,154595,154601],{},[58,154584,154585,154588],{},[98,154586,154587],{},"main.py","：程序入口。",[58,154590,154591,154594],{},[98,154592,154593],{},"file_utils.py","：读写 JSON。",[58,154596,154597,154600],{},[98,154598,154599],{},"sales_service.py","：统计销售数据。",[58,154602,154603,154606],{},[98,154604,154605],{},"chart_builder.py","：生成图表。",[43,154608,154610],{"id":154609},"_1210-python基础复习清单","12.10 Python基础复习清单",[10,154612,154613],{},"语法基础：",[55,154615,154616,154619,154622,154625],{},[58,154617,154618],{},"会写变量、注释、输入输出。",[58,154620,154621],{},"会使用 int、float、str、bool。",[58,154623,154624],{},"会做类型转换。",[58,154626,154627],{},"会使用 f-string 格式化输出。",[10,154629,154630],{},"流程控制：",[55,154632,154633,154639,154645,154653],{},[58,154634,154635,154636,28374],{},"会写 ",[98,154637,154638],{},"if elif else",[58,154640,154635,154641,100998,154643,28374],{},[98,154642,108643],{},[98,154644,3012],{},[58,154646,154647,154648,100998,154650,28374],{},"理解 ",[98,154649,2040],{},[98,154651,154652],{},"continue",[58,154654,154655],{},"能写嵌套循环。",[10,154657,154658],{},"函数：",[55,154660,154661,154664,154667,154670],{},[58,154662,154663],{},"会定义和调用函数。",[58,154665,154666],{},"理解参数和返回值。",[58,154668,154669],{},"知道局部变量和全局变量。",[58,154671,154672],{},"会使用默认参数、关键字参数、不定长参数。",[10,154674,154675],{},"容器：",[55,154677,154678,154681,154684,154687,154690],{},[58,154679,154680],{},"会使用列表增删改查。",[58,154682,154683],{},"会遍历列表、字典。",[58,154685,154686],{},"会使用切片。",[58,154688,154689],{},"会用集合去重。",[58,154691,154692],{},"会处理列表嵌套字典。",[10,154694,154695],{},"文件和模块：",[55,154697,154698,154701,154704,154707,154710],{},[58,154699,154700],{},"会读写文本文件。",[58,154702,154703],{},"会读写 JSON。",[58,154705,154706],{},"会捕获常见异常。",[58,154708,154709],{},"会导入模块和第三方包。",[58,154711,154712],{},"会创建简单包结构。",[10,154714,154715],{},"项目能力：",[55,154717,154718,154721,154724,154727,154730],{},[58,154719,154720],{},"能把代码拆成函数。",[58,154722,154723],{},"能把数据保存到文件。",[58,154725,154726],{},"能处理用户输入错误。",[58,154728,154729],{},"能写一个完整菜单程序。",[58,154731,154732],{},"能用 pyecharts 生成图表。",[43,154734,154736],{"id":154735},"_1211-推荐练习顺序","12.11 推荐练习顺序",[55,154738,154739,154742,154745,154748,154751,154754,154757,154760],{},[58,154740,154741],{},"猜数字游戏。",[58,154743,154744],{},"ATM 菜单程序。",[58,154746,154747],{},"学生成绩统计。",[58,154749,154750],{},"学生管理系统函数版。",[58,154752,154753],{},"学生管理系统文件持久化版。",[58,154755,154756],{},"学生管理系统面向对象版。",[58,154758,154759],{},"销售数据统计。",[58,154761,154762],{},"销售数据可视化。",[43,154764,154766],{"id":154765},"_1212-常见学习误区","12.12 常见学习误区",[55,154768,154769,154772,154775,154778,154781,154784,154787],{},[58,154770,154771],{},"只看视频不敲代码。",[58,154773,154774],{},"一报错就复制错误去搜，不先读报错位置。",[58,154776,154777],{},"变量名随便写，后续自己看不懂。",[58,154779,154780],{},"所有代码都写在一个文件一个函数里。",[58,154782,154783],{},"不保存练习代码，复习时没有材料。",[58,154785,154786],{},"还没掌握列表字典就急着学框架。",[58,154788,154789],{},"不会读官方文档，只依赖教程。",[43,154791,154793],{"id":154792},"_1213-如何读报错","12.13 如何读报错",[10,154795,154796],{},"报错通常从下往上看最后几行。",[10,154798,15123],{},[92,154800,154803],{"className":154801,"code":154802,"language":5175,"meta":20},[5173],"ValueError: invalid literal for int() with base 10: 'abc'\n",[98,154804,154802],{"__ignoreMap":20},[10,154806,24588],{},[55,154808,154809,154815,154825],{},[58,154810,154811,154812,28374],{},"异常类型是 ",[98,154813,154814],{},"ValueError",[58,154816,107325,154817,154820,154821,154824],{},[98,154818,154819],{},"int()"," 无法把 ",[98,154822,154823],{},"'abc'"," 转成整数。",[58,154826,154827],{},"应该检查输入内容或增加异常处理。",[10,154829,154830],{},"再看文件名和行号：",[92,154832,154835],{"className":154833,"code":154834,"language":5175,"meta":20},[5173],"File \"main.py\", line 10, in \u003Cmodule>\n",[98,154836,154834],{"__ignoreMap":20},[10,154838,154839,154840,154842],{},"表示错误发生在 ",[98,154841,154587],{}," 第 10 行。",[43,154844,154846],{"id":154845},"_1214-后续学习方向","12.14 后续学习方向",[10,154848,154849],{},"Python 基础完成后，可以按兴趣选择方向：",[55,154851,154852,154864,154873,154885,154896,154905,154915],{},[58,154853,154854,154855,324,154858,324,154861,28374],{},"自动化办公：",[98,154856,154857],{},"openpyxl",[98,154859,154860],{},"python-docx",[98,154862,154863],{},"pdfplumber",[58,154865,154866,154867,324,154869,324,154871,28374],{},"数据分析：",[98,154868,100606],{},[98,154870,146165],{},[98,154872,146173],{},[58,154874,154875,154876,324,154879,324,154882,28374],{},"Web 后端：",[98,154877,154878],{},"Flask",[98,154880,154881],{},"FastAPI",[98,154883,154884],{},"Django",[58,154886,154887,154888,324,154890,324,154893,28374],{},"爬虫：",[98,154889,146150],{},[98,154891,154892],{},"BeautifulSoup",[98,154894,154895],{},"Scrapy",[58,154897,154898,154899,324,154901,154904],{},"测试开发：",[98,154900,146197],{},[98,154902,154903],{},"selenium","、接口测试。",[58,154906,154907,154908,324,154910,324,154912,28374],{},"人工智能：",[98,154909,100606],{},[98,154911,146165],{},[98,154913,154914],{},"pytorch",[58,154916,154917,154918,324,154920,324,154923,28374],{},"运维脚本：",[98,154919,145766],{},[98,154921,154922],{},"subprocess",[98,154924,154925],{},"paramiko",[10,154927,154928],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[43,154930,154932],{"id":154931},"_1215-结课练习","12.15 结课练习",[55,154934,154935,154938,154941,154944,154947,154950,154953,154956],{},[58,154936,154937],{},"完成函数版学生管理系统。",[58,154939,154940],{},"给学生管理系统增加 JSON 持久化。",[58,154942,154943],{},"给学生管理系统增加异常处理。",[58,154945,154946],{},"把学生管理系统改成面向对象版。",[58,154948,154949],{},"使用 pyecharts 绘制学生成绩柱状图。",[58,154951,154952],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[58,154954,154955],{},"按品类统计销售额并绘制柱状图。",[58,154957,154958],{},"写一份自己的 Python 学习路线图。",[5114,154960,154961],{},"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":20,"searchDepth":21,"depth":21,"links":154963},[154964,154965,154968,154969,154970,154976,154977,154978,154979,154980,154981,154982,154983,154984,154985],{"id":151680,"depth":21,"text":151681},{"id":151730,"depth":21,"text":151731,"children":154966},[154967],{"id":151734,"depth":1166,"text":151735},{"id":151773,"depth":21,"text":151774},{"id":153247,"depth":21,"text":153248},{"id":153585,"depth":21,"text":153586,"children":154971},[154972,154973,154974,154975],{"id":153589,"depth":1166,"text":153590},{"id":153729,"depth":1166,"text":153730},{"id":153819,"depth":1166,"text":153820},{"id":153905,"depth":1166,"text":153906},{"id":153946,"depth":21,"text":153947},{"id":154139,"depth":21,"text":154140},{"id":154376,"depth":21,"text":154377},{"id":154567,"depth":21,"text":154568},{"id":154609,"depth":21,"text":154610},{"id":154735,"depth":21,"text":154736},{"id":154765,"depth":21,"text":154766},{"id":154792,"depth":21,"text":154793},{"id":154845,"depth":21,"text":154846},{"id":154931,"depth":21,"text":154932},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151672,"description":23365},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":154992,"title":154993,"body":154994,"description":23365,"extension":24,"meta":157463,"navigation":27,"path":157464,"seo":157465,"stem":157466,"__hash__":157467},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":154995,"toc":157438},[154996,154999,155003,155006,155009,155029,155032,155055,155058,155061,155083,155086,155108,155112,155115,155155,155158,155279,155283,155286,155326,155329,155353,155356,155360,155363,155377,155410,155413,155448,155451,155474,155477,155510,155513,155515,155521,155596,155599,155605,155622,155662,155666,155669,155715,155717,155755,155758,155793,155796,155831,155834,155866,155869,155888,155892,155896,156009,156011,156086,156090,156136,156139,156165,156174,156178,156181,156244,156252,156280,156284,156324,156389,156393,156396,156435,156438,156483,156486,156547,156551,156578,156581,156609,156612,156616,156620,156685,156688,156726,156729,156761,156765,156864,156868,156871,156944,156947,156995,156999,157005,157045,157048,157095,157098,157147,157151,157153,157167,157169,157350,157354,157381,157401,157408,157412,157429,157435],[39,154997,154993],{"id":154998},"_2-基础语法变量与字符串",[43,155000,155002],{"id":155001},"_21-注释","2.1 注释",[10,155004,155005],{},"注释是给人看的说明文字，不会被 Python 执行。",[10,155007,155008],{},"单行注释：",[92,155010,155012],{"className":30367,"code":155011,"language":30369,"meta":20,"style":20},"# 这是单行注释\nprint(\"hello\")\n",[98,155013,155014,155019],{"__ignoreMap":20},[101,155015,155016],{"class":103,"line":104},[101,155017,155018],{"class":170},"# 这是单行注释\n",[101,155020,155021,155023,155025,155027],{"class":103,"line":21},[101,155022,30404],{"class":160},[101,155024,112],{"class":111},[101,155026,5832],{"class":216},[101,155028,118],{"class":111},[10,155030,155031],{},"多行说明常用三引号：",[92,155033,155035],{"className":30367,"code":155034,"language":30369,"meta":20,"style":20},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[98,155036,155037,155041,155046,155051],{"__ignoreMap":20},[101,155038,155039],{"class":103,"line":104},[101,155040,95678],{"class":216},[101,155042,155043],{"class":103,"line":21},[101,155044,155045],{"class":216},"这是多行说明。\n",[101,155047,155048],{"class":103,"line":1166},[101,155049,155050],{"class":216},"常用于文件顶部说明、函数说明等。\n",[101,155052,155053],{"class":103,"line":1181},[101,155054,95678],{"class":216},[10,155056,155057],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[10,155059,155060],{},"不好：",[92,155062,155064],{"className":30367,"code":155063,"language":30369,"meta":20,"style":20},"# age 加 1\nage = age + 1\n",[98,155065,155066,155071],{"__ignoreMap":20},[101,155067,155068],{"class":103,"line":104},[101,155069,155070],{"class":170},"# age 加 1\n",[101,155072,155073,155075,155077,155079,155081],{"class":103,"line":21},[101,155074,146526],{"class":111},[101,155076,157],{"class":107},[101,155078,15695],{"class":111},[101,155080,592],{"class":107},[101,155082,55688],{"class":160},[10,155084,155085],{},"较好：",[92,155087,155089],{"className":30367,"code":155088,"language":30369,"meta":20,"style":20},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[98,155090,155091,155096],{"__ignoreMap":20},[101,155092,155093],{"class":103,"line":104},[101,155094,155095],{"class":170},"# 用户过完生日后，年龄增加一岁\n",[101,155097,155098,155100,155102,155104,155106],{"class":103,"line":21},[101,155099,146526],{"class":111},[101,155101,157],{"class":107},[101,155103,15695],{"class":111},[101,155105,592],{"class":107},[101,155107,55688],{"class":160},[43,155109,155111],{"id":155110},"_22-字面量","2.2 字面量",[10,155113,155114],{},"字面量就是代码中直接写出来的数据。",[92,155116,155118],{"className":30367,"code":155117,"language":30369,"meta":20,"style":20},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[98,155119,155120,155127,155134,155141,155148],{"__ignoreMap":20},[101,155121,155122,155124],{"class":103,"line":104},[101,155123,422],{"class":160},[101,155125,155126],{"class":170},"          # 整数\n",[101,155128,155129,155131],{"class":103,"line":21},[101,155130,161],{"class":160},[101,155132,155133],{"class":170},"         # 小数\n",[101,155135,155136,155138],{"class":103,"line":1166},[101,155137,5832],{"class":216},[101,155139,155140],{"class":170},"      # 字符串\n",[101,155142,155143,155145],{"class":103,"line":1181},[101,155144,31465],{"class":160},[101,155146,155147],{"class":170},"         # 布尔值\n",[101,155149,155150,155152],{"class":103,"line":1187},[101,155151,95666],{"class":160},[101,155153,155154],{"class":170},"         # 空值\n",[10,155156,155157],{},"常见字面量类型：",[249,155159,155160,155170],{},[252,155161,155162],{},[255,155163,155164,155166,155168],{},[258,155165,23726],{},[258,155167,27481],{},[258,155169,25858],{},[296,155171,155172,155183,155194,155205,155217,155229,155241,155254,155266],{},[255,155173,155174,155176,155180],{},[301,155175,115],{},[301,155177,155178],{},[98,155179,422],{},[301,155181,155182],{},"整数",[255,155184,155185,155187,155191],{},[301,155186,151],{},[301,155188,155189],{},[98,155190,161],{},[301,155192,155193],{},"浮点数",[255,155195,155196,155198,155202],{},[301,155197,1286],{},[301,155199,155200],{},[98,155201,5832],{},[301,155203,155204],{},"字符串",[255,155206,155207,155209,155215],{},[301,155208,1341],{},[301,155210,155211,324,155213],{},[98,155212,31465],{},[98,155214,33976],{},[301,155216,66004],{},[255,155218,155219,155222,155226],{},[301,155220,155221],{},"NoneType",[301,155223,155224],{},[98,155225,95666],{},[301,155227,155228],{},"空值",[255,155230,155231,155233,155238],{},[301,155232,154050],{},[301,155234,155235],{},[98,155236,155237],{},"[1, 2, 3]",[301,155239,155240],{},"列表",[255,155242,155243,155246,155251],{},[301,155244,155245],{},"tuple",[301,155247,155248],{},[98,155249,155250],{},"(1, 2, 3)",[301,155252,155253],{},"元组",[255,155255,155256,155258,155263],{},[301,155257,114526],{},[301,155259,155260],{},[98,155261,155262],{},"{\"name\": \"张三\"}",[301,155264,155265],{},"字典",[255,155267,155268,155271,155276],{},[301,155269,155270],{},"set",[301,155272,155273],{},[98,155274,155275],{},"{1, 2, 3}",[301,155277,155278],{},"集合",[43,155280,155282],{"id":155281},"_23-变量","2.3 变量",[10,155284,155285],{},"变量是保存数据的名字。",[92,155287,155289],{"className":30367,"code":155288,"language":30369,"meta":20,"style":20},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[98,155290,155291,155299,155307,155317],{"__ignoreMap":20},[101,155292,155293,155295,155297],{"class":103,"line":104},[101,155294,146516],{"class":111},[101,155296,157],{"class":107},[101,155298,149333],{"class":216},[101,155300,155301,155303,155305],{"class":103,"line":21},[101,155302,146526],{"class":111},[101,155304,157],{"class":107},[101,155306,146531],{"class":160},[101,155308,155309,155312,155314],{"class":103,"line":1166},[101,155310,155311],{"class":111},"height ",[101,155313,157],{"class":107},[101,155315,155316],{"class":160}," 1.75\n",[101,155318,155319,155322,155324],{"class":103,"line":1181},[101,155320,155321],{"class":111},"is_student ",[101,155323,157],{"class":107},[101,155325,153579],{"class":160},[10,155327,155328],{},"Python 的变量不需要提前声明类型：",[92,155330,155332],{"className":30367,"code":155331,"language":30369,"meta":20,"style":20},"score = 100\nscore = \"满分\"\n",[98,155333,155334,155344],{"__ignoreMap":20},[101,155335,155336,155339,155341],{"class":103,"line":104},[101,155337,155338],{"class":111},"score ",[101,155340,157],{"class":107},[101,155342,155343],{"class":160}," 100\n",[101,155345,155346,155348,155350],{"class":103,"line":21},[101,155347,155338],{"class":111},[101,155349,157],{"class":107},[101,155351,155352],{"class":216}," \"满分\"\n",[10,155354,155355],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[43,155357,155359],{"id":155358},"_24-变量命名规则","2.4 变量命名规则",[10,155361,155362],{},"硬性规则：",[55,155364,155365,155368,155371,155374],{},[58,155366,155367],{},"只能由字母、数字、下划线组成。",[58,155369,155370],{},"不能以数字开头。",[58,155372,155373],{},"不能使用 Python 关键字。",[58,155375,155376],{},"区分大小写。",[92,155378,155380],{"className":30367,"code":155379,"language":30369,"meta":20,"style":20},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[98,155381,155382,155391,155400],{"__ignoreMap":20},[101,155383,155384,155387,155389],{"class":103,"line":104},[101,155385,155386],{"class":111},"user_name ",[101,155388,157],{"class":107},[101,155390,146521],{"class":216},[101,155392,155393,155396,155398],{"class":103,"line":21},[101,155394,155395],{"class":111},"age2 ",[101,155397,157],{"class":107},[101,155399,146531],{"class":160},[101,155401,155402,155405,155407],{"class":103,"line":1166},[101,155403,155404],{"class":111},"_token ",[101,155406,157],{"class":107},[101,155408,155409],{"class":216}," \"abc\"\n",[10,155411,155412],{},"错误写法：",[92,155414,155416],{"className":30367,"code":155415,"language":30369,"meta":20,"style":20},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[98,155417,155418,155427,155439],{"__ignoreMap":20},[101,155419,155420,155423,155425],{"class":103,"line":104},[101,155421,155422],{"class":77392},"2age",[101,155424,13552],{"class":107},[101,155426,146531],{"class":160},[101,155428,155429,155431,155433,155435,155437],{"class":103,"line":21},[101,155430,131564],{"class":111},[101,155432,643],{"class":107},[101,155434,146516],{"class":111},[101,155436,157],{"class":107},[101,155438,146521],{"class":216},[101,155440,155441,155443,155445],{"class":103,"line":1166},[101,155442,14682],{"class":107},[101,155444,13552],{"class":107},[101,155446,155447],{"class":216}," \"一班\"\n",[10,155449,155450],{},"查看关键字：",[92,155452,155454],{"className":30367,"code":155453,"language":30369,"meta":20,"style":20},"import keyword\n\nprint(keyword.kwlist)\n",[98,155455,155456,155463,155467],{"__ignoreMap":20},[101,155457,155458,155460],{"class":103,"line":104},[101,155459,30381],{"class":107},[101,155461,155462],{"class":111}," keyword\n",[101,155464,155465],{"class":103,"line":21},[101,155466,2387],{"emptyLinePlaceholder":27},[101,155468,155469,155471],{"class":103,"line":1166},[101,155470,30404],{"class":160},[101,155472,155473],{"class":111},"(keyword.kwlist)\n",[10,155475,155476],{},"推荐命名风格：",[92,155478,155480],{"className":30367,"code":155479,"language":30369,"meta":20,"style":20},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[98,155481,155482,155491,155501],{"__ignoreMap":20},[101,155483,155484,155487,155489],{"class":103,"line":104},[101,155485,155486],{"class":111},"student_name ",[101,155488,157],{"class":107},[101,155490,149333],{"class":216},[101,155492,155493,155496,155498],{"class":103,"line":21},[101,155494,155495],{"class":111},"total_price ",[101,155497,157],{"class":107},[101,155499,155500],{"class":160}," 99.8\n",[101,155502,155503,155506,155508],{"class":103,"line":1166},[101,155504,155505],{"class":111},"is_finished ",[101,155507,157],{"class":107},[101,155509,125787],{"class":160},[10,155511,155512],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[43,155514,50721],{"id":50720},[10,155516,104346,155517,155520],{},[98,155518,155519],{},"type()"," 查看数据类型：",[92,155522,155524],{"className":30367,"code":155523,"language":30369,"meta":20,"style":20},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[98,155525,155526,155540,155554,155568,155582],{"__ignoreMap":20},[101,155527,155528,155530,155532,155534,155536,155538],{"class":103,"line":104},[101,155529,30404],{"class":160},[101,155531,112],{"class":111},[101,155533,103087],{"class":160},[101,155535,112],{"class":111},[101,155537,422],{"class":160},[101,155539,30486],{"class":111},[101,155541,155542,155544,155546,155548,155550,155552],{"class":103,"line":21},[101,155543,30404],{"class":160},[101,155545,112],{"class":111},[101,155547,103087],{"class":160},[101,155549,112],{"class":111},[101,155551,161],{"class":160},[101,155553,30486],{"class":111},[101,155555,155556,155558,155560,155562,155564,155566],{"class":103,"line":1166},[101,155557,30404],{"class":160},[101,155559,112],{"class":111},[101,155561,103087],{"class":160},[101,155563,112],{"class":111},[101,155565,5832],{"class":216},[101,155567,30486],{"class":111},[101,155569,155570,155572,155574,155576,155578,155580],{"class":103,"line":1181},[101,155571,30404],{"class":160},[101,155573,112],{"class":111},[101,155575,103087],{"class":160},[101,155577,112],{"class":111},[101,155579,31465],{"class":160},[101,155581,30486],{"class":111},[101,155583,155584,155586,155588,155590,155592,155594],{"class":103,"line":1187},[101,155585,30404],{"class":160},[101,155587,112],{"class":111},[101,155589,103087],{"class":160},[101,155591,112],{"class":111},[101,155593,95666],{"class":160},[101,155595,30486],{"class":111},[10,155597,155598],{},"输出类似：",[92,155600,155603],{"className":155601,"code":155602,"language":5175,"meta":20},[5173],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[98,155604,155602],{"__ignoreMap":20},[10,155606,9013,155607,107263,155609,155611,155612,155614,155615,21488,155617,155614,155619,155621],{},[98,155608,1341],{},[98,155610,115],{}," 的子类，",[98,155613,31465],{}," 可以当作 ",[98,155616,329],{},[98,155618,33976],{},[98,155620,303],{},"，但业务代码中不要滥用。",[92,155623,155625],{"className":30367,"code":155624,"language":30369,"meta":20,"style":20},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[98,155626,155627,155645],{"__ignoreMap":20},[101,155628,155629,155631,155633,155635,155637,155639,155642],{"class":103,"line":104},[101,155630,30404],{"class":160},[101,155632,112],{"class":111},[101,155634,31465],{"class":160},[101,155636,45555],{"class":107},[101,155638,25107],{"class":160},[101,155640,155641],{"class":111},")   ",[101,155643,155644],{"class":170},"# 2\n",[101,155646,155647,155649,155651,155653,155655,155657,155659],{"class":103,"line":21},[101,155648,30404],{"class":160},[101,155650,112],{"class":111},[101,155652,33976],{"class":160},[101,155654,45555],{"class":107},[101,155656,25107],{"class":160},[101,155658,45797],{"class":111},[101,155660,155661],{"class":170},"# 1\n",[43,155663,155665],{"id":155664},"_26-类型转换","2.6 类型转换",[10,155667,155668],{},"常用转换函数：",[92,155670,155672],{"className":30367,"code":155671,"language":30369,"meta":20,"style":20},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[98,155673,155674,155684,155695,155705],{"__ignoreMap":20},[101,155675,155676,155678,155680,155682],{"class":103,"line":104},[101,155677,115],{"class":160},[101,155679,112],{"class":111},[101,155681,54305],{"class":216},[101,155683,118],{"class":111},[101,155685,155686,155688,155690,155693],{"class":103,"line":21},[101,155687,151],{"class":160},[101,155689,112],{"class":111},[101,155691,155692],{"class":216},"\"3.14\"",[101,155694,118],{"class":111},[101,155696,155697,155699,155701,155703],{"class":103,"line":1166},[101,155698,1286],{"class":160},[101,155700,112],{"class":111},[101,155702,422],{"class":160},[101,155704,118],{"class":111},[101,155706,155707,155709,155711,155713],{"class":103,"line":1181},[101,155708,1341],{"class":160},[101,155710,112],{"class":111},[101,155712,329],{"class":160},[101,155714,118],{"class":111},[10,155716,15123],{},[92,155718,155720],{"className":30367,"code":155719,"language":30369,"meta":20,"style":20},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[98,155721,155722,155731,155742],{"__ignoreMap":20},[101,155723,155724,155726,155728],{"class":103,"line":104},[101,155725,146526],{"class":111},[101,155727,157],{"class":107},[101,155729,155730],{"class":216}," \"18\"\n",[101,155732,155733,155735,155737,155739],{"class":103,"line":21},[101,155734,146526],{"class":111},[101,155736,157],{"class":107},[101,155738,2369],{"class":160},[101,155740,155741],{"class":111},"(age)\n",[101,155743,155744,155746,155749,155751,155753],{"class":103,"line":1166},[101,155745,30404],{"class":160},[101,155747,155748],{"class":111},"(age ",[101,155750,592],{"class":107},[101,155752,25107],{"class":160},[101,155754,118],{"class":111},[10,155756,155757],{},"输入得到的内容永远是字符串：",[92,155759,155761],{"className":30367,"code":155760,"language":30369,"meta":20,"style":20},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[98,155762,155763,155779],{"__ignoreMap":20},[101,155764,155765,155768,155770,155772,155774,155777],{"class":103,"line":104},[101,155766,155767],{"class":111},"num ",[101,155769,157],{"class":107},[101,155771,60594],{"class":160},[101,155773,112],{"class":111},[101,155775,155776],{"class":216},"\"请输入数字:\"",[101,155778,118],{"class":111},[101,155780,155781,155783,155785,155787,155790],{"class":103,"line":21},[101,155782,30404],{"class":160},[101,155784,112],{"class":111},[101,155786,103087],{"class":160},[101,155788,155789],{"class":111},"(num))  ",[101,155791,155792],{"class":170},"# str\n",[10,155794,155795],{},"如果要做数学运算，必须转换：",[92,155797,155799],{"className":30367,"code":155798,"language":30369,"meta":20,"style":20},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[98,155800,155801,155819],{"__ignoreMap":20},[101,155802,155803,155805,155807,155809,155811,155813,155815,155817],{"class":103,"line":104},[101,155804,155767],{"class":111},[101,155806,157],{"class":107},[101,155808,2369],{"class":160},[101,155810,112],{"class":111},[101,155812,53810],{"class":160},[101,155814,112],{"class":111},[101,155816,155776],{"class":216},[101,155818,30486],{"class":111},[101,155820,155821,155823,155825,155827,155829],{"class":103,"line":21},[101,155822,30404],{"class":160},[101,155824,45608],{"class":111},[101,155826,592],{"class":107},[101,155828,2025],{"class":160},[101,155830,118],{"class":111},[10,155832,155833],{},"常见错误：",[92,155835,155837],{"className":30367,"code":155836,"language":30369,"meta":20,"style":20},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[98,155838,155839,155852],{"__ignoreMap":20},[101,155840,155841,155843,155845,155847,155849],{"class":103,"line":104},[101,155842,115],{"class":160},[101,155844,112],{"class":111},[101,155846,155692],{"class":216},[101,155848,155641],{"class":111},[101,155850,155851],{"class":170},"# 错误\n",[101,155853,155854,155856,155858,155861,155864],{"class":103,"line":21},[101,155855,115],{"class":160},[101,155857,112],{"class":111},[101,155859,155860],{"class":216},"\"abc\"",[101,155862,155863],{"class":111},")    ",[101,155865,155851],{"class":170},[10,155867,155868],{},"正确写法：",[92,155870,155872],{"className":30367,"code":155871,"language":30369,"meta":20,"style":20},"num = float(\"3.14\")\n",[98,155873,155874],{"__ignoreMap":20},[101,155875,155876,155878,155880,155882,155884,155886],{"class":103,"line":104},[101,155877,155767],{"class":111},[101,155879,157],{"class":107},[101,155881,109777],{"class":160},[101,155883,112],{"class":111},[101,155885,155692],{"class":216},[101,155887,118],{"class":111},[43,155889,155891],{"id":155890},"_27-运算符","2.7 运算符",[72,155893,155895],{"id":155894},"_271-算术运算符","2.7.1 算术运算符",[249,155897,155898,155909],{},[252,155899,155900],{},[255,155901,155902,155905,155907],{},[258,155903,155904],{},"运算符",[258,155906,25858],{},[258,155908,27481],{},[296,155910,155911,155925,155939,155953,155967,155981,155995],{},[255,155912,155913,155917,155920],{},[301,155914,155915],{},[98,155916,592],{},[301,155918,155919],{},"加法",[301,155921,155922],{},[98,155923,155924],{},"1 + 2",[255,155926,155927,155931,155934],{},[301,155928,155929],{},[98,155930,643],{},[301,155932,155933],{},"减法",[301,155935,155936],{},[98,155937,155938],{},"5 - 3",[255,155940,155941,155945,155948],{},[301,155942,155943],{},[98,155944,566],{},[301,155946,155947],{},"乘法",[301,155949,155950],{},[98,155951,155952],{},"2 * 3",[255,155954,155955,155959,155962],{},[301,155956,155957],{},[98,155958,695],{},[301,155960,155961],{},"除法，结果是浮点数",[301,155963,155964],{},[98,155965,155966],{},"5 \u002F 2",[255,155968,155969,155973,155976],{},[301,155970,155971],{},[98,155972,33318],{},[301,155974,155975],{},"整除",[301,155977,155978],{},[98,155979,155980],{},"5 \u002F\u002F 2",[255,155982,155983,155987,155990],{},[301,155984,155985],{},[98,155986,439],{},[301,155988,155989],{},"取余",[301,155991,155992],{},[98,155993,155994],{},"5 % 2",[255,155996,155997,156001,156004],{},[301,155998,155999],{},[98,156000,10649],{},[301,156002,156003],{},"幂运算",[301,156005,156006],{},[98,156007,156008],{},"2 ** 3",[10,156010,15123],{},[92,156012,156014],{"className":30367,"code":156013,"language":30369,"meta":20,"style":20},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[98,156015,156016,156034,156051,156068],{"__ignoreMap":20},[101,156017,156018,156020,156022,156024,156027,156029,156031],{"class":103,"line":104},[101,156019,30404],{"class":160},[101,156021,112],{"class":111},[101,156023,430],{"class":160},[101,156025,156026],{"class":107}," \u002F",[101,156028,14743],{"class":160},[101,156030,155641],{"class":111},[101,156032,156033],{"class":170},"# 2.5\n",[101,156035,156036,156038,156040,156042,156045,156047,156049],{"class":103,"line":21},[101,156037,30404],{"class":160},[101,156039,112],{"class":111},[101,156041,430],{"class":160},[101,156043,156044],{"class":107}," \u002F\u002F",[101,156046,14743],{"class":160},[101,156048,45797],{"class":111},[101,156050,155644],{"class":170},[101,156052,156053,156055,156057,156059,156062,156064,156066],{"class":103,"line":1166},[101,156054,30404],{"class":160},[101,156056,112],{"class":111},[101,156058,430],{"class":160},[101,156060,156061],{"class":107}," %",[101,156063,14743],{"class":160},[101,156065,155641],{"class":111},[101,156067,155661],{"class":170},[101,156069,156070,156072,156074,156076,156079,156081,156083],{"class":103,"line":1181},[101,156071,30404],{"class":160},[101,156073,112],{"class":111},[101,156075,189],{"class":160},[101,156077,156078],{"class":107}," **",[101,156080,78059],{"class":160},[101,156082,45797],{"class":111},[101,156084,156085],{"class":170},"# 8\n",[72,156087,156089],{"id":156088},"_272-赋值运算符","2.7.2 赋值运算符",[92,156091,156093],{"className":30367,"code":156092,"language":30369,"meta":20,"style":20},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[98,156094,156095,156103,156111,156119,156127],{"__ignoreMap":20},[101,156096,156097,156099,156101],{"class":103,"line":104},[101,156098,155767],{"class":111},[101,156100,157],{"class":107},[101,156102,58417],{"class":160},[101,156104,156105,156107,156109],{"class":103,"line":21},[101,156106,155767],{"class":111},[101,156108,9465],{"class":107},[101,156110,54416],{"class":160},[101,156112,156113,156115,156117],{"class":103,"line":1166},[101,156114,155767],{"class":111},[101,156116,150232],{"class":107},[101,156118,47712],{"class":160},[101,156120,156121,156123,156125],{"class":103,"line":1181},[101,156122,155767],{"class":111},[101,156124,137128],{"class":107},[101,156126,120016],{"class":160},[101,156128,156129,156131,156134],{"class":103,"line":1187},[101,156130,155767],{"class":111},[101,156132,156133],{"class":107},"\u002F=",[101,156135,47712],{"class":160},[10,156137,156138],{},"等价关系：",[92,156140,156142],{"className":30367,"code":156141,"language":30369,"meta":20,"style":20},"num += 1\nnum = num + 1\n",[98,156143,156144,156152],{"__ignoreMap":20},[101,156145,156146,156148,156150],{"class":103,"line":104},[101,156147,155767],{"class":111},[101,156149,9465],{"class":107},[101,156151,55688],{"class":160},[101,156153,156154,156156,156158,156161,156163],{"class":103,"line":21},[101,156155,155767],{"class":111},[101,156157,157],{"class":107},[101,156159,156160],{"class":111}," num ",[101,156162,592],{"class":107},[101,156164,55688],{"class":160},[10,156166,156167,156168,100998,156171,28374],{},"Python 没有 ",[98,156169,156170],{},"num++",[98,156172,156173],{},"num--",[72,156175,156177],{"id":156176},"_273-比较运算符","2.7.3 比较运算符",[10,156179,156180],{},"比较运算结果是布尔值。",[92,156182,156184],{"className":30367,"code":156183,"language":30369,"meta":20,"style":20},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[98,156185,156186,156200,156215,156229],{"__ignoreMap":20},[101,156187,156188,156190,156192,156194,156196,156198],{"class":103,"line":104},[101,156189,30404],{"class":160},[101,156191,112],{"class":111},[101,156193,557],{"class":160},[101,156195,26211],{"class":107},[101,156197,2135],{"class":160},[101,156199,118],{"class":111},[101,156201,156202,156204,156206,156208,156211,156213],{"class":103,"line":21},[101,156203,30404],{"class":160},[101,156205,112],{"class":111},[101,156207,557],{"class":160},[101,156209,156210],{"class":107}," >=",[101,156212,2025],{"class":160},[101,156214,118],{"class":111},[101,156216,156217,156219,156221,156223,156225,156227],{"class":103,"line":1166},[101,156218,30404],{"class":160},[101,156220,112],{"class":111},[101,156222,557],{"class":160},[101,156224,101539],{"class":107},[101,156226,2070],{"class":160},[101,156228,118],{"class":111},[101,156230,156231,156233,156235,156237,156240,156242],{"class":103,"line":1181},[101,156232,30404],{"class":160},[101,156234,112],{"class":111},[101,156236,557],{"class":160},[101,156238,156239],{"class":107}," !=",[101,156241,2070],{"class":160},[101,156243,118],{"class":111},[10,156245,156246,156247,156249,156250,28374],{},"注意：判断相等用 ",[98,156248,2936],{},"，赋值用 ",[98,156251,157],{},[92,156253,156255],{"className":30367,"code":156254,"language":30369,"meta":20,"style":20},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[98,156256,156257,156269],{"__ignoreMap":20},[101,156258,156259,156261,156263,156266],{"class":103,"line":104},[101,156260,146526],{"class":111},[101,156262,157],{"class":107},[101,156264,156265],{"class":160}," 18",[101,156267,156268],{"class":170},"       # 赋值\n",[101,156270,156271,156273,156275,156277],{"class":103,"line":21},[101,156272,146526],{"class":111},[101,156274,2936],{"class":107},[101,156276,156265],{"class":160},[101,156278,156279],{"class":170},"      # 判断是否相等\n",[72,156281,156283],{"id":156282},"_274-逻辑运算符","2.7.4 逻辑运算符",[249,156285,156286,156294],{},[252,156287,156288],{},[255,156289,156290,156292],{},[258,156291,155904],{},[258,156293,25858],{},[296,156295,156296,156305,156314],{},[255,156297,156298,156302],{},[301,156299,156300],{},[98,156301,30451],{},[301,156303,156304],{},"并且",[255,156306,156307,156311],{},[301,156308,156309],{},[98,156310,115070],{},[301,156312,156313],{},"或者",[255,156315,156316,156321],{},[301,156317,156318],{},[98,156319,156320],{},"not",[301,156322,156323],{},"取反",[92,156325,156327],{"className":30367,"code":156326,"language":30369,"meta":20,"style":20},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[98,156328,156329,156337,156346,156350,156365,156379],{"__ignoreMap":20},[101,156330,156331,156333,156335],{"class":103,"line":104},[101,156332,146526],{"class":111},[101,156334,157],{"class":107},[101,156336,88054],{"class":160},[101,156338,156339,156342,156344],{"class":103,"line":21},[101,156340,156341],{"class":111},"has_ticket ",[101,156343,157],{"class":107},[101,156345,153579],{"class":160},[101,156347,156348],{"class":103,"line":1166},[101,156349,2387],{"emptyLinePlaceholder":27},[101,156351,156352,156354,156356,156358,156360,156362],{"class":103,"line":1181},[101,156353,30404],{"class":160},[101,156355,155748],{"class":111},[101,156357,1697],{"class":107},[101,156359,156265],{"class":160},[101,156361,120409],{"class":107},[101,156363,156364],{"class":111}," has_ticket)\n",[101,156366,156367,156369,156371,156373,156375,156377],{"class":103,"line":1187},[101,156368,30404],{"class":160},[101,156370,155748],{"class":111},[101,156372,1021],{"class":107},[101,156374,156265],{"class":160},[101,156376,114181],{"class":107},[101,156378,156364],{"class":111},[101,156380,156381,156383,156385,156387],{"class":103,"line":1201},[101,156382,30404],{"class":160},[101,156384,112],{"class":111},[101,156386,156320],{"class":107},[101,156388,156364],{"class":111},[43,156390,156392],{"id":156391},"_28-字符串定义","2.8 字符串定义",[10,156394,156395],{},"三种常见写法：",[92,156397,156399],{"className":30367,"code":156398,"language":30369,"meta":20,"style":20},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[98,156400,156401,156411,156420,156430],{"__ignoreMap":20},[101,156402,156403,156406,156408],{"class":103,"line":104},[101,156404,156405],{"class":111},"name1 ",[101,156407,157],{"class":107},[101,156409,156410],{"class":216}," '小明'\n",[101,156412,156413,156416,156418],{"class":103,"line":21},[101,156414,156415],{"class":111},"name2 ",[101,156417,157],{"class":107},[101,156419,149333],{"class":216},[101,156421,156422,156425,156427],{"class":103,"line":1166},[101,156423,156424],{"class":111},"text ",[101,156426,157],{"class":107},[101,156428,156429],{"class":216}," \"\"\"这是多行字符串\n",[101,156431,156432],{"class":103,"line":1181},[101,156433,156434],{"class":216},"可以换行\"\"\"\n",[10,156436,156437],{},"字符串中包含引号：",[92,156439,156441],{"className":30367,"code":156440,"language":30369,"meta":20,"style":20},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[98,156442,156443,156453,156463],{"__ignoreMap":20},[101,156444,156445,156448,156450],{"class":103,"line":104},[101,156446,156447],{"class":111},"msg ",[101,156449,157],{"class":107},[101,156451,156452],{"class":216}," \"他说:'你好'\"\n",[101,156454,156455,156458,156460],{"class":103,"line":21},[101,156456,156457],{"class":111},"msg2 ",[101,156459,157],{"class":107},[101,156461,156462],{"class":216}," '他说:\"你好\"'\n",[101,156464,156465,156468,156470,156473,156476,156479,156481],{"class":103,"line":1166},[101,156466,156467],{"class":111},"msg3 ",[101,156469,157],{"class":107},[101,156471,156472],{"class":216}," \"他说:",[101,156474,156475],{"class":160},"\\\"",[101,156477,156478],{"class":216},"你好",[101,156480,156475],{"class":160},[101,156482,25122],{"class":216},[10,156484,156485],{},"常见转义字符：",[249,156487,156488,156497],{},[252,156489,156490],{},[255,156491,156492,156495],{},[258,156493,156494],{},"写法",[258,156496,100680],{},[296,156498,156499,156509,156518,156528,156537],{},[255,156500,156501,156506],{},[301,156502,156503],{},[98,156504,156505],{},"\\n",[301,156507,156508],{},"换行",[255,156510,156511,156515],{},[301,156512,156513],{},[98,156514,1217],{},[301,156516,156517],{},"制表符",[255,156519,156520,156525],{},[301,156521,156522],{},[98,156523,156524],{},"\\\\",[301,156526,156527],{},"反斜杠",[255,156529,156530,156534],{},[301,156531,156532],{},[98,156533,156475],{},[301,156535,156536],{},"双引号",[255,156538,156539,156544],{},[301,156540,156541],{},[98,156542,156543],{},"\\'",[301,156545,156546],{},"单引号",[43,156548,156550],{"id":156549},"_29-字符串拼接","2.9 字符串拼接",[92,156552,156554],{"className":30367,"code":156553,"language":30369,"meta":20,"style":20},"name = \"小明\"\nprint(\"你好，\" + name)\n",[98,156555,156556,156564],{"__ignoreMap":20},[101,156557,156558,156560,156562],{"class":103,"line":104},[101,156559,146516],{"class":111},[101,156561,157],{"class":107},[101,156563,149333],{"class":216},[101,156565,156566,156568,156570,156573,156575],{"class":103,"line":21},[101,156567,30404],{"class":160},[101,156569,112],{"class":111},[101,156571,156572],{"class":216},"\"你好，\"",[101,156574,45555],{"class":107},[101,156576,156577],{"class":111}," name)\n",[10,156579,156580],{},"字符串只能和字符串拼接：",[92,156582,156584],{"className":30367,"code":156583,"language":30369,"meta":20,"style":20},"age = 18\nprint(\"年龄:\" + str(age))\n",[98,156585,156586,156594],{"__ignoreMap":20},[101,156587,156588,156590,156592],{"class":103,"line":104},[101,156589,146526],{"class":111},[101,156591,157],{"class":107},[101,156593,146531],{"class":160},[101,156595,156596,156598,156600,156602,156604,156606],{"class":103,"line":21},[101,156597,30404],{"class":160},[101,156599,112],{"class":111},[101,156601,146497],{"class":216},[101,156603,45555],{"class":107},[101,156605,73908],{"class":160},[101,156607,156608],{"class":111},"(age))\n",[10,156610,156611],{},"更推荐使用格式化字符串。",[43,156613,156615],{"id":156614},"_210-字符串格式化","2.10 字符串格式化",[72,156617,156619],{"id":156618},"_2101-百分号格式化","2.10.1 百分号格式化",[92,156621,156623],{"className":30367,"code":156622,"language":30369,"meta":20,"style":20},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[98,156624,156625,156633,156641,156650,156654],{"__ignoreMap":20},[101,156626,156627,156629,156631],{"class":103,"line":104},[101,156628,146516],{"class":111},[101,156630,157],{"class":107},[101,156632,149333],{"class":216},[101,156634,156635,156637,156639],{"class":103,"line":21},[101,156636,146526],{"class":111},[101,156638,157],{"class":107},[101,156640,146531],{"class":160},[101,156642,156643,156645,156647],{"class":103,"line":1166},[101,156644,155338],{"class":111},[101,156646,157],{"class":107},[101,156648,156649],{"class":160}," 95.5\n",[101,156651,156652],{"class":103,"line":1181},[101,156653,2387],{"emptyLinePlaceholder":27},[101,156655,156656,156658,156660,156663,156666,156669,156672,156675,156678,156680,156682],{"class":103,"line":1187},[101,156657,30404],{"class":160},[101,156659,112],{"class":111},[101,156661,156662],{"class":216},"\"姓名:",[101,156664,156665],{"class":160},"%s",[101,156667,156668],{"class":216}," 年龄:",[101,156670,156671],{"class":160},"%d",[101,156673,156674],{"class":216}," 分数:",[101,156676,156677],{"class":160},"%.1f",[101,156679,362],{"class":216},[101,156681,156061],{"class":107},[101,156683,156684],{"class":111}," (name, age, score))\n",[10,156686,156687],{},"常用占位符：",[249,156689,156690,156699],{},[252,156691,156692],{},[255,156693,156694,156697],{},[258,156695,156696],{},"占位符",[258,156698,25858],{},[296,156700,156701,156709,156717],{},[255,156702,156703,156707],{},[301,156704,156705],{},[98,156706,156665],{},[301,156708,155204],{},[255,156710,156711,156715],{},[301,156712,156713],{},[98,156714,156671],{},[301,156716,155182],{},[255,156718,156719,156724],{},[301,156720,156721],{},[98,156722,156723],{},"%f",[301,156725,155193],{},[10,156727,156728],{},"精度控制：",[92,156730,156732],{"className":30367,"code":156731,"language":30369,"meta":20,"style":20},"price = 12.3456\nprint(\"%.2f\" % price)\n",[98,156733,156734,156743],{"__ignoreMap":20},[101,156735,156736,156738,156740],{"class":103,"line":104},[101,156737,146661],{"class":111},[101,156739,157],{"class":107},[101,156741,156742],{"class":160}," 12.3456\n",[101,156744,156745,156747,156749,156751,156754,156756,156758],{"class":103,"line":21},[101,156746,30404],{"class":160},[101,156748,112],{"class":111},[101,156750,362],{"class":216},[101,156752,156753],{"class":160},"%.2f",[101,156755,362],{"class":216},[101,156757,156061],{"class":107},[101,156759,156760],{"class":111}," price)\n",[72,156762,156764],{"id":156763},"_2102-format方法","2.10.2 format方法",[92,156766,156768],{"className":30367,"code":156767,"language":30369,"meta":20,"style":20},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[98,156769,156770,156778,156786,156790,156809,156829],{"__ignoreMap":20},[101,156771,156772,156774,156776],{"class":103,"line":104},[101,156773,146516],{"class":111},[101,156775,157],{"class":107},[101,156777,149333],{"class":216},[101,156779,156780,156782,156784],{"class":103,"line":21},[101,156781,146526],{"class":111},[101,156783,157],{"class":107},[101,156785,146531],{"class":160},[101,156787,156788],{"class":103,"line":1166},[101,156789,2387],{"emptyLinePlaceholder":27},[101,156791,156792,156794,156796,156798,156800,156802,156804,156806],{"class":103,"line":1181},[101,156793,30404],{"class":160},[101,156795,112],{"class":111},[101,156797,156662],{"class":216},[101,156799,32448],{"class":160},[101,156801,156668],{"class":216},[101,156803,32448],{"class":160},[101,156805,362],{"class":216},[101,156807,156808],{"class":111},".format(name, age))\n",[101,156810,156811,156813,156815,156817,156820,156822,156825,156827],{"class":103,"line":1187},[101,156812,30404],{"class":160},[101,156814,112],{"class":111},[101,156816,156662],{"class":216},[101,156818,156819],{"class":160},"{0}",[101,156821,156668],{"class":216},[101,156823,156824],{"class":160},"{1}",[101,156826,362],{"class":216},[101,156828,156808],{"class":111},[101,156830,156831,156833,156835,156837,156840,156842,156845,156847,156850,156852,156854,156857,156859,156861],{"class":103,"line":1201},[101,156832,30404],{"class":160},[101,156834,112],{"class":111},[101,156836,156662],{"class":216},[101,156838,156839],{"class":160},"{name}",[101,156841,156668],{"class":216},[101,156843,156844],{"class":160},"{age}",[101,156846,362],{"class":216},[101,156848,156849],{"class":111},".format(",[101,156851,79799],{"class":5204},[101,156853,157],{"class":107},[101,156855,156856],{"class":111},"name, ",[101,156858,70210],{"class":5204},[101,156860,157],{"class":107},[101,156862,156863],{"class":111},"age))\n",[72,156865,156867],{"id":156866},"_2103-f-string","2.10.3 f-string",[10,156869,156870],{},"推荐写法：",[92,156872,156874],{"className":30367,"code":156873,"language":30369,"meta":20,"style":20},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[98,156875,156876,156884,156892,156900,156904],{"__ignoreMap":20},[101,156877,156878,156880,156882],{"class":103,"line":104},[101,156879,146516],{"class":111},[101,156881,157],{"class":107},[101,156883,149333],{"class":216},[101,156885,156886,156888,156890],{"class":103,"line":21},[101,156887,146526],{"class":111},[101,156889,157],{"class":107},[101,156891,146531],{"class":160},[101,156893,156894,156896,156898],{"class":103,"line":1166},[101,156895,155338],{"class":111},[101,156897,157],{"class":107},[101,156899,156649],{"class":160},[101,156901,156902],{"class":103,"line":1181},[101,156903,2387],{"emptyLinePlaceholder":27},[101,156905,156906,156908,156910,156912,156914,156916,156918,156920,156922,156924,156926,156928,156930,156932,156935,156938,156940,156942],{"class":103,"line":1187},[101,156907,30404],{"class":160},[101,156909,112],{"class":111},[101,156911,164],{"class":107},[101,156913,156662],{"class":216},[101,156915,1007],{"class":160},[101,156917,79799],{"class":111},[101,156919,1057],{"class":160},[101,156921,156668],{"class":216},[101,156923,1007],{"class":160},[101,156925,70210],{"class":111},[101,156927,1057],{"class":160},[101,156929,156674],{"class":216},[101,156931,1007],{"class":160},[101,156933,156934],{"class":111},"score",[101,156936,156937],{"class":107},":.1f",[101,156939,1057],{"class":160},[101,156941,362],{"class":216},[101,156943,118],{"class":111},[10,156945,156946],{},"表达式也可以放进去：",[92,156948,156950],{"className":30367,"code":156949,"language":30369,"meta":20,"style":20},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[98,156951,156952,156960,156968],{"__ignoreMap":20},[101,156953,156954,156956,156958],{"class":103,"line":104},[101,156955,146661],{"class":111},[101,156957,157],{"class":107},[101,156959,146666],{"class":160},[101,156961,156962,156964,156966],{"class":103,"line":21},[101,156963,146671],{"class":111},[101,156965,157],{"class":107},[101,156967,54416],{"class":160},[101,156969,156970,156972,156974,156976,156979,156981,156983,156985,156988,156990,156993],{"class":103,"line":1166},[101,156971,30404],{"class":160},[101,156973,112],{"class":111},[101,156975,164],{"class":107},[101,156977,156978],{"class":216},"\"总价:",[101,156980,1007],{"class":160},[101,156982,146661],{"class":111},[101,156984,566],{"class":107},[101,156986,156987],{"class":111}," count",[101,156989,1057],{"class":160},[101,156991,156992],{"class":216},"元\"",[101,156994,118],{"class":111},[43,156996,156998],{"id":156997},"_211-input输入","2.11 input输入",[10,157000,157001,157004],{},[98,157002,157003],{},"input()"," 会暂停程序，等待用户输入。",[92,157006,157008],{"className":30367,"code":157007,"language":30369,"meta":20,"style":20},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[98,157009,157010,157024],{"__ignoreMap":20},[101,157011,157012,157014,157016,157018,157020,157022],{"class":103,"line":104},[101,157013,146516],{"class":111},[101,157015,157],{"class":107},[101,157017,60594],{"class":160},[101,157019,112],{"class":111},[101,157021,152359],{"class":216},[101,157023,118],{"class":111},[101,157025,157026,157028,157030,157032,157035,157037,157039,157041,157043],{"class":103,"line":21},[101,157027,30404],{"class":160},[101,157029,112],{"class":111},[101,157031,164],{"class":107},[101,157033,157034],{"class":216},"\"你好，",[101,157036,1007],{"class":160},[101,157038,79799],{"class":111},[101,157040,1057],{"class":160},[101,157042,362],{"class":216},[101,157044,118],{"class":111},[10,157046,157047],{},"输入整数：",[92,157049,157051],{"className":30367,"code":157050,"language":30369,"meta":20,"style":20},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[98,157052,157053,157071],{"__ignoreMap":20},[101,157054,157055,157057,157059,157061,157063,157065,157067,157069],{"class":103,"line":104},[101,157056,146526],{"class":111},[101,157058,157],{"class":107},[101,157060,2369],{"class":160},[101,157062,112],{"class":111},[101,157064,53810],{"class":160},[101,157066,112],{"class":111},[101,157068,152374],{"class":216},[101,157070,30486],{"class":111},[101,157072,157073,157075,157077,157079,157082,157084,157086,157088,157091,157093],{"class":103,"line":21},[101,157074,30404],{"class":160},[101,157076,112],{"class":111},[101,157078,164],{"class":107},[101,157080,157081],{"class":216},"\"明年你",[101,157083,1007],{"class":160},[101,157085,146526],{"class":111},[101,157087,592],{"class":107},[101,157089,157090],{"class":160}," 1}",[101,157092,149384],{"class":216},[101,157094,118],{"class":111},[10,157096,157097],{},"输入小数：",[92,157099,157101],{"className":30367,"code":157100,"language":30369,"meta":20,"style":20},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[98,157102,157103,157122],{"__ignoreMap":20},[101,157104,157105,157107,157109,157111,157113,157115,157117,157120],{"class":103,"line":104},[101,157106,155311],{"class":111},[101,157108,157],{"class":107},[101,157110,109777],{"class":160},[101,157112,112],{"class":111},[101,157114,53810],{"class":160},[101,157116,112],{"class":111},[101,157118,157119],{"class":216},"\"请输入身高:\"",[101,157121,30486],{"class":111},[101,157123,157124,157126,157128,157130,157133,157135,157137,157140,157142,157145],{"class":103,"line":21},[101,157125,30404],{"class":160},[101,157127,112],{"class":111},[101,157129,164],{"class":107},[101,157131,157132],{"class":216},"\"身高:",[101,157134,1007],{"class":160},[101,157136,24970],{"class":111},[101,157138,157139],{"class":107},":.2f",[101,157141,1057],{"class":160},[101,157143,157144],{"class":216},"米\"",[101,157146,118],{"class":111},[43,157148,157150],{"id":157149},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[10,157152,123272],{},[55,157154,157155,157158,157161,157164],{},[58,157156,157157],{},"输入商品单价。",[58,157159,157160],{},"输入购买数量。",[58,157162,157163],{},"输入折扣，例如 0.8 表示八折。",[58,157165,157166],{},"输出最终金额，保留两位小数。",[10,157168,10023],{},[92,157170,157172],{"className":30367,"code":157171,"language":30369,"meta":20,"style":20},"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",[98,157173,157174,157193,157212,157232,157236,157256,157260,157283,157304,157326],{"__ignoreMap":20},[101,157175,157176,157178,157180,157182,157184,157186,157188,157191],{"class":103,"line":104},[101,157177,146661],{"class":111},[101,157179,157],{"class":107},[101,157181,109777],{"class":160},[101,157183,112],{"class":111},[101,157185,53810],{"class":160},[101,157187,112],{"class":111},[101,157189,157190],{"class":216},"\"请输入商品单价:\"",[101,157192,30486],{"class":111},[101,157194,157195,157197,157199,157201,157203,157205,157207,157210],{"class":103,"line":21},[101,157196,146671],{"class":111},[101,157198,157],{"class":107},[101,157200,2369],{"class":160},[101,157202,112],{"class":111},[101,157204,53810],{"class":160},[101,157206,112],{"class":111},[101,157208,157209],{"class":216},"\"请输入购买数量:\"",[101,157211,30486],{"class":111},[101,157213,157214,157217,157219,157221,157223,157225,157227,157230],{"class":103,"line":1166},[101,157215,157216],{"class":111},"discount ",[101,157218,157],{"class":107},[101,157220,109777],{"class":160},[101,157222,112],{"class":111},[101,157224,53810],{"class":160},[101,157226,112],{"class":111},[101,157228,157229],{"class":216},"\"请输入折扣:\"",[101,157231,30486],{"class":111},[101,157233,157234],{"class":103,"line":1181},[101,157235,2387],{"emptyLinePlaceholder":27},[101,157237,157238,157241,157243,157246,157248,157251,157253],{"class":103,"line":1187},[101,157239,157240],{"class":111},"total ",[101,157242,157],{"class":107},[101,157244,157245],{"class":111}," price ",[101,157247,566],{"class":107},[101,157249,157250],{"class":111}," count ",[101,157252,566],{"class":107},[101,157254,157255],{"class":111}," discount\n",[101,157257,157258],{"class":103,"line":1201},[101,157259,2387],{"emptyLinePlaceholder":27},[101,157261,157262,157264,157266,157268,157271,157273,157275,157277,157279,157281],{"class":103,"line":1207},[101,157263,30404],{"class":160},[101,157265,112],{"class":111},[101,157267,164],{"class":107},[101,157269,157270],{"class":216},"\"商品单价:",[101,157272,1007],{"class":160},[101,157274,79804],{"class":111},[101,157276,157139],{"class":107},[101,157278,1057],{"class":160},[101,157280,362],{"class":216},[101,157282,118],{"class":111},[101,157284,157285,157287,157289,157291,157294,157296,157298,157300,157302],{"class":103,"line":1298},[101,157286,30404],{"class":160},[101,157288,112],{"class":111},[101,157290,164],{"class":107},[101,157292,157293],{"class":216},"\"购买数量:",[101,157295,1007],{"class":160},[101,157297,84423],{"class":111},[101,157299,1057],{"class":160},[101,157301,362],{"class":216},[101,157303,118],{"class":111},[101,157305,157306,157308,157310,157312,157315,157317,157320,157322,157324],{"class":103,"line":1304},[101,157307,30404],{"class":160},[101,157309,112],{"class":111},[101,157311,164],{"class":107},[101,157313,157314],{"class":216},"\"折扣:",[101,157316,1007],{"class":160},[101,157318,157319],{"class":111},"discount",[101,157321,1057],{"class":160},[101,157323,362],{"class":216},[101,157325,118],{"class":111},[101,157327,157328,157330,157332,157334,157337,157339,157342,157344,157346,157348],{"class":103,"line":1316},[101,157329,30404],{"class":160},[101,157331,112],{"class":111},[101,157333,164],{"class":107},[101,157335,157336],{"class":216},"\"应付金额:",[101,157338,1007],{"class":160},[101,157340,157341],{"class":111},"total",[101,157343,157139],{"class":107},[101,157345,1057],{"class":160},[101,157347,156992],{"class":216},[101,157349,118],{"class":111},[43,157351,157353],{"id":157352},"_213-易错点","2.13 易错点",[55,157355,157356,157361,157367,157375,157378],{},[58,157357,157358,157360],{},[98,157359,157003],{}," 的结果是字符串，做运算前要转换。",[58,157362,157363,157364,28374],{},"字符串拼接时，数字要先 ",[98,157365,157366],{},"str()",[58,157368,157369,157371,157372,157374],{},[98,157370,157],{}," 是赋值，",[98,157373,2936],{}," 是比较。",[58,157376,157377],{},"Python 没有自增自减运算符。",[58,157379,157380],{},"浮点数计算可能有精度误差：",[92,157382,157384],{"className":30367,"code":157383,"language":30369,"meta":20,"style":20},"print(0.1 + 0.2)\n",[98,157385,157386],{"__ignoreMap":20},[101,157387,157388,157390,157392,157394,157396,157399],{"class":103,"line":104},[101,157389,30404],{"class":160},[101,157391,112],{"class":111},[101,157393,86199],{"class":160},[101,157395,45555],{"class":107},[101,157397,157398],{"class":160}," 0.2",[101,157400,118],{"class":111},[10,157402,157403,157404,157407],{},"金额计算如果要求严格，可以后续学习 ",[98,157405,157406],{},"decimal"," 模块。",[43,157409,157411],{"id":157410},"_214-本章练习","2.14 本章练习",[55,157413,157414,157417,157420,157423,157426],{},[58,157415,157416],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[58,157418,157419],{},"输入圆的半径，计算面积，保留两位小数。",[58,157421,157422],{},"输入工资和奖金，计算总收入。",[58,157424,157425],{},"输入摄氏温度，转换为华氏温度。",[58,157427,157428],{},"写一个 BMI 计算程序：",[92,157430,157433],{"className":157431,"code":157432,"language":5175,"meta":20},[5173],"BMI = 体重kg \u002F 身高m ** 2\n",[98,157434,157432],{"__ignoreMap":20},[5114,157436,157437],{},"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":20,"searchDepth":21,"depth":21,"links":157439},[157440,157441,157442,157443,157444,157445,157446,157452,157453,157454,157459,157460,157461,157462],{"id":155001,"depth":21,"text":155002},{"id":155110,"depth":21,"text":155111},{"id":155281,"depth":21,"text":155282},{"id":155358,"depth":21,"text":155359},{"id":50720,"depth":21,"text":50721},{"id":155664,"depth":21,"text":155665},{"id":155890,"depth":21,"text":155891,"children":157447},[157448,157449,157450,157451],{"id":155894,"depth":1166,"text":155895},{"id":156088,"depth":1166,"text":156089},{"id":156176,"depth":1166,"text":156177},{"id":156282,"depth":1166,"text":156283},{"id":156391,"depth":21,"text":156392},{"id":156549,"depth":21,"text":156550},{"id":156614,"depth":21,"text":156615,"children":157455},[157456,157457,157458],{"id":156618,"depth":1166,"text":156619},{"id":156763,"depth":1166,"text":156764},{"id":156866,"depth":1166,"text":156867},{"id":156997,"depth":21,"text":156998},{"id":157149,"depth":21,"text":157150},{"id":157352,"depth":21,"text":157353},{"id":157410,"depth":21,"text":157411},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":154993,"description":23365},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157469,"title":157470,"body":157471,"description":23365,"extension":24,"meta":159107,"navigation":27,"path":159108,"seo":159109,"stem":159110,"__hash__":159111},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157472,"toc":159088},[157473,157476,157480,157483,157498,157501,157529,157533,157583,157585,157601,157604,157630,157633,157637,157704,157707,157723,157727,157730,157848,157851,157858,157907,157913,157917,157920,158033,158036,158040,158044,158047,158097,158101,158104,158154,158158,158161,158199,158203,158206,158252,158255,158290,158294,158299,158302,158348,158350,158417,158421,158427,158538,158547,158551,158553,158564,158566,158732,158736,158738,158752,158754,158968,158972,158991,159008,159011,159057,159061,159085],[39,157474,157470],{"id":157475},"_3-判断语句",[43,157477,157479],{"id":157478},"_31-布尔值","3.1 布尔值",[10,157481,157482],{},"判断语句依赖布尔值：",[92,157484,157486],{"className":30367,"code":157485,"language":30369,"meta":20,"style":20},"True\nFalse\n",[98,157487,157488,157493],{"__ignoreMap":20},[101,157489,157490],{"class":103,"line":104},[101,157491,157492],{"class":160},"True\n",[101,157494,157495],{"class":103,"line":21},[101,157496,157497],{"class":160},"False\n",[10,157499,157500],{},"比较表达式会产生布尔值：",[92,157502,157504],{"className":30367,"code":157503,"language":30369,"meta":20,"style":20},"age = 18\nprint(age >= 18)  # True\n",[98,157505,157506,157514],{"__ignoreMap":20},[101,157507,157508,157510,157512],{"class":103,"line":104},[101,157509,146526],{"class":111},[101,157511,157],{"class":107},[101,157513,146531],{"class":160},[101,157515,157516,157518,157520,157522,157524,157526],{"class":103,"line":21},[101,157517,30404],{"class":160},[101,157519,155748],{"class":111},[101,157521,1697],{"class":107},[101,157523,156265],{"class":160},[101,157525,45797],{"class":111},[101,157527,157528],{"class":170},"# True\n",[43,157530,157532],{"id":157531},"_32-if基础语法","3.2 if基础语法",[92,157534,157536],{"className":30367,"code":157535,"language":30369,"meta":20,"style":20},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[98,157537,157538,157556,157560,157572],{"__ignoreMap":20},[101,157539,157540,157542,157544,157546,157548,157550,157552,157554],{"class":103,"line":104},[101,157541,146526],{"class":111},[101,157543,157],{"class":107},[101,157545,2369],{"class":160},[101,157547,112],{"class":111},[101,157549,53810],{"class":160},[101,157551,112],{"class":111},[101,157553,152374],{"class":216},[101,157555,30486],{"class":111},[101,157557,157558],{"class":103,"line":21},[101,157559,2387],{"emptyLinePlaceholder":27},[101,157561,157562,157564,157566,157568,157570],{"class":103,"line":1166},[101,157563,1518],{"class":107},[101,157565,15695],{"class":111},[101,157567,1697],{"class":107},[101,157569,156265],{"class":160},[101,157571,3726],{"class":111},[101,157573,157574,157576,157578,157581],{"class":103,"line":1181},[101,157575,31288],{"class":160},[101,157577,112],{"class":111},[101,157579,157580],{"class":216},"\"可以进入网吧\"",[101,157582,118],{"class":111},[10,157584,9013],{},[55,157586,157587,157592,157595,157598],{},[58,157588,157589,157591],{},[98,157590,1518],{}," 后面是条件表达式。",[58,157593,157594],{},"条件后面必须写冒号。",[58,157596,157597],{},"条件成立时执行缩进代码块。",[58,157599,157600],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[10,157602,157603],{},"错误示例：",[92,157605,157607],{"className":30367,"code":157606,"language":30369,"meta":20,"style":20},"if age >= 18\n    print(\"可以进入\")\n",[98,157608,157609,157619],{"__ignoreMap":20},[101,157610,157611,157613,157615,157617],{"class":103,"line":104},[101,157612,1518],{"class":107},[101,157614,15695],{"class":111},[101,157616,1697],{"class":107},[101,157618,146531],{"class":160},[101,157620,157621,157623,157625,157628],{"class":103,"line":21},[101,157622,31288],{"class":160},[101,157624,112],{"class":111},[101,157626,157627],{"class":216},"\"可以进入\"",[101,157629,118],{"class":111},[10,157631,157632],{},"缺少冒号。",[43,157634,157636],{"id":157635},"_33-if-else","3.3 if else",[92,157638,157640],{"className":30367,"code":157639,"language":30369,"meta":20,"style":20},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[98,157641,157642,157660,157664,157676,157687,157693],{"__ignoreMap":20},[101,157643,157644,157646,157648,157650,157652,157654,157656,157658],{"class":103,"line":104},[101,157645,146526],{"class":111},[101,157647,157],{"class":107},[101,157649,2369],{"class":160},[101,157651,112],{"class":111},[101,157653,53810],{"class":160},[101,157655,112],{"class":111},[101,157657,152374],{"class":216},[101,157659,30486],{"class":111},[101,157661,157662],{"class":103,"line":21},[101,157663,2387],{"emptyLinePlaceholder":27},[101,157665,157666,157668,157670,157672,157674],{"class":103,"line":1166},[101,157667,1518],{"class":107},[101,157669,15695],{"class":111},[101,157671,1697],{"class":107},[101,157673,156265],{"class":160},[101,157675,3726],{"class":111},[101,157677,157678,157680,157682,157685],{"class":103,"line":1181},[101,157679,31288],{"class":160},[101,157681,112],{"class":111},[101,157683,157684],{"class":216},"\"成年人\"",[101,157686,118],{"class":111},[101,157688,157689,157691],{"class":103,"line":1187},[101,157690,1688],{"class":107},[101,157692,3726],{"class":111},[101,157694,157695,157697,157699,157702],{"class":103,"line":1201},[101,157696,31288],{"class":160},[101,157698,112],{"class":111},[101,157700,157701],{"class":216},"\"未成年人\"",[101,157703,118],{"class":111},[10,157705,157706],{},"执行逻辑：",[55,157708,157709,157715,157720],{},[58,157710,157711,157712,157714],{},"条件成立，执行 ",[98,157713,1518],{}," 代码块。",[58,157716,157717,157718,157714],{},"条件不成立，执行 ",[98,157719,1688],{},[58,157721,157722],{},"两个代码块只会执行其中一个。",[43,157724,157726],{"id":157725},"_34-if-elif-else","3.4 if elif else",[10,157728,157729],{},"多条件判断：",[92,157731,157733],{"className":30367,"code":157732,"language":30369,"meta":20,"style":20},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[98,157734,157735,157753,157757,157771,157782,157796,157807,157820,157831,157837],{"__ignoreMap":20},[101,157736,157737,157739,157741,157743,157745,157747,157749,157751],{"class":103,"line":104},[101,157738,155338],{"class":111},[101,157740,157],{"class":107},[101,157742,2369],{"class":160},[101,157744,112],{"class":111},[101,157746,53810],{"class":160},[101,157748,112],{"class":111},[101,157750,152389],{"class":216},[101,157752,30486],{"class":111},[101,157754,157755],{"class":103,"line":21},[101,157756,2387],{"emptyLinePlaceholder":27},[101,157758,157759,157761,157764,157766,157769],{"class":103,"line":1166},[101,157760,1518],{"class":107},[101,157762,157763],{"class":111}," score ",[101,157765,1697],{"class":107},[101,157767,157768],{"class":160}," 90",[101,157770,3726],{"class":111},[101,157772,157773,157775,157777,157780],{"class":103,"line":1181},[101,157774,31288],{"class":160},[101,157776,112],{"class":111},[101,157778,157779],{"class":216},"\"优秀\"",[101,157781,118],{"class":111},[101,157783,157784,157787,157789,157791,157794],{"class":103,"line":1187},[101,157785,157786],{"class":107},"elif",[101,157788,157763],{"class":111},[101,157790,1697],{"class":107},[101,157792,157793],{"class":160}," 80",[101,157795,3726],{"class":111},[101,157797,157798,157800,157802,157805],{"class":103,"line":1201},[101,157799,31288],{"class":160},[101,157801,112],{"class":111},[101,157803,157804],{"class":216},"\"良好\"",[101,157806,118],{"class":111},[101,157808,157809,157811,157813,157815,157818],{"class":103,"line":1207},[101,157810,157786],{"class":107},[101,157812,157763],{"class":111},[101,157814,1697],{"class":107},[101,157816,157817],{"class":160}," 60",[101,157819,3726],{"class":111},[101,157821,157822,157824,157826,157829],{"class":103,"line":1298},[101,157823,31288],{"class":160},[101,157825,112],{"class":111},[101,157827,157828],{"class":216},"\"及格\"",[101,157830,118],{"class":111},[101,157832,157833,157835],{"class":103,"line":1304},[101,157834,1688],{"class":107},[101,157836,3726],{"class":111},[101,157838,157839,157841,157843,157846],{"class":103,"line":1316},[101,157840,31288],{"class":160},[101,157842,112],{"class":111},[101,157844,157845],{"class":216},"\"不及格\"",[101,157847,118],{"class":111},[10,157849,157850],{},"注意判断顺序很重要。",[10,157852,157853,157854,157857],{},"如果把 ",[98,157855,157856],{},"score >= 60"," 放在最前面：",[92,157859,157861],{"className":30367,"code":157860,"language":30369,"meta":20,"style":20},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[98,157862,157863,157875,157885,157897],{"__ignoreMap":20},[101,157864,157865,157867,157869,157871,157873],{"class":103,"line":104},[101,157866,1518],{"class":107},[101,157868,157763],{"class":111},[101,157870,1697],{"class":107},[101,157872,157817],{"class":160},[101,157874,3726],{"class":111},[101,157876,157877,157879,157881,157883],{"class":103,"line":21},[101,157878,31288],{"class":160},[101,157880,112],{"class":111},[101,157882,157828],{"class":216},[101,157884,118],{"class":111},[101,157886,157887,157889,157891,157893,157895],{"class":103,"line":1166},[101,157888,157786],{"class":107},[101,157890,157763],{"class":111},[101,157892,1697],{"class":107},[101,157894,157768],{"class":160},[101,157896,3726],{"class":111},[101,157898,157899,157901,157903,157905],{"class":103,"line":1181},[101,157900,31288],{"class":160},[101,157902,112],{"class":111},[101,157904,157779],{"class":216},[101,157906,118],{"class":111},[10,157908,157909,157910,157912],{},"成绩 95 会先满足 ",[98,157911,157856],{},"，后面的优秀分支就不会执行。",[43,157914,157916],{"id":157915},"_35-判断语句嵌套","3.5 判断语句嵌套",[10,157918,157919],{},"嵌套判断就是在一个判断内部再写判断。",[92,157921,157923],{"className":30367,"code":157922,"language":30369,"meta":20,"style":20},"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",[98,157924,157925,157943,157958,157962,157974,157988,157998,158005,158016,158022],{"__ignoreMap":20},[101,157926,157927,157929,157931,157933,157935,157937,157939,157941],{"class":103,"line":104},[101,157928,146526],{"class":111},[101,157930,157],{"class":107},[101,157932,2369],{"class":160},[101,157934,112],{"class":111},[101,157936,53810],{"class":160},[101,157938,112],{"class":111},[101,157940,152374],{"class":216},[101,157942,30486],{"class":111},[101,157944,157945,157947,157949,157951,157953,157956],{"class":103,"line":21},[101,157946,156341],{"class":111},[101,157948,157],{"class":107},[101,157950,60594],{"class":160},[101,157952,112],{"class":111},[101,157954,157955],{"class":216},"\"是否有票(y\u002Fn):\"",[101,157957,118],{"class":111},[101,157959,157960],{"class":103,"line":1166},[101,157961,2387],{"emptyLinePlaceholder":27},[101,157963,157964,157966,157968,157970,157972],{"class":103,"line":1181},[101,157965,1518],{"class":107},[101,157967,15695],{"class":111},[101,157969,1697],{"class":107},[101,157971,156265],{"class":160},[101,157973,3726],{"class":111},[101,157975,157976,157978,157981,157983,157986],{"class":103,"line":1187},[101,157977,3088],{"class":107},[101,157979,157980],{"class":111}," has_ticket ",[101,157982,2936],{"class":107},[101,157984,157985],{"class":216}," \"y\"",[101,157987,3726],{"class":111},[101,157989,157990,157992,157994,157996],{"class":103,"line":1201},[101,157991,32440],{"class":160},[101,157993,112],{"class":111},[101,157995,157627],{"class":216},[101,157997,118],{"class":111},[101,157999,158000,158003],{"class":103,"line":1207},[101,158001,158002],{"class":107},"    else",[101,158004,3726],{"class":111},[101,158006,158007,158009,158011,158014],{"class":103,"line":1298},[101,158008,32440],{"class":160},[101,158010,112],{"class":111},[101,158012,158013],{"class":216},"\"请先买票\"",[101,158015,118],{"class":111},[101,158017,158018,158020],{"class":103,"line":1304},[101,158019,1688],{"class":107},[101,158021,3726],{"class":111},[101,158023,158024,158026,158028,158031],{"class":103,"line":1316},[101,158025,31288],{"class":160},[101,158027,112],{"class":111},[101,158029,158030],{"class":216},"\"未成年人禁止进入\"",[101,158032,118],{"class":111},[10,158034,158035],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[43,158037,158039],{"id":158038},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[72,158041,158043],{"id":158042},"_361-and","3.6.1 and",[10,158045,158046],{},"两个条件都成立才成立。",[92,158048,158050],{"className":30367,"code":158049,"language":30369,"meta":20,"style":20},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[98,158051,158052,158060,158068,158072,158087],{"__ignoreMap":20},[101,158053,158054,158056,158058],{"class":103,"line":104},[101,158055,146526],{"class":111},[101,158057,157],{"class":107},[101,158059,88054],{"class":160},[101,158061,158062,158064,158066],{"class":103,"line":21},[101,158063,156341],{"class":111},[101,158065,157],{"class":107},[101,158067,153579],{"class":160},[101,158069,158070],{"class":103,"line":1166},[101,158071,2387],{"emptyLinePlaceholder":27},[101,158073,158074,158076,158078,158080,158082,158084],{"class":103,"line":1181},[101,158075,1518],{"class":107},[101,158077,15695],{"class":111},[101,158079,1697],{"class":107},[101,158081,156265],{"class":160},[101,158083,120409],{"class":107},[101,158085,158086],{"class":111}," has_ticket:\n",[101,158088,158089,158091,158093,158095],{"class":103,"line":1187},[101,158090,31288],{"class":160},[101,158092,112],{"class":111},[101,158094,157627],{"class":216},[101,158096,118],{"class":111},[72,158098,158100],{"id":158099},"_362-or","3.6.2 or",[10,158102,158103],{},"只要一个条件成立就成立。",[92,158105,158107],{"className":30367,"code":158106,"language":30369,"meta":20,"style":20},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[98,158108,158109,158118,158127,158131,158143],{"__ignoreMap":20},[101,158110,158111,158114,158116],{"class":103,"line":104},[101,158112,158113],{"class":111},"is_vip ",[101,158115,157],{"class":107},[101,158117,125787],{"class":160},[101,158119,158120,158123,158125],{"class":103,"line":21},[101,158121,158122],{"class":111},"coupon ",[101,158124,157],{"class":107},[101,158126,153579],{"class":160},[101,158128,158129],{"class":103,"line":1166},[101,158130,2387],{"emptyLinePlaceholder":27},[101,158132,158133,158135,158138,158140],{"class":103,"line":1181},[101,158134,1518],{"class":107},[101,158136,158137],{"class":111}," is_vip ",[101,158139,115070],{"class":107},[101,158141,158142],{"class":111}," coupon:\n",[101,158144,158145,158147,158149,158152],{"class":103,"line":1187},[101,158146,31288],{"class":160},[101,158148,112],{"class":111},[101,158150,158151],{"class":216},"\"可以享受优惠\"",[101,158153,118],{"class":111},[72,158155,158157],{"id":158156},"_363-not","3.6.3 not",[10,158159,158160],{},"取反。",[92,158162,158164],{"className":30367,"code":158163,"language":30369,"meta":20,"style":20},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[98,158165,158166,158175,158179,158188],{"__ignoreMap":20},[101,158167,158168,158171,158173],{"class":103,"line":104},[101,158169,158170],{"class":111},"is_closed ",[101,158172,157],{"class":107},[101,158174,125787],{"class":160},[101,158176,158177],{"class":103,"line":21},[101,158178,2387],{"emptyLinePlaceholder":27},[101,158180,158181,158183,158185],{"class":103,"line":1166},[101,158182,1518],{"class":107},[101,158184,38919],{"class":107},[101,158186,158187],{"class":111}," is_closed:\n",[101,158189,158190,158192,158194,158197],{"class":103,"line":1181},[101,158191,31288],{"class":160},[101,158193,112],{"class":111},[101,158195,158196],{"class":216},"\"店铺营业中\"",[101,158198,118],{"class":111},[43,158200,158202],{"id":158201},"_37-链式比较","3.7 链式比较",[10,158204,158205],{},"Python 支持链式比较：",[92,158207,158209],{"className":30367,"code":158208,"language":30369,"meta":20,"style":20},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[98,158210,158211,158220,158224,158241],{"__ignoreMap":20},[101,158212,158213,158215,158217],{"class":103,"line":104},[101,158214,155338],{"class":111},[101,158216,157],{"class":107},[101,158218,158219],{"class":160}," 85\n",[101,158221,158222],{"class":103,"line":21},[101,158223,2387],{"emptyLinePlaceholder":27},[101,158225,158226,158228,158230,158233,158235,158237,158239],{"class":103,"line":1166},[101,158227,1518],{"class":107},[101,158229,4080],{"class":160},[101,158231,158232],{"class":107}," \u003C=",[101,158234,157763],{"class":111},[101,158236,1575],{"class":107},[101,158238,5742],{"class":160},[101,158240,3726],{"class":111},[101,158242,158243,158245,158247,158250],{"class":103,"line":1181},[101,158244,31288],{"class":160},[101,158246,112],{"class":111},[101,158248,158249],{"class":216},"\"成绩合法\"",[101,158251,118],{"class":111},[10,158253,158254],{},"等价于：",[92,158256,158258],{"className":30367,"code":158257,"language":30369,"meta":20,"style":20},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[98,158259,158260,158280],{"__ignoreMap":20},[101,158261,158262,158264,158266,158268,158270,158272,158274,158276,158278],{"class":103,"line":104},[101,158263,1518],{"class":107},[101,158265,157763],{"class":111},[101,158267,1697],{"class":107},[101,158269,4080],{"class":160},[101,158271,120409],{"class":107},[101,158273,157763],{"class":111},[101,158275,1575],{"class":107},[101,158277,5742],{"class":160},[101,158279,3726],{"class":111},[101,158281,158282,158284,158286,158288],{"class":103,"line":21},[101,158283,31288],{"class":160},[101,158285,112],{"class":111},[101,158287,158249],{"class":216},[101,158289,118],{"class":111},[43,158291,158293],{"id":158292},"_38-真值和假值","3.8 真值和假值",[10,158295,116447,158296,158298],{},[98,158297,1518],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[10,158300,158301],{},"假值：",[92,158303,158305],{"className":30367,"code":158304,"language":30369,"meta":20,"style":20},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[98,158306,158307,158311,158316,158320,158324,158329,158333,158337,158342],{"__ignoreMap":20},[101,158308,158309],{"class":103,"line":104},[101,158310,157497],{"class":160},[101,158312,158313],{"class":103,"line":21},[101,158314,158315],{"class":160},"None\n",[101,158317,158318],{"class":103,"line":1166},[101,158319,3072],{"class":160},[101,158321,158322],{"class":103,"line":1181},[101,158323,32331],{"class":160},[101,158325,158326],{"class":103,"line":1187},[101,158327,158328],{"class":216},"\"\"\n",[101,158330,158331],{"class":103,"line":1201},[101,158332,32346],{"class":111},[101,158334,158335],{"class":103,"line":1207},[101,158336,1963],{"class":111},[101,158338,158339],{"class":103,"line":1298},[101,158340,158341],{"class":111},"{}\n",[101,158343,158344,158346],{"class":103,"line":1304},[101,158345,155270],{"class":160},[101,158347,1963],{"class":111},[10,158349,15123],{},[92,158351,158353],{"className":30367,"code":158352,"language":30369,"meta":20,"style":20},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[98,158354,158355,158369,158373,158380,158400,158406],{"__ignoreMap":20},[101,158356,158357,158359,158361,158363,158365,158367],{"class":103,"line":104},[101,158358,146516],{"class":111},[101,158360,157],{"class":107},[101,158362,60594],{"class":160},[101,158364,112],{"class":111},[101,158366,152359],{"class":216},[101,158368,118],{"class":111},[101,158370,158371],{"class":103,"line":21},[101,158372,2387],{"emptyLinePlaceholder":27},[101,158374,158375,158377],{"class":103,"line":1166},[101,158376,1518],{"class":107},[101,158378,158379],{"class":111}," name:\n",[101,158381,158382,158384,158386,158388,158390,158392,158394,158396,158398],{"class":103,"line":1181},[101,158383,31288],{"class":160},[101,158385,112],{"class":111},[101,158387,164],{"class":107},[101,158389,157034],{"class":216},[101,158391,1007],{"class":160},[101,158393,79799],{"class":111},[101,158395,1057],{"class":160},[101,158397,362],{"class":216},[101,158399,118],{"class":111},[101,158401,158402,158404],{"class":103,"line":1187},[101,158403,1688],{"class":107},[101,158405,3726],{"class":111},[101,158407,158408,158410,158412,158415],{"class":103,"line":1201},[101,158409,31288],{"class":160},[101,158411,112],{"class":111},[101,158413,158414],{"class":216},"\"姓名不能为空\"",[101,158416,118],{"class":111},[43,158418,158420],{"id":158419},"_39-match语句","3.9 match语句",[10,158422,158423,158424,158426],{},"Python 3.10 开始支持 ",[98,158425,71254],{},"。它适合处理固定选项。",[92,158428,158430],{"className":30367,"code":158429,"language":30369,"meta":20,"style":20},"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",[98,158431,158432,158448,158452,158459,158469,158480,158489,158500,158509,158520,158527],{"__ignoreMap":20},[101,158433,158434,158437,158439,158441,158443,158446],{"class":103,"line":104},[101,158435,158436],{"class":111},"command ",[101,158438,157],{"class":107},[101,158440,60594],{"class":160},[101,158442,112],{"class":111},[101,158444,158445],{"class":216},"\"请输入命令:\"",[101,158447,118],{"class":111},[101,158449,158450],{"class":103,"line":21},[101,158451,2387],{"emptyLinePlaceholder":27},[101,158453,158454,158456],{"class":103,"line":1166},[101,158455,71254],{"class":107},[101,158457,158458],{"class":111}," command:\n",[101,158460,158461,158464,158467],{"class":103,"line":1181},[101,158462,158463],{"class":107},"    case",[101,158465,158466],{"class":216}," \"start\"",[101,158468,3726],{"class":111},[101,158470,158471,158473,158475,158478],{"class":103,"line":1187},[101,158472,32440],{"class":160},[101,158474,112],{"class":111},[101,158476,158477],{"class":216},"\"启动\"",[101,158479,118],{"class":111},[101,158481,158482,158484,158487],{"class":103,"line":1201},[101,158483,158463],{"class":107},[101,158485,158486],{"class":216}," \"stop\"",[101,158488,3726],{"class":111},[101,158490,158491,158493,158495,158498],{"class":103,"line":1207},[101,158492,32440],{"class":160},[101,158494,112],{"class":111},[101,158496,158497],{"class":216},"\"停止\"",[101,158499,118],{"class":111},[101,158501,158502,158504,158507],{"class":103,"line":1298},[101,158503,158463],{"class":107},[101,158505,158506],{"class":216}," \"restart\"",[101,158508,3726],{"class":111},[101,158510,158511,158513,158515,158518],{"class":103,"line":1304},[101,158512,32440],{"class":160},[101,158514,112],{"class":111},[101,158516,158517],{"class":216},"\"重启\"",[101,158519,118],{"class":111},[101,158521,158522,158524],{"class":103,"line":1316},[101,158523,158463],{"class":107},[101,158525,158526],{"class":111}," _:\n",[101,158528,158529,158531,158533,158536],{"class":103,"line":1599},[101,158530,32440],{"class":160},[101,158532,112],{"class":111},[101,158534,158535],{"class":216},"\"未知命令\"",[101,158537,118],{"class":111},[10,158539,158540,158541,158543,158544,158546],{},"入门阶段掌握 ",[98,158542,154638],{}," 更重要，",[98,158545,71254],{}," 可以作为补充。",[43,158548,158550],{"id":158549},"_310-小案例成绩等级","3.10 小案例：成绩等级",[10,158552,123272],{},[55,158554,158555,158558,158561],{},[58,158556,158557],{},"输入成绩。",[58,158559,158560],{},"判断成绩是否合法。",[58,158562,158563],{},"输出等级。",[10,158565,10023],{},[92,158567,158569],{"className":30367,"code":158568,"language":30369,"meta":20,"style":20},"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",[98,158570,158571,158589,158593,158611,158622,158634,158645,158657,158668,158681,158692,158704,158715,158721],{"__ignoreMap":20},[101,158572,158573,158575,158577,158579,158581,158583,158585,158587],{"class":103,"line":104},[101,158574,155338],{"class":111},[101,158576,157],{"class":107},[101,158578,109777],{"class":160},[101,158580,112],{"class":111},[101,158582,53810],{"class":160},[101,158584,112],{"class":111},[101,158586,152389],{"class":216},[101,158588,30486],{"class":111},[101,158590,158591],{"class":103,"line":21},[101,158592,2387],{"emptyLinePlaceholder":27},[101,158594,158595,158597,158599,158601,158603,158605,158607,158609],{"class":103,"line":1166},[101,158596,1518],{"class":107},[101,158598,38919],{"class":107},[101,158600,4080],{"class":160},[101,158602,158232],{"class":107},[101,158604,157763],{"class":111},[101,158606,1575],{"class":107},[101,158608,5742],{"class":160},[101,158610,3726],{"class":111},[101,158612,158613,158615,158617,158620],{"class":103,"line":1181},[101,158614,31288],{"class":160},[101,158616,112],{"class":111},[101,158618,158619],{"class":216},"\"成绩不合法\"",[101,158621,118],{"class":111},[101,158623,158624,158626,158628,158630,158632],{"class":103,"line":1187},[101,158625,157786],{"class":107},[101,158627,157763],{"class":111},[101,158629,1697],{"class":107},[101,158631,157768],{"class":160},[101,158633,3726],{"class":111},[101,158635,158636,158638,158640,158643],{"class":103,"line":1201},[101,158637,31288],{"class":160},[101,158639,112],{"class":111},[101,158641,158642],{"class":216},"\"等级:A\"",[101,158644,118],{"class":111},[101,158646,158647,158649,158651,158653,158655],{"class":103,"line":1207},[101,158648,157786],{"class":107},[101,158650,157763],{"class":111},[101,158652,1697],{"class":107},[101,158654,157793],{"class":160},[101,158656,3726],{"class":111},[101,158658,158659,158661,158663,158666],{"class":103,"line":1298},[101,158660,31288],{"class":160},[101,158662,112],{"class":111},[101,158664,158665],{"class":216},"\"等级:B\"",[101,158667,118],{"class":111},[101,158669,158670,158672,158674,158676,158679],{"class":103,"line":1304},[101,158671,157786],{"class":107},[101,158673,157763],{"class":111},[101,158675,1697],{"class":107},[101,158677,158678],{"class":160}," 70",[101,158680,3726],{"class":111},[101,158682,158683,158685,158687,158690],{"class":103,"line":1316},[101,158684,31288],{"class":160},[101,158686,112],{"class":111},[101,158688,158689],{"class":216},"\"等级:C\"",[101,158691,118],{"class":111},[101,158693,158694,158696,158698,158700,158702],{"class":103,"line":1599},[101,158695,157786],{"class":107},[101,158697,157763],{"class":111},[101,158699,1697],{"class":107},[101,158701,157817],{"class":160},[101,158703,3726],{"class":111},[101,158705,158706,158708,158710,158713],{"class":103,"line":1604},[101,158707,31288],{"class":160},[101,158709,112],{"class":111},[101,158711,158712],{"class":216},"\"等级:D\"",[101,158714,118],{"class":111},[101,158716,158717,158719],{"class":103,"line":1610},[101,158718,1688],{"class":107},[101,158720,3726],{"class":111},[101,158722,158723,158725,158727,158730],{"class":103,"line":1615},[101,158724,31288],{"class":160},[101,158726,112],{"class":111},[101,158728,158729],{"class":216},"\"等级:E\"",[101,158731,118],{"class":111},[43,158733,158735],{"id":158734},"_311-小案例会员折扣","3.11 小案例：会员折扣",[10,158737,123272],{},[55,158739,158740,158743,158746,158749],{},[58,158741,158742],{},"输入消费金额。",[58,158744,158745],{},"输入会员等级，普通、银卡、金卡。",[58,158747,158748],{},"普通不打折，银卡 9 折，金卡 8 折。",[58,158750,158751],{},"满 500 再减 50。",[10,158753,10023],{},[92,158755,158757],{"className":30367,"code":158756,"language":30369,"meta":20,"style":20},"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",[98,158758,158759,158779,158795,158799,158807,158811,158825,158835,158848,158857,158870,158878,158884,158895,158899,158913,158917,158931,158941,158945],{"__ignoreMap":20},[101,158760,158761,158764,158766,158768,158770,158772,158774,158777],{"class":103,"line":104},[101,158762,158763],{"class":111},"amount ",[101,158765,157],{"class":107},[101,158767,109777],{"class":160},[101,158769,112],{"class":111},[101,158771,53810],{"class":160},[101,158773,112],{"class":111},[101,158775,158776],{"class":216},"\"请输入消费金额:\"",[101,158778,30486],{"class":111},[101,158780,158781,158784,158786,158788,158790,158793],{"class":103,"line":21},[101,158782,158783],{"class":111},"level ",[101,158785,157],{"class":107},[101,158787,60594],{"class":160},[101,158789,112],{"class":111},[101,158791,158792],{"class":216},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[101,158794,118],{"class":111},[101,158796,158797],{"class":103,"line":1166},[101,158798,2387],{"emptyLinePlaceholder":27},[101,158800,158801,158803,158805],{"class":103,"line":1181},[101,158802,157216],{"class":111},[101,158804,157],{"class":107},[101,158806,55688],{"class":160},[101,158808,158809],{"class":103,"line":1187},[101,158810,2387],{"emptyLinePlaceholder":27},[101,158812,158813,158815,158818,158820,158823],{"class":103,"line":1201},[101,158814,1518],{"class":107},[101,158816,158817],{"class":111}," level ",[101,158819,2936],{"class":107},[101,158821,158822],{"class":216}," \"银卡\"",[101,158824,3726],{"class":111},[101,158826,158827,158830,158832],{"class":103,"line":1207},[101,158828,158829],{"class":111},"    discount ",[101,158831,157],{"class":107},[101,158833,158834],{"class":160}," 0.9\n",[101,158836,158837,158839,158841,158843,158846],{"class":103,"line":1298},[101,158838,157786],{"class":107},[101,158840,158817],{"class":111},[101,158842,2936],{"class":107},[101,158844,158845],{"class":216}," \"金卡\"",[101,158847,3726],{"class":111},[101,158849,158850,158852,158854],{"class":103,"line":1304},[101,158851,158829],{"class":111},[101,158853,157],{"class":107},[101,158855,158856],{"class":160}," 0.8\n",[101,158858,158859,158861,158863,158865,158868],{"class":103,"line":1316},[101,158860,157786],{"class":107},[101,158862,158817],{"class":111},[101,158864,2936],{"class":107},[101,158866,158867],{"class":216}," \"普通\"",[101,158869,3726],{"class":111},[101,158871,158872,158874,158876],{"class":103,"line":1599},[101,158873,158829],{"class":111},[101,158875,157],{"class":107},[101,158877,55688],{"class":160},[101,158879,158880,158882],{"class":103,"line":1604},[101,158881,1688],{"class":107},[101,158883,3726],{"class":111},[101,158885,158886,158888,158890,158893],{"class":103,"line":1610},[101,158887,31288],{"class":160},[101,158889,112],{"class":111},[101,158891,158892],{"class":216},"\"会员等级输入错误，按普通会员计算\"",[101,158894,118],{"class":111},[101,158896,158897],{"class":103,"line":1615},[101,158898,2387],{"emptyLinePlaceholder":27},[101,158900,158901,158904,158906,158909,158911],{"class":103,"line":1629},[101,158902,158903],{"class":111},"pay ",[101,158905,157],{"class":107},[101,158907,158908],{"class":111}," amount ",[101,158910,566],{"class":107},[101,158912,157255],{"class":111},[101,158914,158915],{"class":103,"line":1634},[101,158916,2387],{"emptyLinePlaceholder":27},[101,158918,158919,158921,158924,158926,158929],{"class":103,"line":1640},[101,158920,1518],{"class":107},[101,158922,158923],{"class":111}," pay ",[101,158925,1697],{"class":107},[101,158927,158928],{"class":160}," 500",[101,158930,3726],{"class":111},[101,158932,158933,158936,158938],{"class":103,"line":1661},[101,158934,158935],{"class":111},"    pay ",[101,158937,150232],{"class":107},[101,158939,158940],{"class":160}," 50\n",[101,158942,158943],{"class":103,"line":1666},[101,158944,2387],{"emptyLinePlaceholder":27},[101,158946,158947,158949,158951,158953,158955,158957,158960,158962,158964,158966],{"class":103,"line":1680},[101,158948,30404],{"class":160},[101,158950,112],{"class":111},[101,158952,164],{"class":107},[101,158954,157336],{"class":216},[101,158956,1007],{"class":160},[101,158958,158959],{"class":111},"pay",[101,158961,157139],{"class":107},[101,158963,1057],{"class":160},[101,158965,156992],{"class":216},[101,158967,118],{"class":111},[43,158969,158971],{"id":158970},"_312-易错点","3.12 易错点",[55,158973,158974,158977,158980,158983,158988],{},[58,158975,158976],{},"冒号不能漏。",[58,158978,158979],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[58,158981,158982],{},"多分支判断要注意顺序。",[58,158984,158985,158986,28374],{},"判断相等用 ",[98,158987,2936],{},[58,158989,158990],{},"字符串比较区分大小写：",[92,158992,158994],{"className":30367,"code":158993,"language":30369,"meta":20,"style":20},"\"Y\" == \"y\"  # False\n",[98,158995,158996],{"__ignoreMap":20},[101,158997,158998,159001,159003,159005],{"class":103,"line":104},[101,158999,159000],{"class":216},"\"Y\"",[101,159002,101539],{"class":107},[101,159004,157985],{"class":216},[101,159006,159007],{"class":170},"  # False\n",[10,159009,159010],{},"可转换后再判断：",[92,159012,159014],{"className":30367,"code":159013,"language":30369,"meta":20,"style":20},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[98,159015,159016,159033,159046],{"__ignoreMap":20},[101,159017,159018,159021,159023,159025,159027,159030],{"class":103,"line":104},[101,159019,159020],{"class":111},"answer ",[101,159022,157],{"class":107},[101,159024,60594],{"class":160},[101,159026,112],{"class":111},[101,159028,159029],{"class":216},"\"是否继续(y\u002Fn):\"",[101,159031,159032],{"class":111},").lower()\n",[101,159034,159035,159037,159040,159042,159044],{"class":103,"line":21},[101,159036,1518],{"class":107},[101,159038,159039],{"class":111}," answer ",[101,159041,2936],{"class":107},[101,159043,157985],{"class":216},[101,159045,3726],{"class":111},[101,159047,159048,159050,159052,159055],{"class":103,"line":1166},[101,159049,31288],{"class":160},[101,159051,112],{"class":111},[101,159053,159054],{"class":216},"\"继续\"",[101,159056,118],{"class":111},[43,159058,159060],{"id":159059},"_313-本章练习","3.13 本章练习",[55,159062,159063,159066,159069,159072,159082],{},[58,159064,159065],{},"输入年龄，判断是否成年。",[58,159067,159068],{},"输入年份，判断是否为闰年。",[58,159070,159071],{},"输入三个数字，输出最大值。",[58,159073,159074,159075,159078,159079,159081],{},"写登录判断：用户名是 ",[98,159076,159077],{},"admin"," 且密码是 ",[98,159080,15072],{}," 才登录成功。",[58,159083,159084],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5114,159086,159087],{},"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":20,"searchDepth":21,"depth":21,"links":159089},[159090,159091,159092,159093,159094,159095,159100,159101,159102,159103,159104,159105,159106],{"id":157478,"depth":21,"text":157479},{"id":157531,"depth":21,"text":157532},{"id":157635,"depth":21,"text":157636},{"id":157725,"depth":21,"text":157726},{"id":157915,"depth":21,"text":157916},{"id":158038,"depth":21,"text":158039,"children":159096},[159097,159098,159099],{"id":158042,"depth":1166,"text":158043},{"id":158099,"depth":1166,"text":158100},{"id":158156,"depth":1166,"text":158157},{"id":158201,"depth":21,"text":158202},{"id":158292,"depth":21,"text":158293},{"id":158419,"depth":21,"text":158420},{"id":158549,"depth":21,"text":158550},{"id":158734,"depth":21,"text":158735},{"id":158970,"depth":21,"text":158971},{"id":159059,"depth":21,"text":159060},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157470,"description":23365},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159113,"title":159114,"body":159115,"description":23365,"extension":24,"meta":160884,"navigation":27,"path":160885,"seo":160886,"stem":160887,"__hash__":160888},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159116,"toc":160864},[159117,159120,159124,159130,159133,159150,159154,159156,159173,159175,159220,159222,159239,159243,159246,159312,159315,159333,159337,159498,159507,159511,159515,159520,159567,159569,159575,159579,159584,159631,159633,159639,159643,159648,159684,159687,159734,159738,159744,159802,159807,159838,159843,159847,159902,159905,159977,159980,160039,160043,160046,160121,160124,160128,160234,160237,160263,160267,160279,160348,160351,160443,160447,160449,160460,160462,160592,160596,160798,160806,160810,160840,160844,160861],[39,159118,159114],{"id":159119},"_4-循环语句",[43,159121,159123],{"id":159122},"_41-为什么需要循环","4.1 为什么需要循环",[10,159125,159126,159127,159129],{},"如果要输出 1 到 100，不应该写 100 行 ",[98,159128,146452],{},"，而应该用循环。",[10,159131,159132],{},"循环适合处理重复任务：",[55,159134,159135,159138,159141,159144,159147],{},[58,159136,159137],{},"重复输出。",[58,159139,159140],{},"重复输入。",[58,159142,159143],{},"遍历数据。",[58,159145,159146],{},"持续执行菜单。",[58,159148,159149],{},"批量处理文件或数据。",[43,159151,159153],{"id":159152},"_42-while循环","4.2 while循环",[10,159155,5169],{},[92,159157,159159],{"className":30367,"code":159158,"language":30369,"meta":20,"style":20},"while 条件:\n    循环体\n",[98,159160,159161,159168],{"__ignoreMap":20},[101,159162,159163,159165],{"class":103,"line":104},[101,159164,108643],{"class":107},[101,159166,159167],{"class":111}," 条件:\n",[101,159169,159170],{"class":103,"line":21},[101,159171,159172],{"class":111},"    循环体\n",[10,159174,15123],{},[92,159176,159178],{"className":30367,"code":159177,"language":30369,"meta":20,"style":20},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[98,159179,159180,159188,159192,159204,159211],{"__ignoreMap":20},[101,159181,159182,159184,159186],{"class":103,"line":104},[101,159183,100128],{"class":111},[101,159185,157],{"class":107},[101,159187,55688],{"class":160},[101,159189,159190],{"class":103,"line":21},[101,159191,2387],{"emptyLinePlaceholder":27},[101,159193,159194,159196,159198,159200,159202],{"class":103,"line":1166},[101,159195,108643],{"class":107},[101,159197,9426],{"class":111},[101,159199,1575],{"class":107},[101,159201,2135],{"class":160},[101,159203,3726],{"class":111},[101,159205,159206,159208],{"class":103,"line":1181},[101,159207,31288],{"class":160},[101,159209,159210],{"class":111},"(i)\n",[101,159212,159213,159216,159218],{"class":103,"line":1187},[101,159214,159215],{"class":111},"    i ",[101,159217,9465],{"class":107},[101,159219,55688],{"class":160},[10,159221,80918],{},[55,159223,159224,159230,159233,159236],{},[58,159225,159226,159227,28374],{},"判断条件 ",[98,159228,159229],{},"i \u003C= 5",[58,159231,159232],{},"条件成立，执行循环体。",[58,159234,159235],{},"执行完后回到条件判断。",[58,159237,159238],{},"条件不成立，退出循环。",[43,159240,159242],{"id":159241},"_43-while累加","4.3 while累加",[10,159244,159245],{},"计算 1 到 100 的和：",[92,159247,159249],{"className":30367,"code":159248,"language":30369,"meta":20,"style":20},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[98,159250,159251,159259,159267,159271,159283,159293,159301,159305],{"__ignoreMap":20},[101,159252,159253,159255,159257],{"class":103,"line":104},[101,159254,100128],{"class":111},[101,159256,157],{"class":107},[101,159258,55688],{"class":160},[101,159260,159261,159263,159265],{"class":103,"line":21},[101,159262,157240],{"class":111},[101,159264,157],{"class":107},[101,159266,47322],{"class":160},[101,159268,159269],{"class":103,"line":1166},[101,159270,2387],{"emptyLinePlaceholder":27},[101,159272,159273,159275,159277,159279,159281],{"class":103,"line":1181},[101,159274,108643],{"class":107},[101,159276,9426],{"class":111},[101,159278,1575],{"class":107},[101,159280,5742],{"class":160},[101,159282,3726],{"class":111},[101,159284,159285,159288,159290],{"class":103,"line":1187},[101,159286,159287],{"class":111},"    total ",[101,159289,9465],{"class":107},[101,159291,159292],{"class":111}," i\n",[101,159294,159295,159297,159299],{"class":103,"line":1201},[101,159296,159215],{"class":111},[101,159298,9465],{"class":107},[101,159300,55688],{"class":160},[101,159302,159303],{"class":103,"line":1207},[101,159304,2387],{"emptyLinePlaceholder":27},[101,159306,159307,159309],{"class":103,"line":1298},[101,159308,30404],{"class":160},[101,159310,159311],{"class":111},"(total)\n",[10,159313,159314],{},"核心思想：",[55,159316,159317,159322,159327],{},[58,159318,159319,159321],{},[98,159320,552],{}," 控制循环次数。",[58,159323,159324,159326],{},[98,159325,157341],{}," 保存累加结果。",[58,159328,159329,159330,159332],{},"每轮循环都要更新 ",[98,159331,552],{},"，否则可能死循环。",[43,159334,159336],{"id":159335},"_44-while猜数字","4.4 while猜数字",[92,159338,159340],{"className":30367,"code":159339,"language":30369,"meta":20,"style":20},"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",[98,159341,159342,159348,159352,159369,159377,159381,159389,159409,159418,159422,159434,159445,159455,159466,159472,159494],{"__ignoreMap":20},[101,159343,159344,159346],{"class":103,"line":104},[101,159345,30381],{"class":107},[101,159347,45317],{"class":111},[101,159349,159350],{"class":103,"line":21},[101,159351,2387],{"emptyLinePlaceholder":27},[101,159353,159354,159356,159358,159361,159363,159365,159367],{"class":103,"line":1166},[101,159355,159020],{"class":111},[101,159357,157],{"class":107},[101,159359,159360],{"class":111}," random.randint(",[101,159362,329],{"class":160},[101,159364,12423],{"class":111},[101,159366,422],{"class":160},[101,159368,118],{"class":111},[101,159370,159371,159373,159375],{"class":103,"line":1181},[101,159372,146671],{"class":111},[101,159374,157],{"class":107},[101,159376,47322],{"class":160},[101,159378,159379],{"class":103,"line":1187},[101,159380,2387],{"emptyLinePlaceholder":27},[101,159382,159383,159385,159387],{"class":103,"line":1201},[101,159384,108643],{"class":107},[101,159386,95272],{"class":160},[101,159388,3726],{"class":111},[101,159390,159391,159394,159396,159398,159400,159402,159404,159407],{"class":103,"line":1207},[101,159392,159393],{"class":111},"    guess ",[101,159395,157],{"class":107},[101,159397,2369],{"class":160},[101,159399,112],{"class":111},[101,159401,53810],{"class":160},[101,159403,112],{"class":111},[101,159405,159406],{"class":216},"\"请输入1到100之间的数字:\"",[101,159408,30486],{"class":111},[101,159410,159411,159414,159416],{"class":103,"line":1298},[101,159412,159413],{"class":111},"    count ",[101,159415,9465],{"class":107},[101,159417,55688],{"class":160},[101,159419,159420],{"class":103,"line":1304},[101,159421,2387],{"emptyLinePlaceholder":27},[101,159423,159424,159426,159429,159431],{"class":103,"line":1316},[101,159425,3088],{"class":107},[101,159427,159428],{"class":111}," guess ",[101,159430,1071],{"class":107},[101,159432,159433],{"class":111}," answer:\n",[101,159435,159436,159438,159440,159443],{"class":103,"line":1599},[101,159437,32440],{"class":160},[101,159439,112],{"class":111},[101,159441,159442],{"class":216},"\"猜大了\"",[101,159444,118],{"class":111},[101,159446,159447,159449,159451,159453],{"class":103,"line":1604},[101,159448,39282],{"class":107},[101,159450,159428],{"class":111},[101,159452,1021],{"class":107},[101,159454,159433],{"class":111},[101,159456,159457,159459,159461,159464],{"class":103,"line":1610},[101,159458,32440],{"class":160},[101,159460,112],{"class":111},[101,159462,159463],{"class":216},"\"猜小了\"",[101,159465,118],{"class":111},[101,159467,159468,159470],{"class":103,"line":1615},[101,159469,158002],{"class":107},[101,159471,3726],{"class":111},[101,159473,159474,159476,159478,159480,159483,159485,159487,159489,159492],{"class":103,"line":1629},[101,159475,32440],{"class":160},[101,159477,112],{"class":111},[101,159479,164],{"class":107},[101,159481,159482],{"class":216},"\"猜对了，一共猜了",[101,159484,1007],{"class":160},[101,159486,84423],{"class":111},[101,159488,1057],{"class":160},[101,159490,159491],{"class":216},"次\"",[101,159493,118],{"class":111},[101,159495,159496],{"class":103,"line":1634},[101,159497,31616],{"class":107},[10,159499,159500,159503,159504,159506],{},[98,159501,159502],{},"while True"," 表示无限循环，通常配合 ",[98,159505,2040],{}," 使用。",[43,159508,159510],{"id":159509},"_45-break和continue","4.5 break和continue",[72,159512,159514],{"id":159513},"_451-break","4.5.1 break",[10,159516,159517,159519],{},[98,159518,2040],{}," 直接结束整个循环。",[92,159521,159523],{"className":30367,"code":159522,"language":30369,"meta":20,"style":20},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[98,159524,159525,159545,159557,159561],{"__ignoreMap":20},[101,159526,159527,159529,159531,159533,159535,159537,159539,159541,159543],{"class":103,"line":104},[101,159528,3012],{"class":107},[101,159530,9426],{"class":111},[101,159532,26032],{"class":107},[101,159534,32432],{"class":160},[101,159536,112],{"class":111},[101,159538,329],{"class":160},[101,159540,12423],{"class":111},[101,159542,455],{"class":160},[101,159544,30775],{"class":111},[101,159546,159547,159549,159551,159553,159555],{"class":103,"line":21},[101,159548,3088],{"class":107},[101,159550,9426],{"class":111},[101,159552,2936],{"class":107},[101,159554,78059],{"class":160},[101,159556,3726],{"class":111},[101,159558,159559],{"class":103,"line":1166},[101,159560,31616],{"class":107},[101,159562,159563,159565],{"class":103,"line":1181},[101,159564,31288],{"class":160},[101,159566,159210],{"class":111},[10,159568,146437],{},[92,159570,159573],{"className":159571,"code":159572,"language":5175,"meta":20},[5173],"1\n2\n",[98,159574,159572],{"__ignoreMap":20},[72,159576,159578],{"id":159577},"_452-continue","4.5.2 continue",[10,159580,159581,159583],{},[98,159582,154652],{}," 跳过本轮剩余代码，进入下一轮循环。",[92,159585,159587],{"className":30367,"code":159586,"language":30369,"meta":20,"style":20},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[98,159588,159589,159609,159621,159625],{"__ignoreMap":20},[101,159590,159591,159593,159595,159597,159599,159601,159603,159605,159607],{"class":103,"line":104},[101,159592,3012],{"class":107},[101,159594,9426],{"class":111},[101,159596,26032],{"class":107},[101,159598,32432],{"class":160},[101,159600,112],{"class":111},[101,159602,329],{"class":160},[101,159604,12423],{"class":111},[101,159606,455],{"class":160},[101,159608,30775],{"class":111},[101,159610,159611,159613,159615,159617,159619],{"class":103,"line":21},[101,159612,3088],{"class":107},[101,159614,9426],{"class":111},[101,159616,2936],{"class":107},[101,159618,78059],{"class":160},[101,159620,3726],{"class":111},[101,159622,159623],{"class":103,"line":1166},[101,159624,148492],{"class":107},[101,159626,159627,159629],{"class":103,"line":1181},[101,159628,31288],{"class":160},[101,159630,159210],{"class":111},[10,159632,146437],{},[92,159634,159637],{"className":159635,"code":159636,"language":5175,"meta":20},[5173],"1\n2\n4\n5\n",[98,159638,159636],{"__ignoreMap":20},[43,159640,159642],{"id":159641},"_46-for循环","4.6 for循环",[10,159644,159645,159647],{},[98,159646,3012],{}," 常用于遍历序列。",[92,159649,159651],{"className":30367,"code":159650,"language":30369,"meta":20,"style":20},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[98,159652,159653,159662,159666,159677],{"__ignoreMap":20},[101,159654,159655,159657,159659],{"class":103,"line":104},[101,159656,146516],{"class":111},[101,159658,157],{"class":107},[101,159660,159661],{"class":216}," \"python\"\n",[101,159663,159664],{"class":103,"line":21},[101,159665,2387],{"emptyLinePlaceholder":27},[101,159667,159668,159670,159673,159675],{"class":103,"line":1166},[101,159669,3012],{"class":107},[101,159671,159672],{"class":111}," ch ",[101,159674,26032],{"class":107},[101,159676,158379],{"class":111},[101,159678,159679,159681],{"class":103,"line":1181},[101,159680,31288],{"class":160},[101,159682,159683],{"class":111},"(ch)\n",[10,159685,159686],{},"遍历列表：",[92,159688,159690],{"className":30367,"code":159689,"language":30369,"meta":20,"style":20},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[98,159691,159692,159714,159718,159728],{"__ignoreMap":20},[101,159693,159694,159697,159699,159701,159703,159705,159707,159709,159712],{"class":103,"line":104},[101,159695,159696],{"class":111},"students ",[101,159698,157],{"class":107},[101,159700,52215],{"class":111},[101,159702,149868],{"class":216},[101,159704,12423],{"class":111},[101,159706,150916],{"class":216},[101,159708,12423],{"class":111},[101,159710,159711],{"class":216},"\"小刚\"",[101,159713,33235],{"class":111},[101,159715,159716],{"class":103,"line":21},[101,159717,2387],{"emptyLinePlaceholder":27},[101,159719,159720,159722,159724,159726],{"class":103,"line":1166},[101,159721,3012],{"class":107},[101,159723,152117],{"class":111},[101,159725,26032],{"class":107},[101,159727,152122],{"class":111},[101,159729,159730,159732],{"class":103,"line":1181},[101,159731,31288],{"class":160},[101,159733,150022],{"class":111},[43,159735,159737],{"id":159736},"_47-range函数","4.7 range函数",[10,159739,159740,159743],{},[98,159741,159742],{},"range()"," 用于生成整数序列。",[92,159745,159747],{"className":30367,"code":159746,"language":30369,"meta":20,"style":20},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[98,159748,159749,159763,159781],{"__ignoreMap":20},[101,159750,159751,159753,159755,159757,159760],{"class":103,"line":104},[101,159752,33405],{"class":160},[101,159754,112],{"class":111},[101,159756,430],{"class":160},[101,159758,159759],{"class":111},")          ",[101,159761,159762],{"class":170},"# 0,1,2,3,4\n",[101,159764,159765,159767,159769,159771,159773,159775,159778],{"class":103,"line":21},[101,159766,33405],{"class":160},[101,159768,112],{"class":111},[101,159770,329],{"class":160},[101,159772,12423],{"class":111},[101,159774,430],{"class":160},[101,159776,159777],{"class":111},")       ",[101,159779,159780],{"class":170},"# 1,2,3,4\n",[101,159782,159783,159785,159787,159789,159791,159793,159795,159797,159799],{"class":103,"line":1166},[101,159784,33405],{"class":160},[101,159786,112],{"class":111},[101,159788,329],{"class":160},[101,159790,12423],{"class":111},[101,159792,557],{"class":160},[101,159794,12423],{"class":111},[101,159796,189],{"class":160},[101,159798,155641],{"class":111},[101,159800,159801],{"class":170},"# 1,3,5,7,9\n",[10,159803,159804,159805,24607],{},"配合 ",[98,159806,3012],{},[92,159808,159810],{"className":30367,"code":159809,"language":30369,"meta":20,"style":20},"for i in range(1, 6):\n    print(i)\n",[98,159811,159812,159832],{"__ignoreMap":20},[101,159813,159814,159816,159818,159820,159822,159824,159826,159828,159830],{"class":103,"line":104},[101,159815,3012],{"class":107},[101,159817,9426],{"class":111},[101,159819,26032],{"class":107},[101,159821,32432],{"class":160},[101,159823,112],{"class":111},[101,159825,329],{"class":160},[101,159827,12423],{"class":111},[101,159829,455],{"class":160},[101,159831,30775],{"class":111},[101,159833,159834,159836],{"class":103,"line":21},[101,159835,31288],{"class":160},[101,159837,159210],{"class":111},[10,159839,9013,159840,159842],{},[98,159841,33405],{}," 的结束值不包含在内。",[43,159844,159846],{"id":159845},"_48-for循环求和","4.8 for循环求和",[92,159848,159850],{"className":30367,"code":159849,"language":30369,"meta":20,"style":20},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[98,159851,159852,159860,159864,159884,159892,159896],{"__ignoreMap":20},[101,159853,159854,159856,159858],{"class":103,"line":104},[101,159855,157240],{"class":111},[101,159857,157],{"class":107},[101,159859,47322],{"class":160},[101,159861,159862],{"class":103,"line":21},[101,159863,2387],{"emptyLinePlaceholder":27},[101,159865,159866,159868,159870,159872,159874,159876,159878,159880,159882],{"class":103,"line":1166},[101,159867,3012],{"class":107},[101,159869,9426],{"class":111},[101,159871,26032],{"class":107},[101,159873,32432],{"class":160},[101,159875,112],{"class":111},[101,159877,329],{"class":160},[101,159879,12423],{"class":111},[101,159881,448],{"class":160},[101,159883,30775],{"class":111},[101,159885,159886,159888,159890],{"class":103,"line":1181},[101,159887,159287],{"class":111},[101,159889,9465],{"class":107},[101,159891,159292],{"class":111},[101,159893,159894],{"class":103,"line":1187},[101,159895,2387],{"emptyLinePlaceholder":27},[101,159897,159898,159900],{"class":103,"line":1201},[101,159899,30404],{"class":160},[101,159901,159311],{"class":111},[10,159903,159904],{},"求偶数和：",[92,159906,159908],{"className":30367,"code":159907,"language":30369,"meta":20,"style":20},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[98,159909,159910,159918,159922,159942,159958,159967,159971],{"__ignoreMap":20},[101,159911,159912,159914,159916],{"class":103,"line":104},[101,159913,157240],{"class":111},[101,159915,157],{"class":107},[101,159917,47322],{"class":160},[101,159919,159920],{"class":103,"line":21},[101,159921,2387],{"emptyLinePlaceholder":27},[101,159923,159924,159926,159928,159930,159932,159934,159936,159938,159940],{"class":103,"line":1166},[101,159925,3012],{"class":107},[101,159927,9426],{"class":111},[101,159929,26032],{"class":107},[101,159931,32432],{"class":160},[101,159933,112],{"class":111},[101,159935,329],{"class":160},[101,159937,12423],{"class":111},[101,159939,448],{"class":160},[101,159941,30775],{"class":111},[101,159943,159944,159946,159948,159950,159952,159954,159956],{"class":103,"line":1181},[101,159945,3088],{"class":107},[101,159947,9426],{"class":111},[101,159949,439],{"class":107},[101,159951,14743],{"class":160},[101,159953,101539],{"class":107},[101,159955,4080],{"class":160},[101,159957,3726],{"class":111},[101,159959,159960,159963,159965],{"class":103,"line":1187},[101,159961,159962],{"class":111},"        total ",[101,159964,9465],{"class":107},[101,159966,159292],{"class":111},[101,159968,159969],{"class":103,"line":1201},[101,159970,2387],{"emptyLinePlaceholder":27},[101,159972,159973,159975],{"class":103,"line":1207},[101,159974,30404],{"class":160},[101,159976,159311],{"class":111},[10,159978,159979],{},"也可以：",[92,159981,159983],{"className":30367,"code":159982,"language":30369,"meta":20,"style":20},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[98,159984,159985,159993,159997,160021,160029,160033],{"__ignoreMap":20},[101,159986,159987,159989,159991],{"class":103,"line":104},[101,159988,157240],{"class":111},[101,159990,157],{"class":107},[101,159992,47322],{"class":160},[101,159994,159995],{"class":103,"line":21},[101,159996,2387],{"emptyLinePlaceholder":27},[101,159998,159999,160001,160003,160005,160007,160009,160011,160013,160015,160017,160019],{"class":103,"line":1166},[101,160000,3012],{"class":107},[101,160002,9426],{"class":111},[101,160004,26032],{"class":107},[101,160006,32432],{"class":160},[101,160008,112],{"class":111},[101,160010,189],{"class":160},[101,160012,12423],{"class":111},[101,160014,448],{"class":160},[101,160016,12423],{"class":111},[101,160018,189],{"class":160},[101,160020,30775],{"class":111},[101,160022,160023,160025,160027],{"class":103,"line":1181},[101,160024,159287],{"class":111},[101,160026,9465],{"class":107},[101,160028,159292],{"class":111},[101,160030,160031],{"class":103,"line":1187},[101,160032,2387],{"emptyLinePlaceholder":27},[101,160034,160035,160037],{"class":103,"line":1201},[101,160036,30404],{"class":160},[101,160038,159311],{"class":111},[43,160040,160042],{"id":160041},"_49-循环嵌套","4.9 循环嵌套",[10,160044,160045],{},"嵌套循环就是循环里面再写循环。",[92,160047,160049],{"className":30367,"code":160048,"language":30369,"meta":20,"style":20},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[98,160050,160051,160071,160091],{"__ignoreMap":20},[101,160052,160053,160055,160057,160059,160061,160063,160065,160067,160069],{"class":103,"line":104},[101,160054,3012],{"class":107},[101,160056,9426],{"class":111},[101,160058,26032],{"class":107},[101,160060,32432],{"class":160},[101,160062,112],{"class":111},[101,160064,329],{"class":160},[101,160066,12423],{"class":111},[101,160068,404],{"class":160},[101,160070,30775],{"class":111},[101,160072,160073,160075,160077,160079,160081,160083,160085,160087,160089],{"class":103,"line":21},[101,160074,3188],{"class":107},[101,160076,9488],{"class":111},[101,160078,26032],{"class":107},[101,160080,32432],{"class":160},[101,160082,112],{"class":111},[101,160084,329],{"class":160},[101,160086,12423],{"class":111},[101,160088,404],{"class":160},[101,160090,30775],{"class":111},[101,160092,160093,160095,160097,160099,160102,160104,160106,160108,160111,160113,160115,160117,160119],{"class":103,"line":1166},[101,160094,32440],{"class":160},[101,160096,112],{"class":111},[101,160098,164],{"class":107},[101,160100,160101],{"class":216},"\"i=",[101,160103,1007],{"class":160},[101,160105,552],{"class":111},[101,160107,1057],{"class":160},[101,160109,160110],{"class":216},", j=",[101,160112,1007],{"class":160},[101,160114,578],{"class":111},[101,160116,1057],{"class":160},[101,160118,362],{"class":216},[101,160120,118],{"class":111},[10,160122,160123],{},"外层循环执行一次，内层循环执行完整一轮。",[43,160125,160127],{"id":160126},"_410-九九乘法表","4.10 九九乘法表",[92,160129,160131],{"className":30367,"code":160130,"language":30369,"meta":20,"style":20},"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",[98,160132,160133,160153,160176,160228],{"__ignoreMap":20},[101,160134,160135,160137,160139,160141,160143,160145,160147,160149,160151],{"class":103,"line":104},[101,160136,3012],{"class":107},[101,160138,9426],{"class":111},[101,160140,26032],{"class":107},[101,160142,32432],{"class":160},[101,160144,112],{"class":111},[101,160146,329],{"class":160},[101,160148,12423],{"class":111},[101,160150,557],{"class":160},[101,160152,30775],{"class":111},[101,160154,160155,160157,160159,160161,160163,160165,160167,160170,160172,160174],{"class":103,"line":21},[101,160156,3188],{"class":107},[101,160158,9488],{"class":111},[101,160160,26032],{"class":107},[101,160162,32432],{"class":160},[101,160164,112],{"class":111},[101,160166,329],{"class":160},[101,160168,160169],{"class":111},", i ",[101,160171,592],{"class":107},[101,160173,25107],{"class":160},[101,160175,30775],{"class":111},[101,160177,160178,160180,160182,160184,160186,160188,160190,160192,160194,160196,160198,160200,160202,160204,160206,160208,160210,160212,160214,160216,160218,160220,160222,160224,160226],{"class":103,"line":1166},[101,160179,32440],{"class":160},[101,160181,112],{"class":111},[101,160183,164],{"class":107},[101,160185,362],{"class":216},[101,160187,1007],{"class":160},[101,160189,578],{"class":111},[101,160191,1057],{"class":160},[101,160193,566],{"class":216},[101,160195,1007],{"class":160},[101,160197,552],{"class":111},[101,160199,1057],{"class":160},[101,160201,157],{"class":216},[101,160203,1007],{"class":160},[101,160205,100128],{"class":111},[101,160207,566],{"class":107},[101,160209,3397],{"class":111},[101,160211,1057],{"class":160},[101,160213,362],{"class":216},[101,160215,12423],{"class":111},[101,160217,45790],{"class":5204},[101,160219,157],{"class":107},[101,160221,362],{"class":216},[101,160223,1217],{"class":160},[101,160225,362],{"class":216},[101,160227,118],{"class":111},[101,160229,160230,160232],{"class":103,"line":1181},[101,160231,31288],{"class":160},[101,160233,1963],{"class":111},[10,160235,160236],{},"关键点：",[55,160238,160239,160245,160251,160257],{},[58,160240,160241,160242,160244],{},"外层 ",[98,160243,552],{}," 控制行。",[58,160246,160247,160248,160250],{},"内层 ",[98,160249,578],{}," 控制列。",[58,160252,160253,160254,160256],{},"每行结束后用 ",[98,160255,146452],{}," 换行。",[58,160258,160259,160262],{},[98,160260,160261],{},"end=\"\\t\""," 让同一行的内容横向排列。",[43,160264,160266],{"id":160265},"_411-循环else","4.11 循环else",[10,160268,160269,160270,160272,160273,160275,160276,160278],{},"Python 的循环可以带 ",[98,160271,1688],{},"。当循环正常结束时执行 ",[98,160274,1688],{},"，如果被 ",[98,160277,2040],{}," 打断，则不执行。",[92,160280,160282],{"className":30367,"code":160281,"language":30369,"meta":20,"style":20},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[98,160283,160284,160304,160316,160327,160331,160337],{"__ignoreMap":20},[101,160285,160286,160288,160290,160292,160294,160296,160298,160300,160302],{"class":103,"line":104},[101,160287,3012],{"class":107},[101,160289,9426],{"class":111},[101,160291,26032],{"class":107},[101,160293,32432],{"class":160},[101,160295,112],{"class":111},[101,160297,329],{"class":160},[101,160299,12423],{"class":111},[101,160301,455],{"class":160},[101,160303,30775],{"class":111},[101,160305,160306,160308,160310,160312,160314],{"class":103,"line":21},[101,160307,3088],{"class":107},[101,160309,9426],{"class":111},[101,160311,2936],{"class":107},[101,160313,2025],{"class":160},[101,160315,3726],{"class":111},[101,160317,160318,160320,160322,160325],{"class":103,"line":1166},[101,160319,32440],{"class":160},[101,160321,112],{"class":111},[101,160323,160324],{"class":216},"\"找到了\"",[101,160326,118],{"class":111},[101,160328,160329],{"class":103,"line":1181},[101,160330,31616],{"class":107},[101,160332,160333,160335],{"class":103,"line":1187},[101,160334,1688],{"class":107},[101,160336,3726],{"class":111},[101,160338,160339,160341,160343,160346],{"class":103,"line":1201},[101,160340,31288],{"class":160},[101,160342,112],{"class":111},[101,160344,160345],{"class":216},"\"没找到\"",[101,160347,118],{"class":111},[10,160349,160350],{},"常用于搜索。",[92,160352,160354],{"className":30367,"code":160353,"language":30369,"meta":20,"style":20},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[98,160355,160356,160377,160386,160390,160402,160413,160423,160427,160433],{"__ignoreMap":20},[101,160357,160358,160361,160363,160365,160367,160369,160371,160373,160375],{"class":103,"line":104},[101,160359,160360],{"class":111},"names ",[101,160362,157],{"class":107},[101,160364,52215],{"class":111},[101,160366,149868],{"class":216},[101,160368,12423],{"class":111},[101,160370,150916],{"class":216},[101,160372,12423],{"class":111},[101,160374,159711],{"class":216},[101,160376,33235],{"class":111},[101,160378,160379,160381,160383],{"class":103,"line":21},[101,160380,111558],{"class":111},[101,160382,157],{"class":107},[101,160384,160385],{"class":216}," \"小李\"\n",[101,160387,160388],{"class":103,"line":1166},[101,160389,2387],{"emptyLinePlaceholder":27},[101,160391,160392,160394,160397,160399],{"class":103,"line":1181},[101,160393,3012],{"class":107},[101,160395,160396],{"class":111}," name ",[101,160398,26032],{"class":107},[101,160400,160401],{"class":111}," names:\n",[101,160403,160404,160406,160408,160410],{"class":103,"line":1187},[101,160405,3088],{"class":107},[101,160407,160396],{"class":111},[101,160409,2936],{"class":107},[101,160411,160412],{"class":111}," target:\n",[101,160414,160415,160417,160419,160421],{"class":103,"line":1201},[101,160416,32440],{"class":160},[101,160418,112],{"class":111},[101,160420,160324],{"class":216},[101,160422,118],{"class":111},[101,160424,160425],{"class":103,"line":1207},[101,160426,31616],{"class":107},[101,160428,160429,160431],{"class":103,"line":1298},[101,160430,1688],{"class":107},[101,160432,3726],{"class":111},[101,160434,160435,160437,160439,160441],{"class":103,"line":1304},[101,160436,31288],{"class":160},[101,160438,112],{"class":111},[101,160440,160345],{"class":216},[101,160442,118],{"class":111},[43,160444,160446],{"id":160445},"_412-小案例登录重试","4.12 小案例：登录重试",[10,160448,123272],{},[55,160450,160451,160454,160457],{},[58,160452,160453],{},"用户最多输入 3 次密码。",[58,160455,160456],{},"密码正确则登录成功。",[58,160458,160459],{},"3 次都错误则锁定账号。",[10,160461,10023],{},[92,160463,160465],{"className":30367,"code":160464,"language":30369,"meta":20,"style":20},"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",[98,160466,160467,160477,160481,160497,160513,160517,160529,160540,160544,160550,160575,160581],{"__ignoreMap":20},[101,160468,160469,160472,160474],{"class":103,"line":104},[101,160470,160471],{"class":111},"password ",[101,160473,157],{"class":107},[101,160475,160476],{"class":216}," \"123456\"\n",[101,160478,160479],{"class":103,"line":21},[101,160480,2387],{"emptyLinePlaceholder":27},[101,160482,160483,160485,160487,160489,160491,160493,160495],{"class":103,"line":1166},[101,160484,3012],{"class":107},[101,160486,9426],{"class":111},[101,160488,26032],{"class":107},[101,160490,32432],{"class":160},[101,160492,112],{"class":111},[101,160494,183],{"class":160},[101,160496,30775],{"class":111},[101,160498,160499,160502,160504,160506,160508,160511],{"class":103,"line":1181},[101,160500,160501],{"class":111},"    user_password ",[101,160503,157],{"class":107},[101,160505,60594],{"class":160},[101,160507,112],{"class":111},[101,160509,160510],{"class":216},"\"请输入密码:\"",[101,160512,118],{"class":111},[101,160514,160515],{"class":103,"line":1187},[101,160516,2387],{"emptyLinePlaceholder":27},[101,160518,160519,160521,160524,160526],{"class":103,"line":1201},[101,160520,3088],{"class":107},[101,160522,160523],{"class":111}," user_password ",[101,160525,2936],{"class":107},[101,160527,160528],{"class":111}," password:\n",[101,160530,160531,160533,160535,160538],{"class":103,"line":1207},[101,160532,32440],{"class":160},[101,160534,112],{"class":111},[101,160536,160537],{"class":216},"\"登录成功\"",[101,160539,118],{"class":111},[101,160541,160542],{"class":103,"line":1298},[101,160543,31616],{"class":107},[101,160545,160546,160548],{"class":103,"line":1304},[101,160547,158002],{"class":107},[101,160549,3726],{"class":111},[101,160551,160552,160554,160556,160558,160561,160564,160566,160568,160570,160573],{"class":103,"line":1316},[101,160553,32440],{"class":160},[101,160555,112],{"class":111},[101,160557,164],{"class":107},[101,160559,160560],{"class":216},"\"密码错误，还剩",[101,160562,160563],{"class":160},"{2",[101,160565,52260],{"class":107},[101,160567,3019],{"class":111},[101,160569,1057],{"class":160},[101,160571,160572],{"class":216},"次机会\"",[101,160574,118],{"class":111},[101,160576,160577,160579],{"class":103,"line":1599},[101,160578,1688],{"class":107},[101,160580,3726],{"class":111},[101,160582,160583,160585,160587,160590],{"class":103,"line":1604},[101,160584,31288],{"class":160},[101,160586,112],{"class":111},[101,160588,160589],{"class":216},"\"账号已锁定\"",[101,160591,118],{"class":111},[43,160593,160595],{"id":160594},"_413-小案例菜单程序","4.13 小案例：菜单程序",[92,160597,160599],{"className":30367,"code":160598,"language":30369,"meta":20,"style":20},"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",[98,160600,160601,160609,160620,160631,160642,160653,160664,160668,160683,160687,160699,160710,160722,160733,160745,160756,160768,160778,160782,160788],{"__ignoreMap":20},[101,160602,160603,160605,160607],{"class":103,"line":104},[101,160604,108643],{"class":107},[101,160606,95272],{"class":160},[101,160608,3726],{"class":111},[101,160610,160611,160613,160615,160618],{"class":103,"line":21},[101,160612,31288],{"class":160},[101,160614,112],{"class":111},[101,160616,160617],{"class":216},"\"====== 菜单 ======\"",[101,160619,118],{"class":111},[101,160621,160622,160624,160626,160629],{"class":103,"line":1166},[101,160623,31288],{"class":160},[101,160625,112],{"class":111},[101,160627,160628],{"class":216},"\"1. 查询余额\"",[101,160630,118],{"class":111},[101,160632,160633,160635,160637,160640],{"class":103,"line":1181},[101,160634,31288],{"class":160},[101,160636,112],{"class":111},[101,160638,160639],{"class":216},"\"2. 存款\"",[101,160641,118],{"class":111},[101,160643,160644,160646,160648,160651],{"class":103,"line":1187},[101,160645,31288],{"class":160},[101,160647,112],{"class":111},[101,160649,160650],{"class":216},"\"3. 取款\"",[101,160652,118],{"class":111},[101,160654,160655,160657,160659,160662],{"class":103,"line":1201},[101,160656,31288],{"class":160},[101,160658,112],{"class":111},[101,160660,160661],{"class":216},"\"0. 退出\"",[101,160663,118],{"class":111},[101,160665,160666],{"class":103,"line":1207},[101,160667,2387],{"emptyLinePlaceholder":27},[101,160669,160670,160673,160675,160677,160679,160681],{"class":103,"line":1298},[101,160671,160672],{"class":111},"    choice ",[101,160674,157],{"class":107},[101,160676,60594],{"class":160},[101,160678,112],{"class":111},[101,160680,153053],{"class":216},[101,160682,118],{"class":111},[101,160684,160685],{"class":103,"line":1304},[101,160686,2387],{"emptyLinePlaceholder":27},[101,160688,160689,160691,160693,160695,160697],{"class":103,"line":1316},[101,160690,3088],{"class":107},[101,160692,153066],{"class":111},[101,160694,2936],{"class":107},[101,160696,153071],{"class":216},[101,160698,3726],{"class":111},[101,160700,160701,160703,160705,160708],{"class":103,"line":1599},[101,160702,32440],{"class":160},[101,160704,112],{"class":111},[101,160706,160707],{"class":216},"\"余额为1000元\"",[101,160709,118],{"class":111},[101,160711,160712,160714,160716,160718,160720],{"class":103,"line":1604},[101,160713,39282],{"class":107},[101,160715,153066],{"class":111},[101,160717,2936],{"class":107},[101,160719,153090],{"class":216},[101,160721,3726],{"class":111},[101,160723,160724,160726,160728,160731],{"class":103,"line":1610},[101,160725,32440],{"class":160},[101,160727,112],{"class":111},[101,160729,160730],{"class":216},"\"存款功能\"",[101,160732,118],{"class":111},[101,160734,160735,160737,160739,160741,160743],{"class":103,"line":1615},[101,160736,39282],{"class":107},[101,160738,153066],{"class":111},[101,160740,2936],{"class":107},[101,160742,153108],{"class":216},[101,160744,3726],{"class":111},[101,160746,160747,160749,160751,160754],{"class":103,"line":1629},[101,160748,32440],{"class":160},[101,160750,112],{"class":111},[101,160752,160753],{"class":216},"\"取款功能\"",[101,160755,118],{"class":111},[101,160757,160758,160760,160762,160764,160766],{"class":103,"line":1634},[101,160759,39282],{"class":107},[101,160761,153066],{"class":111},[101,160763,2936],{"class":107},[101,160765,153162],{"class":216},[101,160767,3726],{"class":111},[101,160769,160770,160772,160774,160776],{"class":103,"line":1640},[101,160771,32440],{"class":160},[101,160773,112],{"class":111},[101,160775,153173],{"class":216},[101,160777,118],{"class":111},[101,160779,160780],{"class":103,"line":1661},[101,160781,31616],{"class":107},[101,160783,160784,160786],{"class":103,"line":1666},[101,160785,158002],{"class":107},[101,160787,3726],{"class":111},[101,160789,160790,160792,160794,160796],{"class":103,"line":1680},[101,160791,32440],{"class":160},[101,160793,112],{"class":111},[101,160795,153194],{"class":216},[101,160797,118],{"class":111},[10,160799,160800,160801,160803,160804,28374],{},"菜单类程序通常使用 ",[98,160802,159502],{},"，用户选择退出时 ",[98,160805,2040],{},[43,160807,160809],{"id":160808},"_414-易错点","4.14 易错点",[55,160811,160812,160817,160823,160831,160837],{},[58,160813,160814,160816],{},[98,160815,108643],{}," 循环必须更新控制变量。",[58,160818,160819,160822],{},[98,160820,160821],{},"range(1, 10)"," 不包含 10。",[58,160824,160825,160827,160828,160830],{},[98,160826,2040],{}," 结束整个循环，",[98,160829,154652],{}," 只跳过本轮。",[58,160832,160833,160834,160836],{},"嵌套循环中，",[98,160835,2040],{}," 只跳出当前所在的一层循环。",[58,160838,160839],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[43,160841,160843],{"id":160842},"_415-本章练习","4.15 本章练习",[55,160845,160846,160849,160852,160855,160858],{},[58,160847,160848],{},"输出 1 到 100。",[58,160850,160851],{},"计算 1 到 100 的偶数和。",[58,160853,160854],{},"输出 100 以内能被 3 和 5 同时整除的数。",[58,160856,160857],{},"编写猜数字游戏，限制最多猜 7 次。",[58,160859,160860],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5114,160862,160863],{},"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":20,"searchDepth":21,"depth":21,"links":160865},[160866,160867,160868,160869,160870,160874,160875,160876,160877,160878,160879,160880,160881,160882,160883],{"id":159122,"depth":21,"text":159123},{"id":159152,"depth":21,"text":159153},{"id":159241,"depth":21,"text":159242},{"id":159335,"depth":21,"text":159336},{"id":159509,"depth":21,"text":159510,"children":160871},[160872,160873],{"id":159513,"depth":1166,"text":159514},{"id":159577,"depth":1166,"text":159578},{"id":159641,"depth":21,"text":159642},{"id":159736,"depth":21,"text":159737},{"id":159845,"depth":21,"text":159846},{"id":160041,"depth":21,"text":160042},{"id":160126,"depth":21,"text":160127},{"id":160265,"depth":21,"text":160266},{"id":160445,"depth":21,"text":160446},{"id":160594,"depth":21,"text":160595},{"id":160808,"depth":21,"text":160809},{"id":160842,"depth":21,"text":160843},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159114,"description":23365},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160890,"title":160891,"body":160892,"description":23365,"extension":24,"meta":162897,"navigation":27,"path":162898,"seo":162899,"stem":162900,"__hash__":162901},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160893,"toc":162877},[160894,160897,160901,160904,160907,160921,160924,160938,160942,160944,160963,160965,161012,161014,161028,161032,161106,161109,161113,161116,161175,161183,161186,161239,161242,161246,161251,161306,161314,161364,161368,161373,161381,161480,161486,161490,161495,161498,161509,161550,161563,161567,161570,161606,161609,161622,161625,161685,161689,161693,161696,161747,161751,161754,161801,161807,161873,161876,161880,161883,161999,162002,162006,162009,162115,162119,162122,162160,162163,162205,162208,162268,162271,162275,162739,162742,162746,162773,162779,162840,162844,162874],[39,160895,160891],{"id":160896},"_5-函数基础",[43,160898,160900],{"id":160899},"_51-为什么需要函数","5.1 为什么需要函数",[10,160902,160903],{},"函数用于封装一段可以重复使用的代码。",[10,160905,160906],{},"不使用函数的问题：",[55,160908,160909,160912,160915,160918],{},[58,160910,160911],{},"重复代码多。",[58,160913,160914],{},"修改逻辑时容易漏改。",[58,160916,160917],{},"主流程不清晰。",[58,160919,160920],{},"程序越写越长，难以维护。",[10,160922,160923],{},"使用函数后的好处：",[55,160925,160926,160929,160932,160935],{},[58,160927,160928],{},"提高复用性。",[58,160930,160931],{},"提高可读性。",[58,160933,160934],{},"便于调试。",[58,160936,160937],{},"便于分工。",[43,160939,160941],{"id":160940},"_52-函数定义","5.2 函数定义",[10,160943,5169],{},[92,160945,160947],{"className":30367,"code":160946,"language":30369,"meta":20,"style":20},"def 函数名():\n    函数体\n",[98,160948,160949,160958],{"__ignoreMap":20},[101,160950,160951,160953,160956],{"class":103,"line":104},[101,160952,31936],{"class":107},[101,160954,160955],{"class":1950}," 函数名",[101,160957,31942],{"class":111},[101,160959,160960],{"class":103,"line":21},[101,160961,160962],{"class":111},"    函数体\n",[10,160964,15123],{},[92,160966,160968],{"className":30367,"code":160967,"language":30369,"meta":20,"style":20},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[98,160969,160970,160979,160989,160999,161003,161007],{"__ignoreMap":20},[101,160971,160972,160974,160977],{"class":103,"line":104},[101,160973,31936],{"class":107},[101,160975,160976],{"class":1950}," say_hello",[101,160978,31942],{"class":111},[101,160980,160981,160983,160985,160987],{"class":103,"line":21},[101,160982,31288],{"class":160},[101,160984,112],{"class":111},[101,160986,5832],{"class":216},[101,160988,118],{"class":111},[101,160990,160991,160993,160995,160997],{"class":103,"line":1166},[101,160992,31288],{"class":160},[101,160994,112],{"class":111},[101,160996,146619],{"class":216},[101,160998,118],{"class":111},[101,161000,161001],{"class":103,"line":1181},[101,161002,2387],{"emptyLinePlaceholder":27},[101,161004,161005],{"class":103,"line":1187},[101,161006,2387],{"emptyLinePlaceholder":27},[101,161008,161009],{"class":103,"line":1201},[101,161010,161011],{"class":111},"say_hello()\n",[10,161013,9013],{},[55,161015,161016,161019,161022,161025],{},[58,161017,161018],{},"函数必须先定义，再调用。",[58,161020,161021],{},"函数名遵循变量命名规则。",[58,161023,161024],{},"函数体需要缩进。",[58,161026,161027],{},"函数不调用就不会执行。",[43,161029,161031],{"id":161030},"_53-函数调用","5.3 函数调用",[92,161033,161035],{"className":30367,"code":161034,"language":30369,"meta":20,"style":20},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[98,161036,161037,161046,161057,161068,161079,161089,161093,161097,161102],{"__ignoreMap":20},[101,161038,161039,161041,161044],{"class":103,"line":104},[101,161040,31936],{"class":107},[101,161042,161043],{"class":1950}," print_menu",[101,161045,31942],{"class":111},[101,161047,161048,161050,161052,161055],{"class":103,"line":21},[101,161049,31288],{"class":160},[101,161051,112],{"class":111},[101,161053,161054],{"class":216},"\"1. 查询\"",[101,161056,118],{"class":111},[101,161058,161059,161061,161063,161066],{"class":103,"line":1166},[101,161060,31288],{"class":160},[101,161062,112],{"class":111},[101,161064,161065],{"class":216},"\"2. 添加\"",[101,161067,118],{"class":111},[101,161069,161070,161072,161074,161077],{"class":103,"line":1181},[101,161071,31288],{"class":160},[101,161073,112],{"class":111},[101,161075,161076],{"class":216},"\"3. 删除\"",[101,161078,118],{"class":111},[101,161080,161081,161083,161085,161087],{"class":103,"line":1187},[101,161082,31288],{"class":160},[101,161084,112],{"class":111},[101,161086,160661],{"class":216},[101,161088,118],{"class":111},[101,161090,161091],{"class":103,"line":1201},[101,161092,2387],{"emptyLinePlaceholder":27},[101,161094,161095],{"class":103,"line":1207},[101,161096,2387],{"emptyLinePlaceholder":27},[101,161098,161099],{"class":103,"line":1298},[101,161100,161101],{"class":111},"print_menu()\n",[101,161103,161104],{"class":103,"line":1304},[101,161105,161101],{"class":111},[10,161107,161108],{},"函数可以多次调用，每次调用都会执行函数体。",[43,161110,161112],{"id":161111},"_54-参数","5.4 参数",[10,161114,161115],{},"参数用于向函数传递数据。",[92,161117,161119],{"className":30367,"code":161118,"language":30369,"meta":20,"style":20},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[98,161120,161121,161130,161150,161154,161158,161167],{"__ignoreMap":20},[101,161122,161123,161125,161127],{"class":103,"line":104},[101,161124,31936],{"class":107},[101,161126,160976],{"class":1950},[101,161128,161129],{"class":111},"(name):\n",[101,161131,161132,161134,161136,161138,161140,161142,161144,161146,161148],{"class":103,"line":21},[101,161133,31288],{"class":160},[101,161135,112],{"class":111},[101,161137,164],{"class":107},[101,161139,157034],{"class":216},[101,161141,1007],{"class":160},[101,161143,79799],{"class":111},[101,161145,1057],{"class":160},[101,161147,362],{"class":216},[101,161149,118],{"class":111},[101,161151,161152],{"class":103,"line":1166},[101,161153,2387],{"emptyLinePlaceholder":27},[101,161155,161156],{"class":103,"line":1181},[101,161157,2387],{"emptyLinePlaceholder":27},[101,161159,161160,161163,161165],{"class":103,"line":1187},[101,161161,161162],{"class":111},"say_hello(",[101,161164,149868],{"class":216},[101,161166,118],{"class":111},[101,161168,161169,161171,161173],{"class":103,"line":1201},[101,161170,161162],{"class":111},[101,161172,150916],{"class":216},[101,161174,118],{"class":111},[10,161176,161177,161179,161180,161182],{},[98,161178,79799],{}," 是形参，",[98,161181,149868],{}," 是实参。",[10,161184,161185],{},"多个参数：",[92,161187,161189],{"className":30367,"code":161188,"language":30369,"meta":20,"style":20},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[98,161190,161191,161199,161212,161218,161222,161226],{"__ignoreMap":20},[101,161192,161193,161195,161197],{"class":103,"line":104},[101,161194,31936],{"class":107},[101,161196,5197],{"class":1950},[101,161198,151073],{"class":111},[101,161200,161201,161204,161206,161208,161210],{"class":103,"line":21},[101,161202,161203],{"class":111},"    result ",[101,161205,157],{"class":107},[101,161207,10857],{"class":111},[101,161209,592],{"class":107},[101,161211,151084],{"class":111},[101,161213,161214,161216],{"class":103,"line":1166},[101,161215,31288],{"class":160},[101,161217,76574],{"class":111},[101,161219,161220],{"class":103,"line":1181},[101,161221,2387],{"emptyLinePlaceholder":27},[101,161223,161224],{"class":103,"line":1187},[101,161225,2387],{"emptyLinePlaceholder":27},[101,161227,161228,161231,161233,161235,161237],{"class":103,"line":1201},[101,161229,161230],{"class":111},"add(",[101,161232,557],{"class":160},[101,161234,12423],{"class":111},[101,161236,811],{"class":160},[101,161238,118],{"class":111},[10,161240,161241],{},"调用时参数数量必须匹配。",[43,161243,161245],{"id":161244},"_55-返回值","5.5 返回值",[10,161247,161248,161250],{},[98,161249,17034],{}," 用于把函数内部的结果返回给调用者。",[92,161252,161254],{"className":30367,"code":161253,"language":30369,"meta":20,"style":20},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[98,161255,161256,161264,161274,161278,161282,161300],{"__ignoreMap":20},[101,161257,161258,161260,161262],{"class":103,"line":104},[101,161259,31936],{"class":107},[101,161261,5197],{"class":1950},[101,161263,151073],{"class":111},[101,161265,161266,161268,161270,161272],{"class":103,"line":21},[101,161267,4077],{"class":107},[101,161269,10857],{"class":111},[101,161271,592],{"class":107},[101,161273,151084],{"class":111},[101,161275,161276],{"class":103,"line":1166},[101,161277,2387],{"emptyLinePlaceholder":27},[101,161279,161280],{"class":103,"line":1181},[101,161281,2387],{"emptyLinePlaceholder":27},[101,161283,161284,161287,161289,161292,161294,161296,161298],{"class":103,"line":1187},[101,161285,161286],{"class":111},"result ",[101,161288,157],{"class":107},[101,161290,161291],{"class":111}," add(",[101,161293,557],{"class":160},[101,161295,12423],{"class":111},[101,161297,811],{"class":160},[101,161299,118],{"class":111},[101,161301,161302,161304],{"class":103,"line":1201},[101,161303,30404],{"class":160},[101,161305,76574],{"class":111},[10,161307,161308,161309,161311,161312,28374],{},"如果函数没有写 ",[98,161310,17034],{},"，默认返回 ",[98,161313,95666],{},[92,161315,161317],{"className":30367,"code":161316,"language":30369,"meta":20,"style":20},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[98,161318,161319,161327,161337,161341,161345,161354],{"__ignoreMap":20},[101,161320,161321,161323,161325],{"class":103,"line":104},[101,161322,31936],{"class":107},[101,161324,160976],{"class":1950},[101,161326,31942],{"class":111},[101,161328,161329,161331,161333,161335],{"class":103,"line":21},[101,161330,31288],{"class":160},[101,161332,112],{"class":111},[101,161334,5832],{"class":216},[101,161336,118],{"class":111},[101,161338,161339],{"class":103,"line":1166},[101,161340,2387],{"emptyLinePlaceholder":27},[101,161342,161343],{"class":103,"line":1181},[101,161344,2387],{"emptyLinePlaceholder":27},[101,161346,161347,161349,161351],{"class":103,"line":1187},[101,161348,161286],{"class":111},[101,161350,157],{"class":107},[101,161352,161353],{"class":111}," say_hello()\n",[101,161355,161356,161358,161361],{"class":103,"line":1201},[101,161357,30404],{"class":160},[101,161359,161360],{"class":111},"(result)  ",[101,161362,161363],{"class":170},"# None\n",[43,161365,161367],{"id":161366},"_56-return的作用","5.6 return的作用",[10,161369,161370,161372],{},[98,161371,17034],{}," 有两个作用：",[55,161374,161375,161378],{},[58,161376,161377],{},"返回结果。",[58,161379,161380],{},"结束函数。",[92,161382,161384],{"className":30367,"code":161383,"language":30369,"meta":20,"style":20},"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",[98,161385,161386,161396,161408,161415,161419,161431,161438,161442,161449,161453,161457,161468],{"__ignoreMap":20},[101,161387,161388,161390,161393],{"class":103,"line":104},[101,161389,31936],{"class":107},[101,161391,161392],{"class":1950}," check_age",[101,161394,161395],{"class":111},"(age):\n",[101,161397,161398,161400,161402,161404,161406],{"class":103,"line":21},[101,161399,3088],{"class":107},[101,161401,15695],{"class":111},[101,161403,1021],{"class":107},[101,161405,4080],{"class":160},[101,161407,3726],{"class":111},[101,161409,161410,161412],{"class":103,"line":1166},[101,161411,14740],{"class":107},[101,161413,161414],{"class":216}," \"年龄不合法\"\n",[101,161416,161417],{"class":103,"line":1181},[101,161418,2387],{"emptyLinePlaceholder":27},[101,161420,161421,161423,161425,161427,161429],{"class":103,"line":1187},[101,161422,3088],{"class":107},[101,161424,15695],{"class":111},[101,161426,1697],{"class":107},[101,161428,156265],{"class":160},[101,161430,3726],{"class":111},[101,161432,161433,161435],{"class":103,"line":1201},[101,161434,14740],{"class":107},[101,161436,161437],{"class":216}," \"成年人\"\n",[101,161439,161440],{"class":103,"line":1207},[101,161441,2387],{"emptyLinePlaceholder":27},[101,161443,161444,161446],{"class":103,"line":1298},[101,161445,4077],{"class":107},[101,161447,161448],{"class":216}," \"未成年人\"\n",[101,161450,161451],{"class":103,"line":1304},[101,161452,2387],{"emptyLinePlaceholder":27},[101,161454,161455],{"class":103,"line":1316},[101,161456,2387],{"emptyLinePlaceholder":27},[101,161458,161459,161461,161464,161466],{"class":103,"line":1599},[101,161460,30404],{"class":160},[101,161462,161463],{"class":111},"(check_age(",[101,161465,811],{"class":160},[101,161467,30486],{"class":111},[101,161469,161470,161472,161474,161476,161478],{"class":103,"line":1604},[101,161471,30404],{"class":160},[101,161473,161463],{"class":111},[101,161475,643],{"class":107},[101,161477,329],{"class":160},[101,161479,30486],{"class":111},[10,161481,161482,161483,161485],{},"函数执行到 ",[98,161484,17034],{}," 后，后面的代码不会继续执行。",[43,161487,161489],{"id":161488},"_57-none","5.7 None",[10,161491,161492,161494],{},[98,161493,95666],{}," 表示空值或没有结果。",[10,161496,161497],{},"常见使用场景：",[55,161499,161500,161503,161506],{},[58,161501,161502],{},"函数没有返回值。",[58,161504,161505],{},"变量暂时没有具体值。",[58,161507,161508],{},"表示查询不到结果。",[92,161510,161512],{"className":30367,"code":161511,"language":30369,"meta":20,"style":20},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[98,161513,161514,161522,161526,161539],{"__ignoreMap":20},[101,161515,161516,161518,161520],{"class":103,"line":104},[101,161517,161286],{"class":111},[101,161519,157],{"class":107},[101,161521,152152],{"class":160},[101,161523,161524],{"class":103,"line":21},[101,161525,2387],{"emptyLinePlaceholder":27},[101,161527,161528,161530,161533,161535,161537],{"class":103,"line":1166},[101,161529,1518],{"class":107},[101,161531,161532],{"class":111}," result ",[101,161534,38916],{"class":107},[101,161536,38922],{"class":160},[101,161538,3726],{"class":111},[101,161540,161541,161543,161545,161548],{"class":103,"line":1181},[101,161542,31288],{"class":160},[101,161544,112],{"class":111},[101,161546,161547],{"class":216},"\"没有数据\"",[101,161549,118],{"class":111},[10,161551,161552,161553,161555,161556,161559,161560,28374],{},"判断 ",[98,161554,95666],{}," 推荐使用 ",[98,161557,161558],{},"is None","，不要写成 ",[98,161561,161562],{},"== None",[43,161564,161566],{"id":161565},"_58-函数文档字符串","5.8 函数文档字符串",[10,161568,161569],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[92,161571,161573],{"className":30367,"code":161572,"language":30369,"meta":20,"style":20},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[98,161574,161575,161585,161590],{"__ignoreMap":20},[101,161576,161577,161579,161582],{"class":103,"line":104},[101,161578,31936],{"class":107},[101,161580,161581],{"class":1950}," calculate_bmi",[101,161583,161584],{"class":111},"(weight, height):\n",[101,161586,161587],{"class":103,"line":21},[101,161588,161589],{"class":216},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[101,161591,161592,161594,161597,161599,161602,161604],{"class":103,"line":1166},[101,161593,4077],{"class":107},[101,161595,161596],{"class":111}," weight ",[101,161598,695],{"class":107},[101,161600,161601],{"class":111}," height ",[101,161603,10649],{"class":107},[101,161605,47712],{"class":160},[10,161607,161608],{},"查看说明：",[92,161610,161612],{"className":30367,"code":161611,"language":30369,"meta":20,"style":20},"help(calculate_bmi)\n",[98,161613,161614],{"__ignoreMap":20},[101,161615,161616,161619],{"class":103,"line":104},[101,161617,161618],{"class":160},"help",[101,161620,161621],{"class":111},"(calculate_bmi)\n",[10,161623,161624],{},"较完整的写法：",[92,161626,161628],{"className":30367,"code":161627,"language":30369,"meta":20,"style":20},"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",[98,161629,161630,161638,161643,161648,161652,161657,161662,161667,161671],{"__ignoreMap":20},[101,161631,161632,161634,161636],{"class":103,"line":104},[101,161633,31936],{"class":107},[101,161635,161581],{"class":1950},[101,161637,161584],{"class":111},[101,161639,161640],{"class":103,"line":21},[101,161641,161642],{"class":216},"    \"\"\"\n",[101,161644,161645],{"class":103,"line":1166},[101,161646,161647],{"class":216},"    计算BMI。\n",[101,161649,161650],{"class":103,"line":1181},[101,161651,2387],{"emptyLinePlaceholder":27},[101,161653,161654],{"class":103,"line":1187},[101,161655,161656],{"class":216},"    :param weight: 体重，单位kg\n",[101,161658,161659],{"class":103,"line":1201},[101,161660,161661],{"class":216},"    :param height: 身高，单位m\n",[101,161663,161664],{"class":103,"line":1207},[101,161665,161666],{"class":216},"    :return: BMI数值\n",[101,161668,161669],{"class":103,"line":1298},[101,161670,161642],{"class":216},[101,161672,161673,161675,161677,161679,161681,161683],{"class":103,"line":1304},[101,161674,4077],{"class":107},[101,161676,161596],{"class":111},[101,161678,695],{"class":107},[101,161680,161601],{"class":111},[101,161682,10649],{"class":107},[101,161684,47712],{"class":160},[43,161686,161688],{"id":161687},"_59-变量作用域","5.9 变量作用域",[72,161690,161692],{"id":161691},"_591-局部变量","5.9.1 局部变量",[10,161694,161695],{},"在函数内部定义的变量，只能在函数内部使用。",[92,161697,161699],{"className":30367,"code":161698,"language":30369,"meta":20,"style":20},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[98,161700,161701,161710,161718,161724,161728,161732,161737],{"__ignoreMap":20},[101,161702,161703,161705,161708],{"class":103,"line":104},[101,161704,31936],{"class":107},[101,161706,161707],{"class":1950}," test",[101,161709,31942],{"class":111},[101,161711,161712,161714,161716],{"class":103,"line":21},[101,161713,45582],{"class":111},[101,161715,157],{"class":107},[101,161717,58417],{"class":160},[101,161719,161720,161722],{"class":103,"line":1166},[101,161721,31288],{"class":160},[101,161723,125],{"class":111},[101,161725,161726],{"class":103,"line":1181},[101,161727,2387],{"emptyLinePlaceholder":27},[101,161729,161730],{"class":103,"line":1187},[101,161731,2387],{"emptyLinePlaceholder":27},[101,161733,161734],{"class":103,"line":1201},[101,161735,161736],{"class":111},"test()\n",[101,161738,161739,161741,161744],{"class":103,"line":1207},[101,161740,30404],{"class":160},[101,161742,161743],{"class":111},"(num)  ",[101,161745,161746],{"class":170},"# 报错\n",[72,161748,161750],{"id":161749},"_592-全局变量","5.9.2 全局变量",[10,161752,161753],{},"在函数外部定义的变量，可以在函数内部读取。",[92,161755,161757],{"className":30367,"code":161756,"language":30369,"meta":20,"style":20},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[98,161758,161759,161767,161771,161775,161783,161789,161793,161797],{"__ignoreMap":20},[101,161760,161761,161763,161765],{"class":103,"line":104},[101,161762,146516],{"class":111},[101,161764,157],{"class":107},[101,161766,149333],{"class":216},[101,161768,161769],{"class":103,"line":21},[101,161770,2387],{"emptyLinePlaceholder":27},[101,161772,161773],{"class":103,"line":1166},[101,161774,2387],{"emptyLinePlaceholder":27},[101,161776,161777,161779,161781],{"class":103,"line":1181},[101,161778,31936],{"class":107},[101,161780,160976],{"class":1950},[101,161782,31942],{"class":111},[101,161784,161785,161787],{"class":103,"line":1187},[101,161786,31288],{"class":160},[101,161788,150640],{"class":111},[101,161790,161791],{"class":103,"line":1201},[101,161792,2387],{"emptyLinePlaceholder":27},[101,161794,161795],{"class":103,"line":1207},[101,161796,2387],{"emptyLinePlaceholder":27},[101,161798,161799],{"class":103,"line":1298},[101,161800,161011],{"class":111},[10,161802,161803,161804,28374],{},"如果要在函数内部修改全局变量，需要 ",[98,161805,161806],{},"global",[92,161808,161810],{"className":30367,"code":161809,"language":30369,"meta":20,"style":20},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[98,161811,161812,161820,161824,161828,161837,161845,161853,161857,161861,161866],{"__ignoreMap":20},[101,161813,161814,161816,161818],{"class":103,"line":104},[101,161815,146671],{"class":111},[101,161817,157],{"class":107},[101,161819,47322],{"class":160},[101,161821,161822],{"class":103,"line":21},[101,161823,2387],{"emptyLinePlaceholder":27},[101,161825,161826],{"class":103,"line":1166},[101,161827,2387],{"emptyLinePlaceholder":27},[101,161829,161830,161832,161835],{"class":103,"line":1181},[101,161831,31936],{"class":107},[101,161833,161834],{"class":1950}," add_count",[101,161836,31942],{"class":111},[101,161838,161839,161842],{"class":103,"line":1187},[101,161840,161841],{"class":107},"    global",[101,161843,161844],{"class":111}," count\n",[101,161846,161847,161849,161851],{"class":103,"line":1201},[101,161848,159413],{"class":111},[101,161850,9465],{"class":107},[101,161852,55688],{"class":160},[101,161854,161855],{"class":103,"line":1207},[101,161856,2387],{"emptyLinePlaceholder":27},[101,161858,161859],{"class":103,"line":1298},[101,161860,2387],{"emptyLinePlaceholder":27},[101,161862,161863],{"class":103,"line":1304},[101,161864,161865],{"class":111},"add_count()\n",[101,161867,161868,161870],{"class":103,"line":1316},[101,161869,30404],{"class":160},[101,161871,161872],{"class":111},"(count)\n",[10,161874,161875],{},"不建议大量使用全局变量，项目变大后很难维护。",[43,161877,161879],{"id":161878},"_510-函数嵌套调用","5.10 函数嵌套调用",[10,161881,161882],{},"一个函数中可以调用另一个函数。",[92,161884,161886],{"className":30367,"code":161885,"language":30369,"meta":20,"style":20},"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",[98,161887,161888,161897,161911,161915,161919,161928,161933,161953,161974,161978,161982,161986],{"__ignoreMap":20},[101,161889,161890,161892,161895],{"class":103,"line":104},[101,161891,31936],{"class":107},[101,161893,161894],{"class":1950}," print_line",[101,161896,31942],{"class":111},[101,161898,161899,161901,161903,161905,161907,161909],{"class":103,"line":21},[101,161900,31288],{"class":160},[101,161902,112],{"class":111},[101,161904,32472],{"class":216},[101,161906,6506],{"class":107},[101,161908,78654],{"class":160},[101,161910,118],{"class":111},[101,161912,161913],{"class":103,"line":1166},[101,161914,2387],{"emptyLinePlaceholder":27},[101,161916,161917],{"class":103,"line":1181},[101,161918,2387],{"emptyLinePlaceholder":27},[101,161920,161921,161923,161926],{"class":103,"line":1187},[101,161922,31936],{"class":107},[101,161924,161925],{"class":1950}," print_info",[101,161927,149355],{"class":111},[101,161929,161930],{"class":103,"line":1201},[101,161931,161932],{"class":111},"    print_line()\n",[101,161934,161935,161937,161939,161941,161943,161945,161947,161949,161951],{"class":103,"line":1207},[101,161936,31288],{"class":160},[101,161938,112],{"class":111},[101,161940,164],{"class":107},[101,161942,156662],{"class":216},[101,161944,1007],{"class":160},[101,161946,79799],{"class":111},[101,161948,1057],{"class":160},[101,161950,362],{"class":216},[101,161952,118],{"class":111},[101,161954,161955,161957,161959,161961,161964,161966,161968,161970,161972],{"class":103,"line":1298},[101,161956,31288],{"class":160},[101,161958,112],{"class":111},[101,161960,164],{"class":107},[101,161962,161963],{"class":216},"\"年龄:",[101,161965,1007],{"class":160},[101,161967,70210],{"class":111},[101,161969,1057],{"class":160},[101,161971,362],{"class":216},[101,161973,118],{"class":111},[101,161975,161976],{"class":103,"line":1304},[101,161977,161932],{"class":111},[101,161979,161980],{"class":103,"line":1316},[101,161981,2387],{"emptyLinePlaceholder":27},[101,161983,161984],{"class":103,"line":1599},[101,161985,2387],{"emptyLinePlaceholder":27},[101,161987,161988,161991,161993,161995,161997],{"class":103,"line":1604},[101,161989,161990],{"class":111},"print_info(",[101,161992,149868],{"class":216},[101,161994,12423],{"class":111},[101,161996,761],{"class":160},[101,161998,118],{"class":111},[10,162000,162001],{},"这种方式可以把小功能组合成大功能。",[43,162003,162005],{"id":162004},"_511-参数检查","5.11 参数检查",[10,162007,162008],{},"函数内部可以检查参数是否合法。",[92,162010,162012],{"className":30367,"code":162011,"language":30369,"meta":20,"style":20},"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",[98,162013,162014,162023,162035,162041,162051,162055,162059,162076,162080,162092,162103,162109],{"__ignoreMap":20},[101,162015,162016,162018,162021],{"class":103,"line":104},[101,162017,31936],{"class":107},[101,162019,162020],{"class":1950}," divide",[101,162022,151073],{"class":111},[101,162024,162025,162027,162029,162031,162033],{"class":103,"line":21},[101,162026,3088],{"class":107},[101,162028,10870],{"class":111},[101,162030,2936],{"class":107},[101,162032,4080],{"class":160},[101,162034,3726],{"class":111},[101,162036,162037,162039],{"class":103,"line":1166},[101,162038,14740],{"class":107},[101,162040,152152],{"class":160},[101,162042,162043,162045,162047,162049],{"class":103,"line":1181},[101,162044,4077],{"class":107},[101,162046,10857],{"class":111},[101,162048,695],{"class":107},[101,162050,151084],{"class":111},[101,162052,162053],{"class":103,"line":1187},[101,162054,2387],{"emptyLinePlaceholder":27},[101,162056,162057],{"class":103,"line":1201},[101,162058,2387],{"emptyLinePlaceholder":27},[101,162060,162061,162063,162065,162068,162070,162072,162074],{"class":103,"line":1207},[101,162062,161286],{"class":111},[101,162064,157],{"class":107},[101,162066,162067],{"class":111}," divide(",[101,162069,557],{"class":160},[101,162071,12423],{"class":111},[101,162073,303],{"class":160},[101,162075,118],{"class":111},[101,162077,162078],{"class":103,"line":1298},[101,162079,2387],{"emptyLinePlaceholder":27},[101,162081,162082,162084,162086,162088,162090],{"class":103,"line":1304},[101,162083,1518],{"class":107},[101,162085,161532],{"class":111},[101,162087,38916],{"class":107},[101,162089,38922],{"class":160},[101,162091,3726],{"class":111},[101,162093,162094,162096,162098,162101],{"class":103,"line":1316},[101,162095,31288],{"class":160},[101,162097,112],{"class":111},[101,162099,162100],{"class":216},"\"除数不能为0\"",[101,162102,118],{"class":111},[101,162104,162105,162107],{"class":103,"line":1599},[101,162106,1688],{"class":107},[101,162108,3726],{"class":111},[101,162110,162111,162113],{"class":103,"line":1604},[101,162112,31288],{"class":160},[101,162114,76574],{"class":111},[43,162116,162118],{"id":162117},"_512-类型提示","5.12 类型提示",[10,162120,162121],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[92,162123,162125],{"className":30367,"code":162124,"language":30369,"meta":20,"style":20},"def add(a: int, b: int) -> int:\n    return a + b\n",[98,162126,162127,162150],{"__ignoreMap":20},[101,162128,162129,162131,162133,162136,162138,162141,162143,162146,162148],{"class":103,"line":104},[101,162130,31936],{"class":107},[101,162132,5197],{"class":1950},[101,162134,162135],{"class":111},"(a: ",[101,162137,115],{"class":160},[101,162139,162140],{"class":111},", b: ",[101,162142,115],{"class":160},[101,162144,162145],{"class":111},") -> ",[101,162147,115],{"class":160},[101,162149,3726],{"class":111},[101,162151,162152,162154,162156,162158],{"class":103,"line":21},[101,162153,4077],{"class":107},[101,162155,10857],{"class":111},[101,162157,592],{"class":107},[101,162159,151084],{"class":111},[10,162161,162162],{},"字符串参数：",[92,162164,162166],{"className":30367,"code":162165,"language":30369,"meta":20,"style":20},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[98,162167,162168,162185],{"__ignoreMap":20},[101,162169,162170,162172,162174,162177,162179,162181,162183],{"class":103,"line":104},[101,162171,31936],{"class":107},[101,162173,160976],{"class":1950},[101,162175,162176],{"class":111},"(name: ",[101,162178,1286],{"class":160},[101,162180,162145],{"class":111},[101,162182,95666],{"class":160},[101,162184,3726],{"class":111},[101,162186,162187,162189,162191,162193,162195,162197,162199,162201,162203],{"class":103,"line":21},[101,162188,31288],{"class":160},[101,162190,112],{"class":111},[101,162192,164],{"class":107},[101,162194,157034],{"class":216},[101,162196,1007],{"class":160},[101,162198,79799],{"class":111},[101,162200,1057],{"class":160},[101,162202,362],{"class":216},[101,162204,118],{"class":111},[10,162206,162207],{},"列表参数：",[92,162209,162211],{"className":30367,"code":162210,"language":30369,"meta":20,"style":20},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[98,162212,162213,162232,162240,162252,162261],{"__ignoreMap":20},[101,162214,162215,162217,162220,162223,162225,162228,162230],{"class":103,"line":104},[101,162216,31936],{"class":107},[101,162218,162219],{"class":1950}," get_total",[101,162221,162222],{"class":111},"(numbers: list[",[101,162224,115],{"class":160},[101,162226,162227],{"class":111},"]) -> ",[101,162229,115],{"class":160},[101,162231,3726],{"class":111},[101,162233,162234,162236,162238],{"class":103,"line":21},[101,162235,159287],{"class":111},[101,162237,157],{"class":107},[101,162239,47322],{"class":160},[101,162241,162242,162244,162247,162249],{"class":103,"line":1166},[101,162243,3188],{"class":107},[101,162245,162246],{"class":111}," number ",[101,162248,26032],{"class":107},[101,162250,162251],{"class":111}," numbers:\n",[101,162253,162254,162256,162258],{"class":103,"line":1181},[101,162255,159962],{"class":111},[101,162257,9465],{"class":107},[101,162259,162260],{"class":111}," number\n",[101,162262,162263,162265],{"class":103,"line":1187},[101,162264,4077],{"class":107},[101,162266,162267],{"class":111}," total\n",[10,162269,162270],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[43,162272,162274],{"id":162273},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[92,162276,162278],{"className":30367,"code":162277,"language":30369,"meta":20,"style":20},"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",[98,162279,162280,162290,162294,162298,162306,162317,162327,162337,162347,162357,162361,162365,162374,162396,162400,162404,162413,162419,162439,162451,162462,162466,162475,162486,162491,162495,162499,162508,162514,162533,162545,162555,162559,162570,162580,162584,162592,162603,162607,162611,162615,162623,162628,162642,162646,162658,162663,162675,162680,162692,162697,162709,162719,162723,162729],{"__ignoreMap":20},[101,162281,162282,162285,162287],{"class":103,"line":104},[101,162283,162284],{"class":111},"balance ",[101,162286,157],{"class":107},[101,162288,162289],{"class":160}," 1000\n",[101,162291,162292],{"class":103,"line":21},[101,162293,2387],{"emptyLinePlaceholder":27},[101,162295,162296],{"class":103,"line":1166},[101,162297,2387],{"emptyLinePlaceholder":27},[101,162299,162300,162302,162304],{"class":103,"line":1181},[101,162301,31936],{"class":107},[101,162303,152013],{"class":1950},[101,162305,31942],{"class":111},[101,162307,162308,162310,162312,162315],{"class":103,"line":1187},[101,162309,31288],{"class":160},[101,162311,112],{"class":111},[101,162313,162314],{"class":216},"\"====== ATM ======\"",[101,162316,118],{"class":111},[101,162318,162319,162321,162323,162325],{"class":103,"line":1201},[101,162320,31288],{"class":160},[101,162322,112],{"class":111},[101,162324,160628],{"class":216},[101,162326,118],{"class":111},[101,162328,162329,162331,162333,162335],{"class":103,"line":1207},[101,162330,31288],{"class":160},[101,162332,112],{"class":111},[101,162334,160639],{"class":216},[101,162336,118],{"class":111},[101,162338,162339,162341,162343,162345],{"class":103,"line":1298},[101,162340,31288],{"class":160},[101,162342,112],{"class":111},[101,162344,160650],{"class":216},[101,162346,118],{"class":111},[101,162348,162349,162351,162353,162355],{"class":103,"line":1304},[101,162350,31288],{"class":160},[101,162352,112],{"class":111},[101,162354,160661],{"class":216},[101,162356,118],{"class":111},[101,162358,162359],{"class":103,"line":1316},[101,162360,2387],{"emptyLinePlaceholder":27},[101,162362,162363],{"class":103,"line":1599},[101,162364,2387],{"emptyLinePlaceholder":27},[101,162366,162367,162369,162372],{"class":103,"line":1604},[101,162368,31936],{"class":107},[101,162370,162371],{"class":1950}," show_balance",[101,162373,31942],{"class":111},[101,162375,162376,162378,162380,162382,162385,162387,162390,162392,162394],{"class":103,"line":1610},[101,162377,31288],{"class":160},[101,162379,112],{"class":111},[101,162381,164],{"class":107},[101,162383,162384],{"class":216},"\"当前余额:",[101,162386,1007],{"class":160},[101,162388,162389],{"class":111},"balance",[101,162391,1057],{"class":160},[101,162393,156992],{"class":216},[101,162395,118],{"class":111},[101,162397,162398],{"class":103,"line":1615},[101,162399,2387],{"emptyLinePlaceholder":27},[101,162401,162402],{"class":103,"line":1629},[101,162403,2387],{"emptyLinePlaceholder":27},[101,162405,162406,162408,162411],{"class":103,"line":1634},[101,162407,31936],{"class":107},[101,162409,162410],{"class":1950}," save_money",[101,162412,31942],{"class":111},[101,162414,162415,162417],{"class":103,"line":1640},[101,162416,161841],{"class":107},[101,162418,150079],{"class":111},[101,162420,162421,162424,162426,162428,162430,162432,162434,162437],{"class":103,"line":1661},[101,162422,162423],{"class":111},"    money ",[101,162425,157],{"class":107},[101,162427,109777],{"class":160},[101,162429,112],{"class":111},[101,162431,53810],{"class":160},[101,162433,112],{"class":111},[101,162435,162436],{"class":216},"\"请输入存款金额:\"",[101,162438,30486],{"class":111},[101,162440,162441,162443,162445,162447,162449],{"class":103,"line":1666},[101,162442,3088],{"class":107},[101,162444,150122],{"class":111},[101,162446,1575],{"class":107},[101,162448,4080],{"class":160},[101,162450,3726],{"class":111},[101,162452,162453,162455,162457,162460],{"class":103,"line":1680},[101,162454,32440],{"class":160},[101,162456,112],{"class":111},[101,162458,162459],{"class":216},"\"金额必须大于0\"",[101,162461,118],{"class":111},[101,162463,162464],{"class":103,"line":1685},[101,162465,152341],{"class":107},[101,162467,162468,162471,162473],{"class":103,"line":1714},[101,162469,162470],{"class":111},"    balance ",[101,162472,9465],{"class":107},[101,162474,150155],{"class":111},[101,162476,162477,162479,162481,162484],{"class":103,"line":1719},[101,162478,31288],{"class":160},[101,162480,112],{"class":111},[101,162482,162483],{"class":216},"\"存款成功\"",[101,162485,118],{"class":111},[101,162487,162488],{"class":103,"line":1736},[101,162489,162490],{"class":111},"    show_balance()\n",[101,162492,162493],{"class":103,"line":1741},[101,162494,2387],{"emptyLinePlaceholder":27},[101,162496,162497],{"class":103,"line":1746},[101,162498,2387],{"emptyLinePlaceholder":27},[101,162500,162501,162503,162506],{"class":103,"line":1751},[101,162502,31936],{"class":107},[101,162504,162505],{"class":1950}," withdraw_money",[101,162507,31942],{"class":111},[101,162509,162510,162512],{"class":103,"line":1765},[101,162511,161841],{"class":107},[101,162513,150079],{"class":111},[101,162515,162516,162518,162520,162522,162524,162526,162528,162531],{"class":103,"line":1770},[101,162517,162423],{"class":111},[101,162519,157],{"class":107},[101,162521,109777],{"class":160},[101,162523,112],{"class":111},[101,162525,53810],{"class":160},[101,162527,112],{"class":111},[101,162529,162530],{"class":216},"\"请输入取款金额:\"",[101,162532,30486],{"class":111},[101,162534,162535,162537,162539,162541,162543],{"class":103,"line":2564},[101,162536,3088],{"class":107},[101,162538,150122],{"class":111},[101,162540,1575],{"class":107},[101,162542,4080],{"class":160},[101,162544,3726],{"class":111},[101,162546,162547,162549,162551,162553],{"class":103,"line":2578},[101,162548,32440],{"class":160},[101,162550,112],{"class":111},[101,162552,162459],{"class":216},[101,162554,118],{"class":111},[101,162556,162557],{"class":103,"line":2586},[101,162558,152341],{"class":107},[101,162560,162561,162563,162565,162567],{"class":103,"line":2591},[101,162562,3088],{"class":107},[101,162564,150122],{"class":111},[101,162566,1071],{"class":107},[101,162568,162569],{"class":111}," balance:\n",[101,162571,162572,162574,162576,162578],{"class":103,"line":2597},[101,162573,32440],{"class":160},[101,162575,112],{"class":111},[101,162577,150217],{"class":216},[101,162579,118],{"class":111},[101,162581,162582],{"class":103,"line":2603},[101,162583,152341],{"class":107},[101,162585,162586,162588,162590],{"class":103,"line":2608},[101,162587,162470],{"class":111},[101,162589,150232],{"class":107},[101,162591,150155],{"class":111},[101,162593,162594,162596,162598,162601],{"class":103,"line":7936},[101,162595,31288],{"class":160},[101,162597,112],{"class":111},[101,162599,162600],{"class":216},"\"取款成功\"",[101,162602,118],{"class":111},[101,162604,162605],{"class":103,"line":7960},[101,162606,162490],{"class":111},[101,162608,162609],{"class":103,"line":7965},[101,162610,2387],{"emptyLinePlaceholder":27},[101,162612,162613],{"class":103,"line":7971},[101,162614,2387],{"emptyLinePlaceholder":27},[101,162616,162617,162619,162621],{"class":103,"line":7998},[101,162618,108643],{"class":107},[101,162620,95272],{"class":160},[101,162622,3726],{"class":111},[101,162624,162625],{"class":103,"line":8003},[101,162626,162627],{"class":111},"    show_menu()\n",[101,162629,162630,162632,162634,162636,162638,162640],{"class":103,"line":8009},[101,162631,160672],{"class":111},[101,162633,157],{"class":107},[101,162635,60594],{"class":160},[101,162637,112],{"class":111},[101,162639,153053],{"class":216},[101,162641,118],{"class":111},[101,162643,162644],{"class":103,"line":8021},[101,162645,2387],{"emptyLinePlaceholder":27},[101,162647,162648,162650,162652,162654,162656],{"class":103,"line":8033},[101,162649,3088],{"class":107},[101,162651,153066],{"class":111},[101,162653,2936],{"class":107},[101,162655,153071],{"class":216},[101,162657,3726],{"class":111},[101,162659,162660],{"class":103,"line":8045},[101,162661,162662],{"class":111},"        show_balance()\n",[101,162664,162665,162667,162669,162671,162673],{"class":103,"line":9704},[101,162666,39282],{"class":107},[101,162668,153066],{"class":111},[101,162670,2936],{"class":107},[101,162672,153090],{"class":216},[101,162674,3726],{"class":111},[101,162676,162677],{"class":103,"line":9729},[101,162678,162679],{"class":111},"        save_money()\n",[101,162681,162682,162684,162686,162688,162690],{"class":103,"line":9752},[101,162683,39282],{"class":107},[101,162685,153066],{"class":111},[101,162687,2936],{"class":107},[101,162689,153108],{"class":216},[101,162691,3726],{"class":111},[101,162693,162694],{"class":103,"line":9776},[101,162695,162696],{"class":111},"        withdraw_money()\n",[101,162698,162699,162701,162703,162705,162707],{"class":103,"line":9781},[101,162700,39282],{"class":107},[101,162702,153066],{"class":111},[101,162704,2936],{"class":107},[101,162706,153162],{"class":216},[101,162708,3726],{"class":111},[101,162710,162711,162713,162715,162717],{"class":103,"line":9786},[101,162712,32440],{"class":160},[101,162714,112],{"class":111},[101,162716,153173],{"class":216},[101,162718,118],{"class":111},[101,162720,162721],{"class":103,"line":9791},[101,162722,31616],{"class":107},[101,162724,162725,162727],{"class":103,"line":9800},[101,162726,158002],{"class":107},[101,162728,3726],{"class":111},[101,162730,162731,162733,162735,162737],{"class":103,"line":9805},[101,162732,32440],{"class":160},[101,162734,112],{"class":111},[101,162736,153194],{"class":216},[101,162738,118],{"class":111},[10,162740,162741],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[43,162743,162745],{"id":162744},"_514-易错点","5.14 易错点",[55,162747,162748,162751,162754,162759,162764,162767],{},[58,162749,162750],{},"函数定义后必须调用才会执行。",[58,162752,162753],{},"函数名后面有括号才是调用。",[58,162755,162756,162758],{},[98,162757,17034],{}," 后面的代码不会执行。",[58,162760,162761,162762,28374],{},"没有返回值的函数默认返回 ",[98,162763,95666],{},[58,162765,162766],{},"局部变量不能在函数外部访问。",[58,162768,162769,162770,162772],{},"不要滥用 ",[98,162771,161806],{},"，更好的方式是让函数返回新值。",[10,162774,162775,162776,162778],{},"例如不用 ",[98,162777,161806],{}," 改写存款：",[92,162780,162782],{"className":30367,"code":162781,"language":30369,"meta":20,"style":20},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[98,162783,162784,162793,162804,162808,162812,162820,162833],{"__ignoreMap":20},[101,162785,162786,162788,162790],{"class":103,"line":104},[101,162787,31936],{"class":107},[101,162789,162410],{"class":1950},[101,162791,162792],{"class":111},"(balance, money):\n",[101,162794,162795,162797,162800,162802],{"class":103,"line":21},[101,162796,4077],{"class":107},[101,162798,162799],{"class":111}," balance ",[101,162801,592],{"class":107},[101,162803,150155],{"class":111},[101,162805,162806],{"class":103,"line":1166},[101,162807,2387],{"emptyLinePlaceholder":27},[101,162809,162810],{"class":103,"line":1181},[101,162811,2387],{"emptyLinePlaceholder":27},[101,162813,162814,162816,162818],{"class":103,"line":1187},[101,162815,162284],{"class":111},[101,162817,157],{"class":107},[101,162819,162289],{"class":160},[101,162821,162822,162824,162826,162829,162831],{"class":103,"line":1201},[101,162823,162284],{"class":111},[101,162825,157],{"class":107},[101,162827,162828],{"class":111}," save_money(balance, ",[101,162830,1709],{"class":160},[101,162832,118],{"class":111},[101,162834,162835,162837],{"class":103,"line":1207},[101,162836,30404],{"class":160},[101,162838,162839],{"class":111},"(balance)\n",[43,162841,162843],{"id":162842},"_515-本章练习","5.15 本章练习",[55,162845,162846,162853,162859,162865,162871],{},[58,162847,162848,162849,162852],{},"定义函数 ",[98,162850,162851],{},"print_student(name, age)","，输出学生信息。",[58,162854,162848,162855,162858],{},[98,162856,162857],{},"get_max(a, b, c)","，返回三个数中的最大值。",[58,162860,162848,162861,162864],{},[98,162862,162863],{},"is_even(num)","，判断一个数是否为偶数。",[58,162866,162848,162867,162870],{},[98,162868,162869],{},"calculate_bmi(weight, height)","，返回 BMI。",[58,162872,162873],{},"把第 4 章的菜单程序拆分成多个函数。",[5114,162875,162876],{},"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":20,"searchDepth":21,"depth":21,"links":162878},[162879,162880,162881,162882,162883,162884,162885,162886,162887,162891,162892,162893,162894,162895,162896],{"id":160899,"depth":21,"text":160900},{"id":160940,"depth":21,"text":160941},{"id":161030,"depth":21,"text":161031},{"id":161111,"depth":21,"text":161112},{"id":161244,"depth":21,"text":161245},{"id":161366,"depth":21,"text":161367},{"id":161488,"depth":21,"text":161489},{"id":161565,"depth":21,"text":161566},{"id":161687,"depth":21,"text":161688,"children":162888},[162889,162890],{"id":161691,"depth":1166,"text":161692},{"id":161749,"depth":1166,"text":161750},{"id":161878,"depth":21,"text":161879},{"id":162004,"depth":21,"text":162005},{"id":162117,"depth":21,"text":162118},{"id":162273,"depth":21,"text":162274},{"id":162744,"depth":21,"text":162745},{"id":162842,"depth":21,"text":162843},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160891,"description":23365},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162903,"title":162904,"body":162905,"description":23365,"extension":24,"meta":165949,"navigation":27,"path":165950,"seo":165951,"stem":165952,"__hash__":165953},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162906,"toc":165930},[162907,162910,162914,162917,162920,163024,163027,163031,163034,163114,163117,163121,163124,163184,163187,163223,163226,163241,163245,163318,163321,163376,163379,163449,163452,163536,163546,163604,163608,163653,163656,163682,163685,163791,163795,163798,163840,163843,163907,163910,163914,163917,163978,163981,164011,164014,164052,164056,164059,164068,164071,164195,164198,164239,164243,164246,164257,164297,164300,164315,164320,164323,164390,164393,164483,164487,164490,164538,164541,164568,164570,164600,164603,164623,164626,164657,164660,164693,164697,164700,164724,164727,164751,164754,164778,164782,164785,164915,164918,164998,165001,165076,165080,165083,165133,165136,165178,165181,165205,165207,165231,165234,165289,165292,165358,165362,165365,165368,165406,165409,165462,165465,165511,165514,165547,165550,165554,165873,165877,165906,165910,165927],[39,162908,162904],{"id":162909},"_6-数据容器",[43,162911,162913],{"id":162912},"_61-什么是数据容器","6.1 什么是数据容器",[10,162915,162916],{},"数据容器用于一次保存多个数据。",[10,162918,162919],{},"常见容器：",[249,162921,162922,162939],{},[252,162923,162924],{},[255,162925,162926,162928,162931,162934,162937],{},[258,162927,25760],{},[258,162929,162930],{},"是否有序",[258,162932,162933],{},"是否可变",[258,162935,162936],{},"是否允许重复",[258,162938,27481],{},[296,162940,162941,162959,162975,162990,163007],{},[255,162942,162943,162946,162949,162952,162955],{},[301,162944,162945],{},"list列表",[301,162947,162948],{},"有序",[301,162950,162951],{},"可变",[301,162953,162954],{},"允许",[301,162956,162957],{},[98,162958,155237],{},[255,162960,162961,162964,162966,162969,162971],{},[301,162962,162963],{},"tuple元组",[301,162965,162948],{},[301,162967,162968],{},"不可变",[301,162970,162954],{},[301,162972,162973],{},[98,162974,155250],{},[255,162976,162977,162980,162982,162984,162986],{},[301,162978,162979],{},"str字符串",[301,162981,162948],{},[301,162983,162968],{},[301,162985,162954],{},[301,162987,162988],{},[98,162989,155860],{},[255,162991,162992,162995,162998,163000,163003],{},[301,162993,162994],{},"set集合",[301,162996,162997],{},"无序",[301,162999,162951],{},[301,163001,163002],{},"不允许",[301,163004,163005],{},[98,163006,155275],{},[255,163008,163009,163012,163014,163016,163019],{},[301,163010,163011],{},"dict字典",[301,163013,162948],{},[301,163015,162951],{},[301,163017,163018],{},"key不允许重复",[301,163020,163021],{},[98,163022,163023],{},"{\"name\": \"小明\"}",[10,163025,163026],{},"Python 3.7 之后，字典保持插入顺序。",[43,163028,163030],{"id":163029},"_62-列表list","6.2 列表list",[10,163032,163033],{},"列表用于保存一组有顺序的数据。",[92,163035,163037],{"className":30367,"code":163036,"language":30369,"meta":20,"style":20},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[98,163038,163039,163059,163084,163105],{"__ignoreMap":20},[101,163040,163041,163043,163045,163047,163049,163051,163053,163055,163057],{"class":103,"line":104},[101,163042,160360],{"class":111},[101,163044,157],{"class":107},[101,163046,52215],{"class":111},[101,163048,149868],{"class":216},[101,163050,12423],{"class":111},[101,163052,150916],{"class":216},[101,163054,12423],{"class":111},[101,163056,159711],{"class":216},[101,163058,33235],{"class":111},[101,163060,163061,163064,163066,163068,163070,163072,163074,163076,163078,163080,163082],{"class":103,"line":21},[101,163062,163063],{"class":111},"numbers ",[101,163065,157],{"class":107},[101,163067,52215],{"class":111},[101,163069,329],{"class":160},[101,163071,12423],{"class":111},[101,163073,189],{"class":160},[101,163075,12423],{"class":111},[101,163077,183],{"class":160},[101,163079,12423],{"class":111},[101,163081,404],{"class":160},[101,163083,33235],{"class":111},[101,163085,163086,163089,163091,163093,163095,163097,163099,163101,163103],{"class":103,"line":1166},[101,163087,163088],{"class":111},"mixed ",[101,163090,157],{"class":107},[101,163092,52215],{"class":111},[101,163094,149868],{"class":216},[101,163096,12423],{"class":111},[101,163098,761],{"class":160},[101,163100,12423],{"class":111},[101,163102,31465],{"class":160},[101,163104,33235],{"class":111},[101,163106,163107,163110,163112],{"class":103,"line":1181},[101,163108,163109],{"class":111},"empty ",[101,163111,157],{"class":107},[101,163113,51827],{"class":111},[10,163115,163116],{},"推荐一个列表中保存同类数据，代码更清晰。",[43,163118,163120],{"id":163119},"_63-列表索引","6.3 列表索引",[10,163122,163123],{},"正向索引从 0 开始：",[92,163125,163127],{"className":30367,"code":163126,"language":30369,"meta":20,"style":20},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[98,163128,163129,163149,163153,163164,163174],{"__ignoreMap":20},[101,163130,163131,163133,163135,163137,163139,163141,163143,163145,163147],{"class":103,"line":104},[101,163132,160360],{"class":111},[101,163134,157],{"class":107},[101,163136,52215],{"class":111},[101,163138,149868],{"class":216},[101,163140,12423],{"class":111},[101,163142,150916],{"class":216},[101,163144,12423],{"class":111},[101,163146,159711],{"class":216},[101,163148,33235],{"class":111},[101,163150,163151],{"class":103,"line":21},[101,163152,2387],{"emptyLinePlaceholder":27},[101,163154,163155,163157,163160,163162],{"class":103,"line":1166},[101,163156,30404],{"class":160},[101,163158,163159],{"class":111},"(names[",[101,163161,303],{"class":160},[101,163163,4644],{"class":111},[101,163165,163166,163168,163170,163172],{"class":103,"line":1181},[101,163167,30404],{"class":160},[101,163169,163159],{"class":111},[101,163171,329],{"class":160},[101,163173,4644],{"class":111},[101,163175,163176,163178,163180,163182],{"class":103,"line":1187},[101,163177,30404],{"class":160},[101,163179,163159],{"class":111},[101,163181,189],{"class":160},[101,163183,4644],{"class":111},[10,163185,163186],{},"反向索引从 -1 开始：",[92,163188,163190],{"className":30367,"code":163189,"language":30369,"meta":20,"style":20},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[98,163191,163192,163208],{"__ignoreMap":20},[101,163193,163194,163196,163198,163200,163202,163205],{"class":103,"line":104},[101,163195,30404],{"class":160},[101,163197,163159],{"class":111},[101,163199,643],{"class":107},[101,163201,329],{"class":160},[101,163203,163204],{"class":111},"])  ",[101,163206,163207],{"class":170},"# 小刚\n",[101,163209,163210,163212,163214,163216,163218,163220],{"class":103,"line":21},[101,163211,30404],{"class":160},[101,163213,163159],{"class":111},[101,163215,643],{"class":107},[101,163217,189],{"class":160},[101,163219,163204],{"class":111},[101,163221,163222],{"class":170},"# 小红\n",[10,163224,163225],{},"索引越界会报错：",[92,163227,163229],{"className":30367,"code":163228,"language":30369,"meta":20,"style":20},"print(names[3])\n",[98,163230,163231],{"__ignoreMap":20},[101,163232,163233,163235,163237,163239],{"class":103,"line":104},[101,163234,30404],{"class":160},[101,163236,163159],{"class":111},[101,163238,183],{"class":160},[101,163240,4644],{"class":111},[43,163242,163244],{"id":163243},"_64-列表常用方法","6.4 列表常用方法",[92,163246,163248],{"className":30367,"code":163247,"language":30369,"meta":20,"style":20},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[98,163249,163250,163266,163270,163279,163293,163307,163311],{"__ignoreMap":20},[101,163251,163252,163254,163256,163258,163260,163262,163264],{"class":103,"line":104},[101,163253,160360],{"class":111},[101,163255,157],{"class":107},[101,163257,52215],{"class":111},[101,163259,149868],{"class":216},[101,163261,12423],{"class":111},[101,163263,150916],{"class":216},[101,163265,33235],{"class":111},[101,163267,163268],{"class":103,"line":21},[101,163269,2387],{"emptyLinePlaceholder":27},[101,163271,163272,163275,163277],{"class":103,"line":1166},[101,163273,163274],{"class":111},"names.append(",[101,163276,159711],{"class":216},[101,163278,118],{"class":111},[101,163280,163281,163284,163286,163288,163291],{"class":103,"line":1181},[101,163282,163283],{"class":111},"names.insert(",[101,163285,329],{"class":160},[101,163287,12423],{"class":111},[101,163289,163290],{"class":216},"\"小李\"",[101,163292,118],{"class":111},[101,163294,163295,163298,163300,163302,163305],{"class":103,"line":1187},[101,163296,163297],{"class":111},"names.extend([",[101,163299,8671],{"class":216},[101,163301,12423],{"class":111},[101,163303,163304],{"class":216},"\"小赵\"",[101,163306,4644],{"class":111},[101,163308,163309],{"class":103,"line":1201},[101,163310,2387],{"emptyLinePlaceholder":27},[101,163312,163313,163315],{"class":103,"line":1207},[101,163314,30404],{"class":160},[101,163316,163317],{"class":111},"(names)\n",[10,163319,163320],{},"删除元素：",[92,163322,163324],{"className":30367,"code":163323,"language":30369,"meta":20,"style":20},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[98,163325,163326,163335,163345,163359,163371],{"__ignoreMap":20},[101,163327,163328,163331,163333],{"class":103,"line":104},[101,163329,163330],{"class":111},"names.remove(",[101,163332,150916],{"class":216},[101,163334,118],{"class":111},[101,163336,163337,163340,163342],{"class":103,"line":21},[101,163338,163339],{"class":111},"last ",[101,163341,157],{"class":107},[101,163343,163344],{"class":111}," names.pop()\n",[101,163346,163347,163350,163352,163355,163357],{"class":103,"line":1166},[101,163348,163349],{"class":111},"first ",[101,163351,157],{"class":107},[101,163353,163354],{"class":111}," names.pop(",[101,163356,303],{"class":160},[101,163358,118],{"class":111},[101,163360,163361,163364,163367,163369],{"class":103,"line":1181},[101,163362,163363],{"class":107},"del",[101,163365,163366],{"class":111}," names[",[101,163368,303],{"class":160},[101,163370,33235],{"class":111},[101,163372,163373],{"class":103,"line":1187},[101,163374,163375],{"class":111},"names.clear()\n",[10,163377,163378],{},"查询和统计：",[92,163380,163382],{"className":30367,"code":163381,"language":30369,"meta":20,"style":20},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[98,163383,163384,163412,163416,163427,163438],{"__ignoreMap":20},[101,163385,163386,163388,163390,163392,163394,163396,163398,163400,163402,163404,163406,163408,163410],{"class":103,"line":104},[101,163387,163063],{"class":111},[101,163389,157],{"class":107},[101,163391,52215],{"class":111},[101,163393,329],{"class":160},[101,163395,12423],{"class":111},[101,163397,189],{"class":160},[101,163399,12423],{"class":111},[101,163401,183],{"class":160},[101,163403,12423],{"class":111},[101,163405,189],{"class":160},[101,163407,12423],{"class":111},[101,163409,404],{"class":160},[101,163411,33235],{"class":111},[101,163413,163414],{"class":103,"line":21},[101,163415,2387],{"emptyLinePlaceholder":27},[101,163417,163418,163420,163423,163425],{"class":103,"line":1166},[101,163419,30404],{"class":160},[101,163421,163422],{"class":111},"(numbers.index(",[101,163424,183],{"class":160},[101,163426,30486],{"class":111},[101,163428,163429,163431,163434,163436],{"class":103,"line":1181},[101,163430,30404],{"class":160},[101,163432,163433],{"class":111},"(numbers.count(",[101,163435,189],{"class":160},[101,163437,30486],{"class":111},[101,163439,163440,163442,163444,163446],{"class":103,"line":1187},[101,163441,30404],{"class":160},[101,163443,112],{"class":111},[101,163445,7346],{"class":160},[101,163447,163448],{"class":111},"(numbers))\n",[10,163450,163451],{},"排序：",[92,163453,163455],{"className":30367,"code":163454,"language":30369,"meta":20,"style":20},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[98,163456,163457,163481,163485,163490,163497,163501,163515,163521,163525,163530],{"__ignoreMap":20},[101,163458,163459,163461,163463,163465,163467,163469,163471,163473,163475,163477,163479],{"class":103,"line":104},[101,163460,163063],{"class":111},[101,163462,157],{"class":107},[101,163464,52215],{"class":111},[101,163466,183],{"class":160},[101,163468,12423],{"class":111},[101,163470,329],{"class":160},[101,163472,12423],{"class":111},[101,163474,430],{"class":160},[101,163476,12423],{"class":111},[101,163478,189],{"class":160},[101,163480,33235],{"class":111},[101,163482,163483],{"class":103,"line":21},[101,163484,2387],{"emptyLinePlaceholder":27},[101,163486,163487],{"class":103,"line":1166},[101,163488,163489],{"class":111},"numbers.sort()\n",[101,163491,163492,163494],{"class":103,"line":1181},[101,163493,30404],{"class":160},[101,163495,163496],{"class":111},"(numbers)\n",[101,163498,163499],{"class":103,"line":1187},[101,163500,2387],{"emptyLinePlaceholder":27},[101,163502,163503,163506,163509,163511,163513],{"class":103,"line":1201},[101,163504,163505],{"class":111},"numbers.sort(",[101,163507,163508],{"class":5204},"reverse",[101,163510,157],{"class":107},[101,163512,31465],{"class":160},[101,163514,118],{"class":111},[101,163516,163517,163519],{"class":103,"line":1207},[101,163518,30404],{"class":160},[101,163520,163496],{"class":111},[101,163522,163523],{"class":103,"line":1298},[101,163524,2387],{"emptyLinePlaceholder":27},[101,163526,163527],{"class":103,"line":1304},[101,163528,163529],{"class":111},"numbers.reverse()\n",[101,163531,163532,163534],{"class":103,"line":1316},[101,163533,30404],{"class":160},[101,163535,163496],{"class":111},[10,163537,163538,163541,163542,163545],{},[98,163539,163540],{},"sort()"," 会修改原列表，",[98,163543,163544],{},"sorted()"," 返回新列表。",[92,163547,163549],{"className":30367,"code":163548,"language":30369,"meta":20,"style":20},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[98,163550,163551,163575,163587,163591,163597],{"__ignoreMap":20},[101,163552,163553,163555,163557,163559,163561,163563,163565,163567,163569,163571,163573],{"class":103,"line":104},[101,163554,163063],{"class":111},[101,163556,157],{"class":107},[101,163558,52215],{"class":111},[101,163560,183],{"class":160},[101,163562,12423],{"class":111},[101,163564,329],{"class":160},[101,163566,12423],{"class":111},[101,163568,430],{"class":160},[101,163570,12423],{"class":111},[101,163572,189],{"class":160},[101,163574,33235],{"class":111},[101,163576,163577,163580,163582,163585],{"class":103,"line":21},[101,163578,163579],{"class":111},"new_numbers ",[101,163581,157],{"class":107},[101,163583,163584],{"class":160}," sorted",[101,163586,163496],{"class":111},[101,163588,163589],{"class":103,"line":1166},[101,163590,2387],{"emptyLinePlaceholder":27},[101,163592,163593,163595],{"class":103,"line":1181},[101,163594,30404],{"class":160},[101,163596,163496],{"class":111},[101,163598,163599,163601],{"class":103,"line":1187},[101,163600,30404],{"class":160},[101,163602,163603],{"class":111},"(new_numbers)\n",[43,163605,163607],{"id":163606},"_65-列表遍历","6.5 列表遍历",[92,163609,163611],{"className":30367,"code":163610,"language":30369,"meta":20,"style":20},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[98,163612,163613,163633,163637,163647],{"__ignoreMap":20},[101,163614,163615,163617,163619,163621,163623,163625,163627,163629,163631],{"class":103,"line":104},[101,163616,160360],{"class":111},[101,163618,157],{"class":107},[101,163620,52215],{"class":111},[101,163622,149868],{"class":216},[101,163624,12423],{"class":111},[101,163626,150916],{"class":216},[101,163628,12423],{"class":111},[101,163630,159711],{"class":216},[101,163632,33235],{"class":111},[101,163634,163635],{"class":103,"line":21},[101,163636,2387],{"emptyLinePlaceholder":27},[101,163638,163639,163641,163643,163645],{"class":103,"line":1166},[101,163640,3012],{"class":107},[101,163642,160396],{"class":111},[101,163644,26032],{"class":107},[101,163646,160401],{"class":111},[101,163648,163649,163651],{"class":103,"line":1181},[101,163650,31288],{"class":160},[101,163652,150640],{"class":111},[10,163654,163655],{},"需要索引时：",[92,163657,163659],{"className":30367,"code":163658,"language":30369,"meta":20,"style":20},"for index, name in enumerate(names):\n    print(index, name)\n",[98,163660,163661,163675],{"__ignoreMap":20},[101,163662,163663,163665,163668,163670,163672],{"class":103,"line":104},[101,163664,3012],{"class":107},[101,163666,163667],{"class":111}," index, name ",[101,163669,26032],{"class":107},[101,163671,31595],{"class":160},[101,163673,163674],{"class":111},"(names):\n",[101,163676,163677,163679],{"class":103,"line":21},[101,163678,31288],{"class":160},[101,163680,163681],{"class":111},"(index, name)\n",[10,163683,163684],{},"统计总分：",[92,163686,163688],{"className":30367,"code":163687,"language":30369,"meta":20,"style":20},"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",[98,163689,163690,163715,163723,163727,163738,163746,163750,163767],{"__ignoreMap":20},[101,163691,163692,163695,163697,163699,163701,163703,163705,163707,163709,163711,163713],{"class":103,"line":104},[101,163693,163694],{"class":111},"scores ",[101,163696,157],{"class":107},[101,163698,52215],{"class":111},[101,163700,973],{"class":160},[101,163702,12423],{"class":111},[101,163704,847],{"class":160},[101,163706,12423],{"class":111},[101,163708,365],{"class":160},[101,163710,12423],{"class":111},[101,163712,672],{"class":160},[101,163714,33235],{"class":111},[101,163716,163717,163719,163721],{"class":103,"line":21},[101,163718,157240],{"class":111},[101,163720,157],{"class":107},[101,163722,47322],{"class":160},[101,163724,163725],{"class":103,"line":1166},[101,163726,2387],{"emptyLinePlaceholder":27},[101,163728,163729,163731,163733,163735],{"class":103,"line":1181},[101,163730,3012],{"class":107},[101,163732,157763],{"class":111},[101,163734,26032],{"class":107},[101,163736,163737],{"class":111}," scores:\n",[101,163739,163740,163742,163744],{"class":103,"line":1187},[101,163741,159287],{"class":111},[101,163743,9465],{"class":107},[101,163745,1566],{"class":111},[101,163747,163748],{"class":103,"line":1201},[101,163749,2387],{"emptyLinePlaceholder":27},[101,163751,163752,163755,163757,163760,163762,163764],{"class":103,"line":1207},[101,163753,163754],{"class":111},"avg ",[101,163756,157],{"class":107},[101,163758,163759],{"class":111}," total ",[101,163761,695],{"class":107},[101,163763,7319],{"class":160},[101,163765,163766],{"class":111},"(scores)\n",[101,163768,163769,163771,163773,163775,163778,163780,163783,163785,163787,163789],{"class":103,"line":1298},[101,163770,30404],{"class":160},[101,163772,112],{"class":111},[101,163774,164],{"class":107},[101,163776,163777],{"class":216},"\"平均分:",[101,163779,1007],{"class":160},[101,163781,163782],{"class":111},"avg",[101,163784,157139],{"class":107},[101,163786,1057],{"class":160},[101,163788,362],{"class":216},[101,163790,118],{"class":111},[43,163792,163794],{"id":163793},"_66-元组tuple","6.6 元组tuple",[10,163796,163797],{},"元组和列表类似，但不可修改。",[92,163799,163801],{"className":30367,"code":163800,"language":30369,"meta":20,"style":20},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[98,163802,163803,163820],{"__ignoreMap":20},[101,163804,163805,163808,163810,163812,163814,163816,163818],{"class":103,"line":104},[101,163806,163807],{"class":111},"point ",[101,163809,157],{"class":107},[101,163811,1645],{"class":111},[101,163813,557],{"class":160},[101,163815,12423],{"class":111},[101,163817,811],{"class":160},[101,163819,118],{"class":111},[101,163821,163822,163824,163826,163828,163830,163832,163834,163836,163838],{"class":103,"line":21},[101,163823,116294],{"class":111},[101,163825,157],{"class":107},[101,163827,1645],{"class":111},[101,163829,149868],{"class":216},[101,163831,12423],{"class":111},[101,163833,761],{"class":160},[101,163835,12423],{"class":111},[101,163837,69258],{"class":216},[101,163839,118],{"class":111},[10,163841,163842],{},"单元素元组必须加逗号：",[92,163844,163846],{"className":30367,"code":163845,"language":30369,"meta":20,"style":20},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[98,163847,163848,163862,163875,163879,163893],{"__ignoreMap":20},[101,163849,163850,163853,163855,163857,163859],{"class":103,"line":104},[101,163851,163852],{"class":111},"t1 ",[101,163854,157],{"class":107},[101,163856,1645],{"class":111},[101,163858,557],{"class":160},[101,163860,163861],{"class":111},",)\n",[101,163863,163864,163867,163869,163871,163873],{"class":103,"line":21},[101,163865,163866],{"class":111},"t2 ",[101,163868,157],{"class":107},[101,163870,1645],{"class":111},[101,163872,557],{"class":160},[101,163874,118],{"class":111},[101,163876,163877],{"class":103,"line":1166},[101,163878,2387],{"emptyLinePlaceholder":27},[101,163880,163881,163883,163885,163887,163890],{"class":103,"line":1181},[101,163882,30404],{"class":160},[101,163884,112],{"class":111},[101,163886,103087],{"class":160},[101,163888,163889],{"class":111},"(t1))  ",[101,163891,163892],{"class":170},"# tuple\n",[101,163894,163895,163897,163899,163901,163904],{"class":103,"line":1187},[101,163896,30404],{"class":160},[101,163898,112],{"class":111},[101,163900,103087],{"class":160},[101,163902,163903],{"class":111},"(t2))  ",[101,163905,163906],{"class":170},"# int\n",[10,163908,163909],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[43,163911,163913],{"id":163912},"_67-字符串str","6.7 字符串str",[10,163915,163916],{},"字符串也是序列，可以索引、切片和遍历。",[92,163918,163920],{"className":30367,"code":163919,"language":30369,"meta":20,"style":20},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[98,163921,163922,163930,163934,163945,163957,163961,163972],{"__ignoreMap":20},[101,163923,163924,163926,163928],{"class":103,"line":104},[101,163925,156424],{"class":111},[101,163927,157],{"class":107},[101,163929,159661],{"class":216},[101,163931,163932],{"class":103,"line":21},[101,163933,2387],{"emptyLinePlaceholder":27},[101,163935,163936,163938,163941,163943],{"class":103,"line":1166},[101,163937,30404],{"class":160},[101,163939,163940],{"class":111},"(text[",[101,163942,303],{"class":160},[101,163944,4644],{"class":111},[101,163946,163947,163949,163951,163953,163955],{"class":103,"line":1181},[101,163948,30404],{"class":160},[101,163950,163940],{"class":111},[101,163952,643],{"class":107},[101,163954,329],{"class":160},[101,163956,4644],{"class":111},[101,163958,163959],{"class":103,"line":1187},[101,163960,2387],{"emptyLinePlaceholder":27},[101,163962,163963,163965,163967,163969],{"class":103,"line":1201},[101,163964,3012],{"class":107},[101,163966,159672],{"class":111},[101,163968,26032],{"class":107},[101,163970,163971],{"class":111}," text:\n",[101,163973,163974,163976],{"class":103,"line":1207},[101,163975,31288],{"class":160},[101,163977,159683],{"class":111},[10,163979,163980],{},"字符串不可变：",[92,163982,163984],{"className":30367,"code":163983,"language":30369,"meta":20,"style":20},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[98,163985,163986,163994],{"__ignoreMap":20},[101,163987,163988,163990,163992],{"class":103,"line":104},[101,163989,156424],{"class":111},[101,163991,157],{"class":107},[101,163993,159661],{"class":216},[101,163995,163996,163999,164001,164003,164005,164008],{"class":103,"line":21},[101,163997,163998],{"class":111},"text[",[101,164000,303],{"class":160},[101,164002,4430],{"class":111},[101,164004,157],{"class":107},[101,164006,164007],{"class":216}," \"P\"",[101,164009,164010],{"class":170},"  # 报错\n",[10,164012,164013],{},"如果要得到新字符串：",[92,164015,164017],{"className":30367,"code":164016,"language":30369,"meta":20,"style":20},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[98,164018,164019,164027,164045],{"__ignoreMap":20},[101,164020,164021,164023,164025],{"class":103,"line":104},[101,164022,156424],{"class":111},[101,164024,157],{"class":107},[101,164026,159661],{"class":216},[101,164028,164029,164031,164033,164035,164037,164040,164042],{"class":103,"line":21},[101,164030,156424],{"class":111},[101,164032,157],{"class":107},[101,164034,164007],{"class":216},[101,164036,45555],{"class":107},[101,164038,164039],{"class":111}," text[",[101,164041,329],{"class":160},[101,164043,164044],{"class":111},":]\n",[101,164046,164047,164049],{"class":103,"line":1166},[101,164048,30404],{"class":160},[101,164050,164051],{"class":111},"(text)\n",[43,164053,164055],{"id":164054},"_68-切片","6.8 切片",[10,164057,164058],{},"切片用于从序列中取一部分。",[92,164060,164062],{"className":30367,"code":164061,"language":30369,"meta":20,"style":20},"序列[开始:结束:步长]\n",[98,164063,164064],{"__ignoreMap":20},[101,164065,164066],{"class":103,"line":104},[101,164067,164061],{"class":111},[10,164069,164070],{},"结束位置不包含。",[92,164072,164074],{"className":30367,"code":164073,"language":30369,"meta":20,"style":20},"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",[98,164075,164076,164113,164117,164136,164151,164165,164179],{"__ignoreMap":20},[101,164077,164078,164081,164083,164085,164087,164089,164091,164093,164095,164097,164099,164101,164103,164105,164107,164109,164111],{"class":103,"line":104},[101,164079,164080],{"class":111},"nums ",[101,164082,157],{"class":107},[101,164084,52215],{"class":111},[101,164086,303],{"class":160},[101,164088,12423],{"class":111},[101,164090,329],{"class":160},[101,164092,12423],{"class":111},[101,164094,189],{"class":160},[101,164096,12423],{"class":111},[101,164098,183],{"class":160},[101,164100,12423],{"class":111},[101,164102,404],{"class":160},[101,164104,12423],{"class":111},[101,164106,430],{"class":160},[101,164108,12423],{"class":111},[101,164110,455],{"class":160},[101,164112,33235],{"class":111},[101,164114,164115],{"class":103,"line":21},[101,164116,2387],{"emptyLinePlaceholder":27},[101,164118,164119,164121,164124,164126,164128,164130,164133],{"class":103,"line":1166},[101,164120,30404],{"class":160},[101,164122,164123],{"class":111},"(nums[",[101,164125,329],{"class":160},[101,164127,970],{"class":111},[101,164129,404],{"class":160},[101,164131,164132],{"class":111},"])    ",[101,164134,164135],{"class":170},"# [1, 2, 3]\n",[101,164137,164138,164140,164143,164145,164148],{"class":103,"line":1181},[101,164139,30404],{"class":160},[101,164141,164142],{"class":111},"(nums[:",[101,164144,183],{"class":160},[101,164146,164147],{"class":111},"])     ",[101,164149,164150],{"class":170},"# [0, 1, 2]\n",[101,164152,164153,164155,164157,164159,164162],{"class":103,"line":1187},[101,164154,30404],{"class":160},[101,164156,164123],{"class":111},[101,164158,183],{"class":160},[101,164160,164161],{"class":111},":])     ",[101,164163,164164],{"class":170},"# [3, 4, 5, 6]\n",[101,164166,164167,164169,164172,164174,164176],{"class":103,"line":1201},[101,164168,30404],{"class":160},[101,164170,164171],{"class":111},"(nums[::",[101,164173,189],{"class":160},[101,164175,164132],{"class":111},[101,164177,164178],{"class":170},"# [0, 2, 4, 6]\n",[101,164180,164181,164183,164185,164187,164189,164192],{"class":103,"line":1207},[101,164182,30404],{"class":160},[101,164184,164171],{"class":111},[101,164186,643],{"class":107},[101,164188,329],{"class":160},[101,164190,164191],{"class":111},"])   ",[101,164193,164194],{"class":170},"# 反转\n",[10,164196,164197],{},"字符串切片：",[92,164199,164201],{"className":30367,"code":164200,"language":30369,"meta":20,"style":20},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[98,164202,164203,164212,164226],{"__ignoreMap":20},[101,164204,164205,164207,164209],{"class":103,"line":104},[101,164206,156424],{"class":111},[101,164208,157],{"class":107},[101,164210,164211],{"class":216}," \"abcdef\"\n",[101,164213,164214,164216,164218,164220,164222,164224],{"class":103,"line":21},[101,164215,30404],{"class":160},[101,164217,163940],{"class":111},[101,164219,329],{"class":160},[101,164221,970],{"class":111},[101,164223,404],{"class":160},[101,164225,4644],{"class":111},[101,164227,164228,164230,164233,164235,164237],{"class":103,"line":1166},[101,164229,30404],{"class":160},[101,164231,164232],{"class":111},"(text[::",[101,164234,643],{"class":107},[101,164236,329],{"class":160},[101,164238,4644],{"class":111},[43,164240,164242],{"id":164241},"_69-集合set","6.9 集合set",[10,164244,164245],{},"集合特点：",[55,164247,164248,164251,164254],{},[58,164249,164250],{},"无序。",[58,164252,164253],{},"元素不重复。",[58,164255,164256],{},"可以做交集、并集、差集。",[92,164258,164260],{"className":30367,"code":164259,"language":30369,"meta":20,"style":20},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[98,164261,164262,164290],{"__ignoreMap":20},[101,164263,164264,164266,164268,164270,164272,164274,164276,164278,164280,164282,164284,164286,164288],{"class":103,"line":104},[101,164265,164080],{"class":111},[101,164267,157],{"class":107},[101,164269,4435],{"class":111},[101,164271,329],{"class":160},[101,164273,12423],{"class":111},[101,164275,189],{"class":160},[101,164277,12423],{"class":111},[101,164279,183],{"class":160},[101,164281,12423],{"class":111},[101,164283,183],{"class":160},[101,164285,12423],{"class":111},[101,164287,404],{"class":160},[101,164289,1552],{"class":111},[101,164291,164292,164294],{"class":103,"line":21},[101,164293,30404],{"class":160},[101,164295,164296],{"class":111},"(nums)\n",[10,164298,164299],{},"创建空集合：",[92,164301,164303],{"className":30367,"code":164302,"language":30369,"meta":20,"style":20},"s = set()\n",[98,164304,164305],{"__ignoreMap":20},[101,164306,164307,164309,164311,164313],{"class":103,"line":104},[101,164308,10567],{"class":111},[101,164310,157],{"class":107},[101,164312,119702],{"class":160},[101,164314,1963],{"class":111},[10,164316,9013,164317,164319],{},[98,164318,32448],{}," 是空字典，不是空集合。",[10,164321,164322],{},"集合常用操作：",[92,164324,164326],{"className":30367,"code":164325,"language":30369,"meta":20,"style":20},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[98,164327,164328,164348,164352,164361,164370,164379],{"__ignoreMap":20},[101,164329,164330,164332,164334,164336,164338,164340,164342,164344,164346],{"class":103,"line":104},[101,164331,10567],{"class":111},[101,164333,157],{"class":107},[101,164335,4435],{"class":111},[101,164337,329],{"class":160},[101,164339,12423],{"class":111},[101,164341,189],{"class":160},[101,164343,12423],{"class":111},[101,164345,183],{"class":160},[101,164347,1552],{"class":111},[101,164349,164350],{"class":103,"line":21},[101,164351,2387],{"emptyLinePlaceholder":27},[101,164353,164354,164357,164359],{"class":103,"line":1166},[101,164355,164356],{"class":111},"s.add(",[101,164358,404],{"class":160},[101,164360,118],{"class":111},[101,164362,164363,164366,164368],{"class":103,"line":1181},[101,164364,164365],{"class":111},"s.remove(",[101,164367,189],{"class":160},[101,164369,118],{"class":111},[101,164371,164372,164375,164377],{"class":103,"line":1187},[101,164373,164374],{"class":111},"s.discard(",[101,164376,557],{"class":160},[101,164378,118],{"class":111},[101,164380,164381,164383,164385,164387],{"class":103,"line":1201},[101,164382,30404],{"class":160},[101,164384,112],{"class":111},[101,164386,7346],{"class":160},[101,164388,164389],{"class":111},"(s))\n",[10,164391,164392],{},"交并差：",[92,164394,164396],{"className":30367,"code":164395,"language":30369,"meta":20,"style":20},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[98,164397,164398,164418,164438,164442,164457,164470],{"__ignoreMap":20},[101,164399,164400,164402,164404,164406,164408,164410,164412,164414,164416],{"class":103,"line":104},[101,164401,10907],{"class":111},[101,164403,157],{"class":107},[101,164405,4435],{"class":111},[101,164407,329],{"class":160},[101,164409,12423],{"class":111},[101,164411,189],{"class":160},[101,164413,12423],{"class":111},[101,164415,183],{"class":160},[101,164417,1552],{"class":111},[101,164419,164420,164422,164424,164426,164428,164430,164432,164434,164436],{"class":103,"line":21},[101,164421,10933],{"class":111},[101,164423,157],{"class":107},[101,164425,4435],{"class":111},[101,164427,183],{"class":160},[101,164429,12423],{"class":111},[101,164431,404],{"class":160},[101,164433,12423],{"class":111},[101,164435,430],{"class":160},[101,164437,1552],{"class":111},[101,164439,164440],{"class":103,"line":1166},[101,164441,2387],{"emptyLinePlaceholder":27},[101,164443,164444,164446,164449,164451,164454],{"class":103,"line":1181},[101,164445,30404],{"class":160},[101,164447,164448],{"class":111},"(a ",[101,164450,464],{"class":107},[101,164452,164453],{"class":111}," b)  ",[101,164455,164456],{"class":170},"# 交集\n",[101,164458,164459,164461,164463,164465,164467],{"class":103,"line":1187},[101,164460,30404],{"class":160},[101,164462,164448],{"class":111},[101,164464,1032],{"class":107},[101,164466,164453],{"class":111},[101,164468,164469],{"class":170},"# 并集\n",[101,164471,164472,164474,164476,164478,164480],{"class":103,"line":1201},[101,164473,30404],{"class":160},[101,164475,164448],{"class":111},[101,164477,643],{"class":107},[101,164479,164453],{"class":111},[101,164481,164482],{"class":170},"# 差集\n",[43,164484,164486],{"id":164485},"_610-字典dict","6.10 字典dict",[10,164488,164489],{},"字典通过 key-value 保存数据。",[92,164491,164493],{"className":30367,"code":164492,"language":30369,"meta":20,"style":20},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[98,164494,164495,164503,164513,164524,164534],{"__ignoreMap":20},[101,164496,164497,164499,164501],{"class":103,"line":104},[101,164498,149461],{"class":111},[101,164500,157],{"class":107},[101,164502,15560],{"class":111},[101,164504,164505,164507,164509,164511],{"class":103,"line":21},[101,164506,147000],{"class":216},[101,164508,51426],{"class":111},[101,164510,149868],{"class":216},[101,164512,31455],{"class":111},[101,164514,164515,164518,164520,164522],{"class":103,"line":1166},[101,164516,164517],{"class":216},"    \"age\"",[101,164519,51426],{"class":111},[101,164521,761],{"class":160},[101,164523,31455],{"class":111},[101,164525,164526,164529,164531],{"class":103,"line":1181},[101,164527,164528],{"class":216},"    \"score\"",[101,164530,51426],{"class":111},[101,164532,164533],{"class":160},"95\n",[101,164535,164536],{"class":103,"line":1187},[101,164537,1552],{"class":111},[10,164539,164540],{},"获取值：",[92,164542,164544],{"className":30367,"code":164543,"language":30369,"meta":20,"style":20},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[98,164545,164546,164557],{"__ignoreMap":20},[101,164547,164548,164550,164553,164555],{"class":103,"line":104},[101,164549,30404],{"class":160},[101,164551,164552],{"class":111},"(student[",[101,164554,62668],{"class":216},[101,164556,4644],{"class":111},[101,164558,164559,164561,164564,164566],{"class":103,"line":21},[101,164560,30404],{"class":160},[101,164562,164563],{"class":111},"(student.get(",[101,164565,62668],{"class":216},[101,164567,30486],{"class":111},[10,164569,15376],{},[92,164571,164573],{"className":30367,"code":164572,"language":30369,"meta":20,"style":20},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[98,164574,164575,164588],{"__ignoreMap":20},[101,164576,164577,164579,164582,164585],{"class":103,"line":104},[101,164578,152839],{"class":111},[101,164580,164581],{"class":216},"\"address\"",[101,164583,164584],{"class":111},"]     ",[101,164586,164587],{"class":170},"# key不存在会报错\n",[101,164589,164590,164593,164595,164597],{"class":103,"line":21},[101,164591,164592],{"class":111},"student.get(",[101,164594,164581],{"class":216},[101,164596,13702],{"class":111},[101,164598,164599],{"class":170},"# key不存在返回None\n",[10,164601,164602],{},"设置默认值：",[92,164604,164606],{"className":30367,"code":164605,"language":30369,"meta":20,"style":20},"print(student.get(\"address\", \"未知\"))\n",[98,164607,164608],{"__ignoreMap":20},[101,164609,164610,164612,164614,164616,164618,164621],{"class":103,"line":104},[101,164611,30404],{"class":160},[101,164613,164563],{"class":111},[101,164615,164581],{"class":216},[101,164617,12423],{"class":111},[101,164619,164620],{"class":216},"\"未知\"",[101,164622,30486],{"class":111},[10,164624,164625],{},"新增和修改：",[92,164627,164629],{"className":30367,"code":164628,"language":30369,"meta":20,"style":20},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[98,164630,164631,164644],{"__ignoreMap":20},[101,164632,164633,164635,164637,164639,164641],{"class":103,"line":104},[101,164634,152839],{"class":111},[101,164636,69113],{"class":216},[101,164638,4430],{"class":111},[101,164640,157],{"class":107},[101,164642,164643],{"class":160}," 19\n",[101,164645,164646,164648,164650,164652,164654],{"class":103,"line":21},[101,164647,152839],{"class":111},[101,164649,164581],{"class":216},[101,164651,4430],{"class":111},[101,164653,157],{"class":107},[101,164655,164656],{"class":216}," \"北京\"\n",[10,164658,164659],{},"删除：",[92,164661,164663],{"className":30367,"code":164662,"language":30369,"meta":20,"style":20},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[98,164664,164665,164678,164688],{"__ignoreMap":20},[101,164666,164667,164669,164671,164674,164676],{"class":103,"line":104},[101,164668,155338],{"class":111},[101,164670,157],{"class":107},[101,164672,164673],{"class":111}," student.pop(",[101,164675,151452],{"class":216},[101,164677,118],{"class":111},[101,164679,164680,164682,164684,164686],{"class":103,"line":21},[101,164681,163363],{"class":107},[101,164683,152129],{"class":111},[101,164685,69113],{"class":216},[101,164687,33235],{"class":111},[101,164689,164690],{"class":103,"line":1166},[101,164691,164692],{"class":111},"student.clear()\n",[43,164694,164696],{"id":164695},"_611-字典遍历","6.11 字典遍历",[10,164698,164699],{},"遍历 key：",[92,164701,164703],{"className":30367,"code":164702,"language":30369,"meta":20,"style":20},"for key in student:\n    print(key, student[key])\n",[98,164704,164705,164717],{"__ignoreMap":20},[101,164706,164707,164709,164712,164714],{"class":103,"line":104},[101,164708,3012],{"class":107},[101,164710,164711],{"class":111}," key ",[101,164713,26032],{"class":107},[101,164715,164716],{"class":111}," student:\n",[101,164718,164719,164721],{"class":103,"line":21},[101,164720,31288],{"class":160},[101,164722,164723],{"class":111},"(key, student[key])\n",[10,164725,164726],{},"遍历 value：",[92,164728,164730],{"className":30367,"code":164729,"language":30369,"meta":20,"style":20},"for value in student.values():\n    print(value)\n",[98,164731,164732,164744],{"__ignoreMap":20},[101,164733,164734,164736,164739,164741],{"class":103,"line":104},[101,164735,3012],{"class":107},[101,164737,164738],{"class":111}," value ",[101,164740,26032],{"class":107},[101,164742,164743],{"class":111}," student.values():\n",[101,164745,164746,164748],{"class":103,"line":21},[101,164747,31288],{"class":160},[101,164749,164750],{"class":111},"(value)\n",[10,164752,164753],{},"遍历 key 和 value：",[92,164755,164757],{"className":30367,"code":164756,"language":30369,"meta":20,"style":20},"for key, value in student.items():\n    print(key, value)\n",[98,164758,164759,164771],{"__ignoreMap":20},[101,164760,164761,164763,164766,164768],{"class":103,"line":104},[101,164762,3012],{"class":107},[101,164764,164765],{"class":111}," key, value ",[101,164767,26032],{"class":107},[101,164769,164770],{"class":111}," student.items():\n",[101,164772,164773,164775],{"class":103,"line":21},[101,164774,31288],{"class":160},[101,164776,164777],{"class":111},"(key, value)\n",[43,164779,164781],{"id":164780},"_612-嵌套容器","6.12 嵌套容器",[10,164783,164784],{},"列表中保存字典，是项目中最常见的结构之一。",[92,164786,164788],{"className":30367,"code":164787,"language":30369,"meta":20,"style":20},"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",[98,164789,164790,164798,164826,164854,164882,164886,164890,164900],{"__ignoreMap":20},[101,164791,164792,164794,164796],{"class":103,"line":104},[101,164793,159696],{"class":111},[101,164795,157],{"class":107},[101,164797,55436],{"class":111},[101,164799,164800,164802,164804,164806,164808,164810,164812,164814,164816,164818,164820,164822,164824],{"class":103,"line":21},[101,164801,148365],{"class":111},[101,164803,62668],{"class":216},[101,164805,51426],{"class":111},[101,164807,149868],{"class":216},[101,164809,12423],{"class":111},[101,164811,69113],{"class":216},[101,164813,51426],{"class":111},[101,164815,761],{"class":160},[101,164817,12423],{"class":111},[101,164819,151452],{"class":216},[101,164821,51426],{"class":111},[101,164823,1100],{"class":160},[101,164825,4917],{"class":111},[101,164827,164828,164830,164832,164834,164836,164838,164840,164842,164844,164846,164848,164850,164852],{"class":103,"line":1166},[101,164829,148365],{"class":111},[101,164831,62668],{"class":216},[101,164833,51426],{"class":111},[101,164835,150916],{"class":216},[101,164837,12423],{"class":111},[101,164839,69113],{"class":216},[101,164841,51426],{"class":111},[101,164843,736],{"class":160},[101,164845,12423],{"class":111},[101,164847,151452],{"class":216},[101,164849,51426],{"class":111},[101,164851,922],{"class":160},[101,164853,4917],{"class":111},[101,164855,164856,164858,164860,164862,164864,164866,164868,164870,164872,164874,164876,164878,164880],{"class":103,"line":1181},[101,164857,148365],{"class":111},[101,164859,62668],{"class":216},[101,164861,51426],{"class":111},[101,164863,159711],{"class":216},[101,164865,12423],{"class":111},[101,164867,69113],{"class":216},[101,164869,51426],{"class":111},[101,164871,786],{"class":160},[101,164873,12423],{"class":111},[101,164875,151452],{"class":216},[101,164877,51426],{"class":111},[101,164879,517],{"class":160},[101,164881,4917],{"class":111},[101,164883,164884],{"class":103,"line":1187},[101,164885,33235],{"class":111},[101,164887,164888],{"class":103,"line":1201},[101,164889,2387],{"emptyLinePlaceholder":27},[101,164891,164892,164894,164896,164898],{"class":103,"line":1207},[101,164893,3012],{"class":107},[101,164895,152117],{"class":111},[101,164897,26032],{"class":107},[101,164899,152122],{"class":111},[101,164901,164902,164904,164906,164908,164911,164913],{"class":103,"line":1298},[101,164903,31288],{"class":160},[101,164905,164552],{"class":111},[101,164907,62668],{"class":216},[101,164909,164910],{"class":111},"], student[",[101,164912,151452],{"class":216},[101,164914,4644],{"class":111},[10,164916,164917],{},"统计平均分：",[92,164919,164921],{"className":30367,"code":164920,"language":30369,"meta":20,"style":20},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[98,164922,164923,164931,164935,164945,164957,164961,164976],{"__ignoreMap":20},[101,164924,164925,164927,164929],{"class":103,"line":104},[101,164926,157240],{"class":111},[101,164928,157],{"class":107},[101,164930,47322],{"class":160},[101,164932,164933],{"class":103,"line":21},[101,164934,2387],{"emptyLinePlaceholder":27},[101,164936,164937,164939,164941,164943],{"class":103,"line":1166},[101,164938,3012],{"class":107},[101,164940,152117],{"class":111},[101,164942,26032],{"class":107},[101,164944,152122],{"class":111},[101,164946,164947,164949,164951,164953,164955],{"class":103,"line":1181},[101,164948,159287],{"class":111},[101,164950,9465],{"class":107},[101,164952,152129],{"class":111},[101,164954,151452],{"class":216},[101,164956,33235],{"class":111},[101,164958,164959],{"class":103,"line":1187},[101,164960,2387],{"emptyLinePlaceholder":27},[101,164962,164963,164965,164967,164969,164971,164973],{"class":103,"line":1201},[101,164964,163754],{"class":111},[101,164966,157],{"class":107},[101,164968,163759],{"class":111},[101,164970,695],{"class":107},[101,164972,7319],{"class":160},[101,164974,164975],{"class":111},"(students)\n",[101,164977,164978,164980,164982,164984,164986,164988,164990,164992,164994,164996],{"class":103,"line":1207},[101,164979,30404],{"class":160},[101,164981,112],{"class":111},[101,164983,164],{"class":107},[101,164985,163777],{"class":216},[101,164987,1007],{"class":160},[101,164989,163782],{"class":111},[101,164991,157139],{"class":107},[101,164993,1057],{"class":160},[101,164995,362],{"class":216},[101,164997,118],{"class":111},[10,164999,165000],{},"查找学生：",[92,165002,165004],{"className":30367,"code":165003,"language":30369,"meta":20,"style":20},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[98,165005,165006,165021,165025,165035,165049,165055,165059,165065],{"__ignoreMap":20},[101,165007,165008,165010,165012,165014,165016,165019],{"class":103,"line":104},[101,165009,111558],{"class":111},[101,165011,157],{"class":107},[101,165013,60594],{"class":160},[101,165015,112],{"class":111},[101,165017,165018],{"class":216},"\"请输入学生姓名:\"",[101,165020,118],{"class":111},[101,165022,165023],{"class":103,"line":21},[101,165024,2387],{"emptyLinePlaceholder":27},[101,165026,165027,165029,165031,165033],{"class":103,"line":1166},[101,165028,3012],{"class":107},[101,165030,152117],{"class":111},[101,165032,26032],{"class":107},[101,165034,152122],{"class":111},[101,165036,165037,165039,165041,165043,165045,165047],{"class":103,"line":1181},[101,165038,3088],{"class":107},[101,165040,152129],{"class":111},[101,165042,62668],{"class":216},[101,165044,4430],{"class":111},[101,165046,2936],{"class":107},[101,165048,160412],{"class":111},[101,165050,165051,165053],{"class":103,"line":1187},[101,165052,32440],{"class":160},[101,165054,150022],{"class":111},[101,165056,165057],{"class":103,"line":1201},[101,165058,31616],{"class":107},[101,165060,165061,165063],{"class":103,"line":1207},[101,165062,1688],{"class":107},[101,165064,3726],{"class":111},[101,165066,165067,165069,165071,165074],{"class":103,"line":1298},[101,165068,31288],{"class":160},[101,165070,112],{"class":111},[101,165072,165073],{"class":216},"\"没有找到\"",[101,165075,118],{"class":111},[43,165077,165079],{"id":165078},"_613-容器通用操作","6.13 容器通用操作",[10,165081,165082],{},"长度：",[92,165084,165086],{"className":30367,"code":165085,"language":30369,"meta":20,"style":20},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[98,165087,165088,165107,165117],{"__ignoreMap":20},[101,165089,165090,165092,165095,165097,165099,165101,165103,165105],{"class":103,"line":104},[101,165091,7346],{"class":160},[101,165093,165094],{"class":111},"([",[101,165096,329],{"class":160},[101,165098,12423],{"class":111},[101,165100,189],{"class":160},[101,165102,12423],{"class":111},[101,165104,183],{"class":160},[101,165106,4644],{"class":111},[101,165108,165109,165111,165113,165115],{"class":103,"line":21},[101,165110,7346],{"class":160},[101,165112,112],{"class":111},[101,165114,155860],{"class":216},[101,165116,118],{"class":111},[101,165118,165119,165121,165124,165126,165128,165130],{"class":103,"line":1166},[101,165120,7346],{"class":160},[101,165122,165123],{"class":111},"({",[101,165125,62668],{"class":216},[101,165127,51426],{"class":111},[101,165129,149868],{"class":216},[101,165131,165132],{"class":111},"})\n",[10,165134,165135],{},"最大最小：",[92,165137,165139],{"className":30367,"code":165138,"language":30369,"meta":20,"style":20},"max([1, 2, 3])\nmin([1, 2, 3])\n",[98,165140,165141,165159],{"__ignoreMap":20},[101,165142,165143,165145,165147,165149,165151,165153,165155,165157],{"class":103,"line":104},[101,165144,6003],{"class":160},[101,165146,165094],{"class":111},[101,165148,329],{"class":160},[101,165150,12423],{"class":111},[101,165152,189],{"class":160},[101,165154,12423],{"class":111},[101,165156,183],{"class":160},[101,165158,4644],{"class":111},[101,165160,165161,165164,165166,165168,165170,165172,165174,165176],{"class":103,"line":21},[101,165162,165163],{"class":160},"min",[101,165165,165094],{"class":111},[101,165167,329],{"class":160},[101,165169,12423],{"class":111},[101,165171,189],{"class":160},[101,165173,12423],{"class":111},[101,165175,183],{"class":160},[101,165177,4644],{"class":111},[10,165179,165180],{},"求和：",[92,165182,165184],{"className":30367,"code":165183,"language":30369,"meta":20,"style":20},"sum([1, 2, 3])\n",[98,165185,165186],{"__ignoreMap":20},[101,165187,165188,165191,165193,165195,165197,165199,165201,165203],{"class":103,"line":104},[101,165189,165190],{"class":160},"sum",[101,165192,165094],{"class":111},[101,165194,329],{"class":160},[101,165196,12423],{"class":111},[101,165198,189],{"class":160},[101,165200,12423],{"class":111},[101,165202,183],{"class":160},[101,165204,4644],{"class":111},[10,165206,163451],{},[92,165208,165210],{"className":30367,"code":165209,"language":30369,"meta":20,"style":20},"sorted([3, 1, 2])\n",[98,165211,165212],{"__ignoreMap":20},[101,165213,165214,165217,165219,165221,165223,165225,165227,165229],{"class":103,"line":104},[101,165215,165216],{"class":160},"sorted",[101,165218,165094],{"class":111},[101,165220,183],{"class":160},[101,165222,12423],{"class":111},[101,165224,329],{"class":160},[101,165226,12423],{"class":111},[101,165228,189],{"class":160},[101,165230,4644],{"class":111},[10,165232,165233],{},"类型转换：",[92,165235,165237],{"className":30367,"code":165236,"language":30369,"meta":20,"style":20},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[98,165238,165239,165249,165267],{"__ignoreMap":20},[101,165240,165241,165243,165245,165247],{"class":103,"line":104},[101,165242,154050],{"class":160},[101,165244,112],{"class":111},[101,165246,155860],{"class":216},[101,165248,118],{"class":111},[101,165250,165251,165253,165255,165257,165259,165261,165263,165265],{"class":103,"line":21},[101,165252,155245],{"class":160},[101,165254,165094],{"class":111},[101,165256,329],{"class":160},[101,165258,12423],{"class":111},[101,165260,189],{"class":160},[101,165262,12423],{"class":111},[101,165264,183],{"class":160},[101,165266,4644],{"class":111},[101,165268,165269,165271,165273,165275,165277,165279,165281,165283,165285,165287],{"class":103,"line":1166},[101,165270,155270],{"class":160},[101,165272,165094],{"class":111},[101,165274,329],{"class":160},[101,165276,12423],{"class":111},[101,165278,329],{"class":160},[101,165280,12423],{"class":111},[101,165282,189],{"class":160},[101,165284,12423],{"class":111},[101,165286,183],{"class":160},[101,165288,4644],{"class":111},[10,165290,165291],{},"成员判断：",[92,165293,165295],{"className":30367,"code":165294,"language":30369,"meta":20,"style":20},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[98,165296,165297,165314,165338],{"__ignoreMap":20},[101,165298,165299,165301,165303,165306,165309,165312],{"class":103,"line":104},[101,165300,30404],{"class":160},[101,165302,112],{"class":111},[101,165304,165305],{"class":216},"\"a\"",[101,165307,165308],{"class":107}," in",[101,165310,165311],{"class":216}," \"abc\"",[101,165313,118],{"class":111},[101,165315,165316,165318,165320,165322,165324,165326,165328,165330,165332,165334,165336],{"class":103,"line":21},[101,165317,30404],{"class":160},[101,165319,112],{"class":111},[101,165321,329],{"class":160},[101,165323,165308],{"class":107},[101,165325,52215],{"class":111},[101,165327,329],{"class":160},[101,165329,12423],{"class":111},[101,165331,189],{"class":160},[101,165333,12423],{"class":111},[101,165335,183],{"class":160},[101,165337,4644],{"class":111},[101,165339,165340,165342,165344,165346,165348,165350,165352,165354,165356],{"class":103,"line":1166},[101,165341,30404],{"class":160},[101,165343,112],{"class":111},[101,165345,62668],{"class":216},[101,165347,165308],{"class":107},[101,165349,4435],{"class":111},[101,165351,62668],{"class":216},[101,165353,51426],{"class":111},[101,165355,149868],{"class":216},[101,165357,165132],{"class":111},[43,165359,165361],{"id":165360},"_614-推导式","6.14 推导式",[10,165363,165364],{},"推导式用于快速生成容器。",[10,165366,165367],{},"列表推导式：",[92,165369,165371],{"className":30367,"code":165370,"language":30369,"meta":20,"style":20},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[98,165372,165373,165400],{"__ignoreMap":20},[101,165374,165375,165377,165379,165382,165384,165386,165388,165390,165392,165394,165396,165398],{"class":103,"line":104},[101,165376,164080],{"class":111},[101,165378,157],{"class":107},[101,165380,165381],{"class":111}," [i ",[101,165383,3012],{"class":107},[101,165385,9426],{"class":111},[101,165387,26032],{"class":107},[101,165389,32432],{"class":160},[101,165391,112],{"class":111},[101,165393,329],{"class":160},[101,165395,12423],{"class":111},[101,165397,455],{"class":160},[101,165399,97280],{"class":111},[101,165401,165402,165404],{"class":103,"line":21},[101,165403,30404],{"class":160},[101,165405,164296],{"class":111},[10,165407,165408],{},"带条件：",[92,165410,165412],{"className":30367,"code":165411,"language":30369,"meta":20,"style":20},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[98,165413,165414,165455],{"__ignoreMap":20},[101,165415,165416,165419,165421,165423,165425,165427,165429,165431,165433,165435,165437,165439,165441,165443,165445,165447,165449,165451,165453],{"class":103,"line":104},[101,165417,165418],{"class":111},"even_nums ",[101,165420,157],{"class":107},[101,165422,165381],{"class":111},[101,165424,3012],{"class":107},[101,165426,9426],{"class":111},[101,165428,26032],{"class":107},[101,165430,32432],{"class":160},[101,165432,112],{"class":111},[101,165434,329],{"class":160},[101,165436,12423],{"class":111},[101,165438,448],{"class":160},[101,165440,13702],{"class":111},[101,165442,1518],{"class":107},[101,165444,9426],{"class":111},[101,165446,439],{"class":107},[101,165448,14743],{"class":160},[101,165450,101539],{"class":107},[101,165452,4080],{"class":160},[101,165454,33235],{"class":111},[101,165456,165457,165459],{"class":103,"line":21},[101,165458,30404],{"class":160},[101,165460,165461],{"class":111},"(even_nums)\n",[10,165463,165464],{},"字典推导式：",[92,165466,165468],{"className":30367,"code":165467,"language":30369,"meta":20,"style":20},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[98,165469,165470,165504],{"__ignoreMap":20},[101,165471,165472,165475,165477,165480,165482,165484,165487,165489,165491,165493,165495,165497,165499,165501],{"class":103,"line":104},[101,165473,165474],{"class":111},"squares ",[101,165476,157],{"class":107},[101,165478,165479],{"class":111}," {i: i ",[101,165481,10649],{"class":107},[101,165483,14743],{"class":160},[101,165485,165486],{"class":107}," for",[101,165488,9426],{"class":111},[101,165490,26032],{"class":107},[101,165492,32432],{"class":160},[101,165494,112],{"class":111},[101,165496,329],{"class":160},[101,165498,12423],{"class":111},[101,165500,455],{"class":160},[101,165502,165503],{"class":111},")}\n",[101,165505,165506,165508],{"class":103,"line":21},[101,165507,30404],{"class":160},[101,165509,165510],{"class":111},"(squares)\n",[10,165512,165513],{},"集合推导式：",[92,165515,165517],{"className":30367,"code":165516,"language":30369,"meta":20,"style":20},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[98,165518,165519,165540],{"__ignoreMap":20},[101,165520,165521,165524,165526,165529,165531,165533,165535,165538],{"class":103,"line":104},[101,165522,165523],{"class":111},"chars ",[101,165525,157],{"class":107},[101,165527,165528],{"class":111}," {ch ",[101,165530,3012],{"class":107},[101,165532,159672],{"class":111},[101,165534,26032],{"class":107},[101,165536,165537],{"class":216}," \"hello\"",[101,165539,1552],{"class":111},[101,165541,165542,165544],{"class":103,"line":21},[101,165543,30404],{"class":160},[101,165545,165546],{"class":111},"(chars)\n",[10,165548,165549],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[43,165551,165553],{"id":165552},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[92,165555,165557],{"className":30367,"code":165556,"language":30369,"meta":20,"style":20},"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",[98,165558,165559,165567,165587,165607,165627,165647,165651,165655,165663,165677,165686,165690,165700,165712,165716,165736,165745,165749,165765,165770,165774,165788,165792,165814,165850],{"__ignoreMap":20},[101,165560,165561,165563,165565],{"class":103,"line":104},[101,165562,159696],{"class":111},[101,165564,157],{"class":107},[101,165566,55436],{"class":111},[101,165568,165569,165571,165573,165575,165577,165579,165581,165583,165585],{"class":103,"line":21},[101,165570,148365],{"class":111},[101,165572,62668],{"class":216},[101,165574,51426],{"class":111},[101,165576,149868],{"class":216},[101,165578,12423],{"class":111},[101,165580,151452],{"class":216},[101,165582,51426],{"class":111},[101,165584,1100],{"class":160},[101,165586,4917],{"class":111},[101,165588,165589,165591,165593,165595,165597,165599,165601,165603,165605],{"class":103,"line":1166},[101,165590,148365],{"class":111},[101,165592,62668],{"class":216},[101,165594,51426],{"class":111},[101,165596,150916],{"class":216},[101,165598,12423],{"class":111},[101,165600,151452],{"class":216},[101,165602,51426],{"class":111},[101,165604,922],{"class":160},[101,165606,4917],{"class":111},[101,165608,165609,165611,165613,165615,165617,165619,165621,165623,165625],{"class":103,"line":1181},[101,165610,148365],{"class":111},[101,165612,62668],{"class":216},[101,165614,51426],{"class":111},[101,165616,159711],{"class":216},[101,165618,12423],{"class":111},[101,165620,151452],{"class":216},[101,165622,51426],{"class":111},[101,165624,517],{"class":160},[101,165626,4917],{"class":111},[101,165628,165629,165631,165633,165635,165637,165639,165641,165643,165645],{"class":103,"line":1187},[101,165630,148365],{"class":111},[101,165632,62668],{"class":216},[101,165634,51426],{"class":111},[101,165636,163290],{"class":216},[101,165638,12423],{"class":111},[101,165640,151452],{"class":216},[101,165642,51426],{"class":111},[101,165644,993],{"class":160},[101,165646,4917],{"class":111},[101,165648,165649],{"class":103,"line":1201},[101,165650,33235],{"class":111},[101,165652,165653],{"class":103,"line":1207},[101,165654,2387],{"emptyLinePlaceholder":27},[101,165656,165657,165659,165661],{"class":103,"line":1298},[101,165658,157240],{"class":111},[101,165660,157],{"class":107},[101,165662,47322],{"class":160},[101,165664,165665,165668,165670,165673,165675],{"class":103,"line":1304},[101,165666,165667],{"class":111},"max_student ",[101,165669,157],{"class":107},[101,165671,165672],{"class":111}," students[",[101,165674,303],{"class":160},[101,165676,33235],{"class":111},[101,165678,165679,165682,165684],{"class":103,"line":1316},[101,165680,165681],{"class":111},"passed ",[101,165683,157],{"class":107},[101,165685,51827],{"class":111},[101,165687,165688],{"class":103,"line":1599},[101,165689,2387],{"emptyLinePlaceholder":27},[101,165691,165692,165694,165696,165698],{"class":103,"line":1604},[101,165693,3012],{"class":107},[101,165695,152117],{"class":111},[101,165697,26032],{"class":107},[101,165699,152122],{"class":111},[101,165701,165702,165704,165706,165708,165710],{"class":103,"line":1610},[101,165703,159287],{"class":111},[101,165705,9465],{"class":107},[101,165707,152129],{"class":111},[101,165709,151452],{"class":216},[101,165711,33235],{"class":111},[101,165713,165714],{"class":103,"line":1615},[101,165715,2387],{"emptyLinePlaceholder":27},[101,165717,165718,165720,165722,165724,165726,165728,165731,165733],{"class":103,"line":1629},[101,165719,3088],{"class":107},[101,165721,152129],{"class":111},[101,165723,151452],{"class":216},[101,165725,4430],{"class":111},[101,165727,1071],{"class":107},[101,165729,165730],{"class":111}," max_student[",[101,165732,151452],{"class":216},[101,165734,165735],{"class":111},"]:\n",[101,165737,165738,165741,165743],{"class":103,"line":1634},[101,165739,165740],{"class":111},"        max_student ",[101,165742,157],{"class":107},[101,165744,152145],{"class":111},[101,165746,165747],{"class":103,"line":1640},[101,165748,2387],{"emptyLinePlaceholder":27},[101,165750,165751,165753,165755,165757,165759,165761,165763],{"class":103,"line":1661},[101,165752,3088],{"class":107},[101,165754,152129],{"class":111},[101,165756,151452],{"class":216},[101,165758,4430],{"class":111},[101,165760,1697],{"class":107},[101,165762,157817],{"class":160},[101,165764,3726],{"class":111},[101,165766,165767],{"class":103,"line":1666},[101,165768,165769],{"class":111},"        passed.append(student)\n",[101,165771,165772],{"class":103,"line":1680},[101,165773,2387],{"emptyLinePlaceholder":27},[101,165775,165776,165778,165780,165782,165784,165786],{"class":103,"line":1685},[101,165777,163754],{"class":111},[101,165779,157],{"class":107},[101,165781,163759],{"class":111},[101,165783,695],{"class":107},[101,165785,7319],{"class":160},[101,165787,164975],{"class":111},[101,165789,165790],{"class":103,"line":1714},[101,165791,2387],{"emptyLinePlaceholder":27},[101,165793,165794,165796,165798,165800,165802,165804,165806,165808,165810,165812],{"class":103,"line":1719},[101,165795,30404],{"class":160},[101,165797,112],{"class":111},[101,165799,164],{"class":107},[101,165801,163777],{"class":216},[101,165803,1007],{"class":160},[101,165805,163782],{"class":111},[101,165807,157139],{"class":107},[101,165809,1057],{"class":160},[101,165811,362],{"class":216},[101,165813,118],{"class":111},[101,165815,165816,165818,165820,165822,165825,165827,165830,165832,165834,165836,165838,165840,165842,165844,165846,165848],{"class":103,"line":1736},[101,165817,30404],{"class":160},[101,165819,112],{"class":111},[101,165821,164],{"class":107},[101,165823,165824],{"class":216},"\"最高分学生:",[101,165826,1007],{"class":160},[101,165828,165829],{"class":111},"max_student[",[101,165831,152862],{"class":216},[101,165833,1051],{"class":111},[101,165835,1057],{"class":160},[101,165837,4435],{"class":160},[101,165839,165829],{"class":111},[101,165841,152900],{"class":216},[101,165843,1051],{"class":111},[101,165845,1057],{"class":160},[101,165847,362],{"class":216},[101,165849,118],{"class":111},[101,165851,165852,165854,165856,165858,165861,165864,165867,165869,165871],{"class":103,"line":1741},[101,165853,30404],{"class":160},[101,165855,112],{"class":111},[101,165857,164],{"class":107},[101,165859,165860],{"class":216},"\"及格人数:",[101,165862,165863],{"class":160},"{len",[101,165865,165866],{"class":111},"(passed)",[101,165868,1057],{"class":160},[101,165870,362],{"class":216},[101,165872,118],{"class":111},[43,165874,165876],{"id":165875},"_616-易错点","6.16 易错点",[55,165878,165879,165882,165885,165888,165894,165903],{},[58,165880,165881],{},"列表可变，元组和字符串不可变。",[58,165883,165884],{},"切片结束位置不包含。",[58,165886,165887],{},"字典通过 key 取值，不是通过索引。",[58,165889,165890,165891,28374],{},"空集合要用 ",[98,165892,165893],{},"set()",[58,165895,104346,165896,165899,165900,28374],{},[98,165897,165898],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[98,165901,165902],{},"get()",[58,165904,165905],{},"嵌套容器要先看清楚每一层是什么类型。",[43,165907,165909],{"id":165908},"_617-本章练习","6.17 本章练习",[55,165911,165912,165915,165918,165921,165924],{},[58,165913,165914],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[58,165916,165917],{},"输入一句话，统计每个字符出现次数。",[58,165919,165920],{},"使用集合去除列表中的重复元素。",[58,165922,165923],{},"使用字典保存一个学生的信息，并实现修改成绩。",[58,165925,165926],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5114,165928,165929],{},"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":20,"searchDepth":21,"depth":21,"links":165931},[165932,165933,165934,165935,165936,165937,165938,165939,165940,165941,165942,165943,165944,165945,165946,165947,165948],{"id":162912,"depth":21,"text":162913},{"id":163029,"depth":21,"text":163030},{"id":163119,"depth":21,"text":163120},{"id":163243,"depth":21,"text":163244},{"id":163606,"depth":21,"text":163607},{"id":163793,"depth":21,"text":163794},{"id":163912,"depth":21,"text":163913},{"id":164054,"depth":21,"text":164055},{"id":164241,"depth":21,"text":164242},{"id":164485,"depth":21,"text":164486},{"id":164695,"depth":21,"text":164696},{"id":164780,"depth":21,"text":164781},{"id":165078,"depth":21,"text":165079},{"id":165360,"depth":21,"text":165361},{"id":165552,"depth":21,"text":165553},{"id":165875,"depth":21,"text":165876},{"id":165908,"depth":21,"text":165909},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162904,"description":23365},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165955,"title":165956,"body":165957,"description":23365,"extension":24,"meta":168129,"navigation":27,"path":168130,"seo":168131,"stem":168132,"__hash__":168133},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165958,"toc":168104},[165959,165962,165966,165969,166049,166052,166073,166076,166080,166083,166145,166148,166165,166169,166172,166217,166219,166227,166231,166234,166316,166319,166322,166347,166350,166373,166377,166380,166382,166444,166447,166449,166500,166504,166508,166514,166619,166623,166629,166700,166704,166707,166775,166778,166858,166862,166868,166904,166907,166910,167020,167026,167030,167033,167105,167108,167112,167116,167121,167183,167187,167192,167260,167264,167269,167385,167389,167392,167472,167475,167479,167482,167586,167588,167603,167606,167610,167748,167756,167760,167762,167773,167775,168033,168037,168069,168073,168101],[39,165960,165956],{"id":165961},"_7-函数进阶",[43,165963,165965],{"id":165964},"_71-多返回值","7.1 多返回值",[10,165967,165968],{},"Python 函数可以返回多个值，本质上返回的是元组。",[92,165970,165972],{"className":30367,"code":165971,"language":30369,"meta":20,"style":20},"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",[98,165973,165974,165983,165991,165999,166008,166015,166019,166023,166032,166038],{"__ignoreMap":20},[101,165975,165976,165978,165981],{"class":103,"line":104},[101,165977,31936],{"class":107},[101,165979,165980],{"class":1950}," get_info",[101,165982,31942],{"class":111},[101,165984,165985,165987,165989],{"class":103,"line":21},[101,165986,152350],{"class":111},[101,165988,157],{"class":107},[101,165990,149333],{"class":216},[101,165992,165993,165995,165997],{"class":103,"line":1166},[101,165994,152366],{"class":111},[101,165996,157],{"class":107},[101,165998,146531],{"class":160},[101,166000,166001,166003,166005],{"class":103,"line":1181},[101,166002,152381],{"class":111},[101,166004,157],{"class":107},[101,166006,166007],{"class":160}," 95\n",[101,166009,166010,166012],{"class":103,"line":1187},[101,166011,4077],{"class":107},[101,166013,166014],{"class":111}," name, age, score\n",[101,166016,166017],{"class":103,"line":1201},[101,166018,2387],{"emptyLinePlaceholder":27},[101,166020,166021],{"class":103,"line":1207},[101,166022,2387],{"emptyLinePlaceholder":27},[101,166024,166025,166027,166029],{"class":103,"line":1298},[101,166026,161286],{"class":111},[101,166028,157],{"class":107},[101,166030,166031],{"class":111}," get_info()\n",[101,166033,166034,166036],{"class":103,"line":1304},[101,166035,30404],{"class":160},[101,166037,76574],{"class":111},[101,166039,166040,166042,166044,166046],{"class":103,"line":1316},[101,166041,30404],{"class":160},[101,166043,112],{"class":111},[101,166045,103087],{"class":160},[101,166047,166048],{"class":111},"(result))\n",[10,166050,166051],{},"可以直接解包：",[92,166053,166055],{"className":30367,"code":166054,"language":30369,"meta":20,"style":20},"name, age, score = get_info()\nprint(name, age, score)\n",[98,166056,166057,166066],{"__ignoreMap":20},[101,166058,166059,166062,166064],{"class":103,"line":104},[101,166060,166061],{"class":111},"name, age, score ",[101,166063,157],{"class":107},[101,166065,166031],{"class":111},[101,166067,166068,166070],{"class":103,"line":21},[101,166069,30404],{"class":160},[101,166071,166072],{"class":111},"(name, age, score)\n",[10,166074,166075],{},"返回多个值适合函数需要同时给出多个结果时使用。",[43,166077,166079],{"id":166078},"_72-位置参数","7.2 位置参数",[10,166081,166082],{},"位置参数按顺序传递。",[92,166084,166086],{"className":30367,"code":166085,"language":30369,"meta":20,"style":20},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[98,166087,166088,166096,166124,166128,166132],{"__ignoreMap":20},[101,166089,166090,166092,166094],{"class":103,"line":104},[101,166091,31936],{"class":107},[101,166093,149352],{"class":1950},[101,166095,149355],{"class":111},[101,166097,166098,166100,166102,166104,166106,166108,166110,166112,166114,166116,166118,166120,166122],{"class":103,"line":21},[101,166099,31288],{"class":160},[101,166101,112],{"class":111},[101,166103,164],{"class":107},[101,166105,149366],{"class":216},[101,166107,1007],{"class":160},[101,166109,79799],{"class":111},[101,166111,1057],{"class":160},[101,166113,149375],{"class":216},[101,166115,1007],{"class":160},[101,166117,70210],{"class":111},[101,166119,1057],{"class":160},[101,166121,149384],{"class":216},[101,166123,118],{"class":111},[101,166125,166126],{"class":103,"line":1166},[101,166127,2387],{"emptyLinePlaceholder":27},[101,166129,166130],{"class":103,"line":1181},[101,166131,2387],{"emptyLinePlaceholder":27},[101,166133,166134,166137,166139,166141,166143],{"class":103,"line":1187},[101,166135,166136],{"class":111},"introduce(",[101,166138,149868],{"class":216},[101,166140,12423],{"class":111},[101,166142,761],{"class":160},[101,166144,118],{"class":111},[10,166146,166147],{},"顺序错了就会得到错误含义：",[92,166149,166151],{"className":30367,"code":166150,"language":30369,"meta":20,"style":20},"introduce(18, \"小明\")\n",[98,166152,166153],{"__ignoreMap":20},[101,166154,166155,166157,166159,166161,166163],{"class":103,"line":104},[101,166156,166136],{"class":111},[101,166158,761],{"class":160},[101,166160,12423],{"class":111},[101,166162,149868],{"class":216},[101,166164,118],{"class":111},[43,166166,166168],{"id":166167},"_73-关键字参数","7.3 关键字参数",[10,166170,166171],{},"关键字参数按参数名传递。",[92,166173,166175],{"className":30367,"code":166174,"language":30369,"meta":20,"style":20},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[98,166176,166177,166197],{"__ignoreMap":20},[101,166178,166179,166181,166183,166185,166187,166189,166191,166193,166195],{"class":103,"line":104},[101,166180,166136],{"class":111},[101,166182,79799],{"class":5204},[101,166184,157],{"class":107},[101,166186,149868],{"class":216},[101,166188,12423],{"class":111},[101,166190,70210],{"class":5204},[101,166192,157],{"class":107},[101,166194,761],{"class":160},[101,166196,118],{"class":111},[101,166198,166199,166201,166203,166205,166207,166209,166211,166213,166215],{"class":103,"line":21},[101,166200,166136],{"class":111},[101,166202,70210],{"class":5204},[101,166204,157],{"class":107},[101,166206,761],{"class":160},[101,166208,12423],{"class":111},[101,166210,79799],{"class":5204},[101,166212,157],{"class":107},[101,166214,149868],{"class":216},[101,166216,118],{"class":111},[10,166218,117914],{},[55,166220,166221,166224],{},[58,166222,166223],{},"顺序不容易错。",[58,166225,166226],{},"调用时可读性更强。",[43,166228,166230],{"id":166229},"_74-默认参数","7.4 默认参数",[10,166232,166233],{},"默认参数给参数设置默认值。",[92,166235,166237],{"className":30367,"code":166236,"language":30369,"meta":20,"style":20},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[98,166238,166239,166255,166285,166289,166293,166303],{"__ignoreMap":20},[101,166240,166241,166243,166245,166248,166250,166253],{"class":103,"line":104},[101,166242,31936],{"class":107},[101,166244,122073],{"class":1950},[101,166246,166247],{"class":111},"(host, port",[101,166249,157],{"class":107},[101,166251,166252],{"class":160},"3306",[101,166254,30775],{"class":111},[101,166256,166257,166259,166261,166263,166266,166268,166270,166272,166274,166276,166279,166281,166283],{"class":103,"line":21},[101,166258,31288],{"class":160},[101,166260,112],{"class":111},[101,166262,164],{"class":107},[101,166264,166265],{"class":216},"\"连接",[101,166267,1007],{"class":160},[101,166269,27384],{"class":111},[101,166271,1057],{"class":160},[101,166273,970],{"class":216},[101,166275,1007],{"class":160},[101,166277,166278],{"class":111},"port",[101,166280,1057],{"class":160},[101,166282,362],{"class":216},[101,166284,118],{"class":111},[101,166286,166287],{"class":103,"line":1166},[101,166288,2387],{"emptyLinePlaceholder":27},[101,166290,166291],{"class":103,"line":1181},[101,166292,2387],{"emptyLinePlaceholder":27},[101,166294,166295,166298,166301],{"class":103,"line":1187},[101,166296,166297],{"class":111},"connect(",[101,166299,166300],{"class":216},"\"localhost\"",[101,166302,118],{"class":111},[101,166304,166305,166307,166309,166311,166314],{"class":103,"line":1201},[101,166306,166297],{"class":111},[101,166308,166300],{"class":216},[101,166310,12423],{"class":111},[101,166312,166313],{"class":160},"6379",[101,166315,118],{"class":111},[10,166317,166318],{},"注意：默认参数必须放在非默认参数后面。",[10,166320,166321],{},"错误：",[92,166323,166325],{"className":30367,"code":166324,"language":30369,"meta":20,"style":20},"def connect(port=3306, host):\n    pass\n",[98,166326,166327,166343],{"__ignoreMap":20},[101,166328,166329,166331,166333,166336,166338,166340],{"class":103,"line":104},[101,166330,31936],{"class":107},[101,166332,122073],{"class":1950},[101,166334,166335],{"class":111},"(port",[101,166337,157],{"class":107},[101,166339,166252],{"class":160},[101,166341,166342],{"class":111},", host):\n",[101,166344,166345],{"class":103,"line":21},[101,166346,149517],{"class":107},[10,166348,166349],{},"正确：",[92,166351,166353],{"className":30367,"code":166352,"language":30369,"meta":20,"style":20},"def connect(host, port=3306):\n    pass\n",[98,166354,166355,166369],{"__ignoreMap":20},[101,166356,166357,166359,166361,166363,166365,166367],{"class":103,"line":104},[101,166358,31936],{"class":107},[101,166360,122073],{"class":1950},[101,166362,166247],{"class":111},[101,166364,157],{"class":107},[101,166366,166252],{"class":160},[101,166368,30775],{"class":111},[101,166370,166371],{"class":103,"line":21},[101,166372,149517],{"class":107},[43,166374,166376],{"id":166375},"_75-默认参数的坑","7.5 默认参数的坑",[10,166378,166379],{},"不要使用可变对象作为默认参数。",[10,166381,157603],{},[92,166383,166385],{"className":30367,"code":166384,"language":30369,"meta":20,"style":20},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[98,166386,166387,166402,166407,166414,166418,166422,166433],{"__ignoreMap":20},[101,166388,166389,166391,166394,166397,166399],{"class":103,"line":104},[101,166390,31936],{"class":107},[101,166392,166393],{"class":1950}," add_item",[101,166395,166396],{"class":111},"(item, items",[101,166398,157],{"class":107},[101,166400,166401],{"class":111},"[]):\n",[101,166403,166404],{"class":103,"line":21},[101,166405,166406],{"class":111},"    items.append(item)\n",[101,166408,166409,166411],{"class":103,"line":1166},[101,166410,4077],{"class":107},[101,166412,166413],{"class":111}," items\n",[101,166415,166416],{"class":103,"line":1181},[101,166417,2387],{"emptyLinePlaceholder":27},[101,166419,166420],{"class":103,"line":1187},[101,166421,2387],{"emptyLinePlaceholder":27},[101,166423,166424,166426,166429,166431],{"class":103,"line":1201},[101,166425,30404],{"class":160},[101,166427,166428],{"class":111},"(add_item(",[101,166430,165305],{"class":216},[101,166432,30486],{"class":111},[101,166434,166435,166437,166439,166442],{"class":103,"line":1207},[101,166436,30404],{"class":160},[101,166438,166428],{"class":111},[101,166440,166441],{"class":216},"\"b\"",[101,166443,30486],{"class":111},[10,166445,166446],{},"第二次调用会复用第一次的列表。",[10,166448,155868],{},[92,166450,166452],{"className":30367,"code":166451,"language":30369,"meta":20,"style":20},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[98,166453,166454,166468,166481,166490,166494],{"__ignoreMap":20},[101,166455,166456,166458,166460,166462,166464,166466],{"class":103,"line":104},[101,166457,31936],{"class":107},[101,166459,166393],{"class":1950},[101,166461,166396],{"class":111},[101,166463,157],{"class":107},[101,166465,95666],{"class":160},[101,166467,30775],{"class":111},[101,166469,166470,166472,166475,166477,166479],{"class":103,"line":21},[101,166471,3088],{"class":107},[101,166473,166474],{"class":111}," items ",[101,166476,38916],{"class":107},[101,166478,38922],{"class":160},[101,166480,3726],{"class":111},[101,166482,166483,166486,166488],{"class":103,"line":1166},[101,166484,166485],{"class":111},"        items ",[101,166487,157],{"class":107},[101,166489,51827],{"class":111},[101,166491,166492],{"class":103,"line":1181},[101,166493,166406],{"class":111},[101,166495,166496,166498],{"class":103,"line":1187},[101,166497,4077],{"class":107},[101,166499,166413],{"class":111},[43,166501,166503],{"id":166502},"_76-不定长参数","7.6 不定长参数",[72,166505,166507],{"id":166506},"_761-args","7.6.1 *args",[10,166509,166510,166513],{},[98,166511,166512],{},"*args"," 接收任意数量的位置参数，得到元组。",[92,166515,166517],{"className":30367,"code":166516,"language":30369,"meta":20,"style":20},"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",[98,166518,166519,166532,166540,166551,166560,166566,166570,166574,166593],{"__ignoreMap":20},[101,166520,166521,166523,166525,166527,166529],{"class":103,"line":104},[101,166522,31936],{"class":107},[101,166524,5197],{"class":1950},[101,166526,112],{"class":111},[101,166528,566],{"class":107},[101,166530,166531],{"class":111},"args):\n",[101,166533,166534,166536,166538],{"class":103,"line":21},[101,166535,159287],{"class":111},[101,166537,157],{"class":107},[101,166539,47322],{"class":160},[101,166541,166542,166544,166546,166548],{"class":103,"line":1166},[101,166543,3188],{"class":107},[101,166545,156160],{"class":111},[101,166547,26032],{"class":107},[101,166549,166550],{"class":111}," args:\n",[101,166552,166553,166555,166557],{"class":103,"line":1181},[101,166554,159962],{"class":111},[101,166556,9465],{"class":107},[101,166558,166559],{"class":111}," num\n",[101,166561,166562,166564],{"class":103,"line":1187},[101,166563,4077],{"class":107},[101,166565,162267],{"class":111},[101,166567,166568],{"class":103,"line":1201},[101,166569,2387],{"emptyLinePlaceholder":27},[101,166571,166572],{"class":103,"line":1207},[101,166573,2387],{"emptyLinePlaceholder":27},[101,166575,166576,166578,166581,166583,166585,166587,166589,166591],{"class":103,"line":1298},[101,166577,30404],{"class":160},[101,166579,166580],{"class":111},"(add(",[101,166582,329],{"class":160},[101,166584,12423],{"class":111},[101,166586,189],{"class":160},[101,166588,12423],{"class":111},[101,166590,183],{"class":160},[101,166592,30486],{"class":111},[101,166594,166595,166597,166599,166601,166603,166605,166607,166609,166611,166613,166615,166617],{"class":103,"line":1304},[101,166596,30404],{"class":160},[101,166598,166580],{"class":111},[101,166600,329],{"class":160},[101,166602,12423],{"class":111},[101,166604,189],{"class":160},[101,166606,12423],{"class":111},[101,166608,183],{"class":160},[101,166610,12423],{"class":111},[101,166612,404],{"class":160},[101,166614,12423],{"class":111},[101,166616,430],{"class":160},[101,166618,30486],{"class":111},[72,166620,166622],{"id":166621},"_762-kwargs","7.6.2 **kwargs",[10,166624,166625,166628],{},[98,166626,166627],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[92,166630,166632],{"className":30367,"code":166631,"language":30369,"meta":20,"style":20},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[98,166633,166634,166647,166658,166664,166668,166672],{"__ignoreMap":20},[101,166635,166636,166638,166640,166642,166644],{"class":103,"line":104},[101,166637,31936],{"class":107},[101,166639,161925],{"class":1950},[101,166641,112],{"class":111},[101,166643,10649],{"class":107},[101,166645,166646],{"class":111},"kwargs):\n",[101,166648,166649,166651,166653,166655],{"class":103,"line":21},[101,166650,3188],{"class":107},[101,166652,164765],{"class":111},[101,166654,26032],{"class":107},[101,166656,166657],{"class":111}," kwargs.items():\n",[101,166659,166660,166662],{"class":103,"line":1166},[101,166661,32440],{"class":160},[101,166663,164777],{"class":111},[101,166665,166666],{"class":103,"line":1181},[101,166667,2387],{"emptyLinePlaceholder":27},[101,166669,166670],{"class":103,"line":1187},[101,166671,2387],{"emptyLinePlaceholder":27},[101,166673,166674,166676,166678,166680,166682,166684,166686,166688,166690,166692,166694,166696,166698],{"class":103,"line":1201},[101,166675,161990],{"class":111},[101,166677,79799],{"class":5204},[101,166679,157],{"class":107},[101,166681,149868],{"class":216},[101,166683,12423],{"class":111},[101,166685,70210],{"class":5204},[101,166687,157],{"class":107},[101,166689,761],{"class":160},[101,166691,12423],{"class":111},[101,166693,70261],{"class":5204},[101,166695,157],{"class":107},[101,166697,69258],{"class":216},[101,166699,118],{"class":111},[43,166701,166703],{"id":166702},"_77-参数解包","7.7 参数解包",[10,166705,166706],{},"列表或元组解包为位置参数：",[92,166708,166710],{"className":30367,"code":166709,"language":30369,"meta":20,"style":20},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[98,166711,166712,166721,166736,166740,166744,166764],{"__ignoreMap":20},[101,166713,166714,166716,166718],{"class":103,"line":104},[101,166715,31936],{"class":107},[101,166717,5197],{"class":1950},[101,166719,166720],{"class":111},"(a, b, c):\n",[101,166722,166723,166725,166727,166729,166731,166733],{"class":103,"line":21},[101,166724,4077],{"class":107},[101,166726,10857],{"class":111},[101,166728,592],{"class":107},[101,166730,10870],{"class":111},[101,166732,592],{"class":107},[101,166734,166735],{"class":111}," c\n",[101,166737,166738],{"class":103,"line":1166},[101,166739,2387],{"emptyLinePlaceholder":27},[101,166741,166742],{"class":103,"line":1181},[101,166743,2387],{"emptyLinePlaceholder":27},[101,166745,166746,166748,166750,166752,166754,166756,166758,166760,166762],{"class":103,"line":1187},[101,166747,164080],{"class":111},[101,166749,157],{"class":107},[101,166751,52215],{"class":111},[101,166753,329],{"class":160},[101,166755,12423],{"class":111},[101,166757,189],{"class":160},[101,166759,12423],{"class":111},[101,166761,183],{"class":160},[101,166763,33235],{"class":111},[101,166765,166766,166768,166770,166772],{"class":103,"line":1201},[101,166767,30404],{"class":160},[101,166769,166580],{"class":111},[101,166771,566],{"class":107},[101,166773,166774],{"class":111},"nums))\n",[10,166776,166777],{},"字典解包为关键字参数：",[92,166779,166781],{"className":30367,"code":166780,"language":30369,"meta":20,"style":20},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[98,166782,166783,166791,166817,166821,166825,166849],{"__ignoreMap":20},[101,166784,166785,166787,166789],{"class":103,"line":104},[101,166786,31936],{"class":107},[101,166788,149352],{"class":1950},[101,166790,149355],{"class":111},[101,166792,166793,166795,166797,166799,166801,166803,166805,166807,166809,166811,166813,166815],{"class":103,"line":21},[101,166794,31288],{"class":160},[101,166796,112],{"class":111},[101,166798,164],{"class":107},[101,166800,362],{"class":216},[101,166802,1007],{"class":160},[101,166804,79799],{"class":111},[101,166806,1057],{"class":160},[101,166808,4435],{"class":160},[101,166810,70210],{"class":111},[101,166812,1057],{"class":160},[101,166814,362],{"class":216},[101,166816,118],{"class":111},[101,166818,166819],{"class":103,"line":1166},[101,166820,2387],{"emptyLinePlaceholder":27},[101,166822,166823],{"class":103,"line":1181},[101,166824,2387],{"emptyLinePlaceholder":27},[101,166826,166827,166829,166831,166833,166835,166837,166839,166841,166843,166845,166847],{"class":103,"line":1187},[101,166828,116294],{"class":111},[101,166830,157],{"class":107},[101,166832,4435],{"class":111},[101,166834,62668],{"class":216},[101,166836,51426],{"class":111},[101,166838,149868],{"class":216},[101,166840,12423],{"class":111},[101,166842,69113],{"class":216},[101,166844,51426],{"class":111},[101,166846,761],{"class":160},[101,166848,1552],{"class":111},[101,166850,166851,166853,166855],{"class":103,"line":1201},[101,166852,166136],{"class":111},[101,166854,10649],{"class":107},[101,166856,166857],{"class":111},"info)\n",[43,166859,166861],{"id":166860},"_78-匿名函数lambda","7.8 匿名函数lambda",[10,166863,166864,166867],{},[98,166865,166866],{},"lambda"," 用于定义简单匿名函数。",[92,166869,166871],{"className":30367,"code":166870,"language":30369,"meta":20,"style":20},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[98,166872,166873,166890],{"__ignoreMap":20},[101,166874,166875,166878,166880,166883,166886,166888],{"class":103,"line":104},[101,166876,166877],{"class":111},"add ",[101,166879,157],{"class":107},[101,166881,166882],{"class":107}," lambda",[101,166884,166885],{"class":111}," a, b: a ",[101,166887,592],{"class":107},[101,166889,151084],{"class":111},[101,166891,166892,166894,166896,166898,166900,166902],{"class":103,"line":21},[101,166893,30404],{"class":160},[101,166895,166580],{"class":111},[101,166897,329],{"class":160},[101,166899,12423],{"class":111},[101,166901,189],{"class":160},[101,166903,30486],{"class":111},[10,166905,166906],{},"常和排序、过滤等函数一起使用。",[10,166908,166909],{},"按分数排序：",[92,166911,166913],{"className":30367,"code":166912,"language":30369,"meta":20,"style":20},"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",[98,166914,166915,166923,166943,166963,166983,166987,166991,167014],{"__ignoreMap":20},[101,166916,166917,166919,166921],{"class":103,"line":104},[101,166918,159696],{"class":111},[101,166920,157],{"class":107},[101,166922,55436],{"class":111},[101,166924,166925,166927,166929,166931,166933,166935,166937,166939,166941],{"class":103,"line":21},[101,166926,148365],{"class":111},[101,166928,62668],{"class":216},[101,166930,51426],{"class":111},[101,166932,149868],{"class":216},[101,166934,12423],{"class":111},[101,166936,151452],{"class":216},[101,166938,51426],{"class":111},[101,166940,1100],{"class":160},[101,166942,4917],{"class":111},[101,166944,166945,166947,166949,166951,166953,166955,166957,166959,166961],{"class":103,"line":1166},[101,166946,148365],{"class":111},[101,166948,62668],{"class":216},[101,166950,51426],{"class":111},[101,166952,150916],{"class":216},[101,166954,12423],{"class":111},[101,166956,151452],{"class":216},[101,166958,51426],{"class":111},[101,166960,922],{"class":160},[101,166962,4917],{"class":111},[101,166964,166965,166967,166969,166971,166973,166975,166977,166979,166981],{"class":103,"line":1181},[101,166966,148365],{"class":111},[101,166968,62668],{"class":216},[101,166970,51426],{"class":111},[101,166972,159711],{"class":216},[101,166974,12423],{"class":111},[101,166976,151452],{"class":216},[101,166978,51426],{"class":111},[101,166980,517],{"class":160},[101,166982,4917],{"class":111},[101,166984,166985],{"class":103,"line":1187},[101,166986,33235],{"class":111},[101,166988,166989],{"class":103,"line":1201},[101,166990,2387],{"emptyLinePlaceholder":27},[101,166992,166993,166996,166998,167000,167002,167004,167006,167008,167010,167012],{"class":103,"line":1207},[101,166994,166995],{"class":111},"students.sort(",[101,166997,153926],{"class":5204},[101,166999,153929],{"class":107},[101,167001,153932],{"class":111},[101,167003,151452],{"class":216},[101,167005,112182],{"class":111},[101,167007,163508],{"class":5204},[101,167009,157],{"class":107},[101,167011,31465],{"class":160},[101,167013,118],{"class":111},[101,167015,167016,167018],{"class":103,"line":1298},[101,167017,30404],{"class":160},[101,167019,164975],{"class":111},[10,167021,167022,167023,167025],{},"如果逻辑复杂，不要硬写 ",[98,167024,166866],{},"，定义普通函数更清晰。",[43,167027,167029],{"id":167028},"_79-函数作为参数","7.9 函数作为参数",[10,167031,167032],{},"函数可以作为参数传给另一个函数。",[92,167034,167036],{"className":30367,"code":167035,"language":30369,"meta":20,"style":20},"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",[98,167037,167038,167046,167056,167060,167064,167074,167081,167085,167089],{"__ignoreMap":20},[101,167039,167040,167042,167044],{"class":103,"line":104},[101,167041,31936],{"class":107},[101,167043,5197],{"class":1950},[101,167045,151073],{"class":111},[101,167047,167048,167050,167052,167054],{"class":103,"line":21},[101,167049,4077],{"class":107},[101,167051,10857],{"class":111},[101,167053,592],{"class":107},[101,167055,151084],{"class":111},[101,167057,167058],{"class":103,"line":1166},[101,167059,2387],{"emptyLinePlaceholder":27},[101,167061,167062],{"class":103,"line":1181},[101,167063,2387],{"emptyLinePlaceholder":27},[101,167065,167066,167068,167071],{"class":103,"line":1187},[101,167067,31936],{"class":107},[101,167069,167070],{"class":1950}," calculate",[101,167072,167073],{"class":111},"(a, b, func):\n",[101,167075,167076,167078],{"class":103,"line":1201},[101,167077,4077],{"class":107},[101,167079,167080],{"class":111}," func(a, b)\n",[101,167082,167083],{"class":103,"line":1207},[101,167084,2387],{"emptyLinePlaceholder":27},[101,167086,167087],{"class":103,"line":1298},[101,167088,2387],{"emptyLinePlaceholder":27},[101,167090,167091,167093,167096,167098,167100,167102],{"class":103,"line":1304},[101,167092,30404],{"class":160},[101,167094,167095],{"class":111},"(calculate(",[101,167097,557],{"class":160},[101,167099,12423],{"class":111},[101,167101,811],{"class":160},[101,167103,167104],{"class":111},", add))\n",[10,167106,167107],{},"这种思想在排序、回调、框架中经常出现。",[43,167109,167111],{"id":167110},"_710-mapfiltersorted","7.10 map、filter、sorted",[72,167113,167115],{"id":167114},"_7101-map","7.10.1 map",[10,167117,167118,167120],{},[98,167119,74033],{}," 对每个元素执行函数。",[92,167122,167124],{"className":30367,"code":167123,"language":30369,"meta":20,"style":20},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[98,167125,167126,167150,167173],{"__ignoreMap":20},[101,167127,167128,167130,167132,167134,167136,167138,167140,167142,167144,167146,167148],{"class":103,"line":104},[101,167129,164080],{"class":111},[101,167131,157],{"class":107},[101,167133,52215],{"class":111},[101,167135,329],{"class":160},[101,167137,12423],{"class":111},[101,167139,189],{"class":160},[101,167141,12423],{"class":111},[101,167143,183],{"class":160},[101,167145,12423],{"class":111},[101,167147,404],{"class":160},[101,167149,33235],{"class":111},[101,167151,167152,167154,167156,167159,167161,167163,167166,167168,167170],{"class":103,"line":21},[101,167153,161286],{"class":111},[101,167155,157],{"class":107},[101,167157,167158],{"class":160}," map",[101,167160,112],{"class":111},[101,167162,166866],{"class":107},[101,167164,167165],{"class":111}," x: x ",[101,167167,566],{"class":107},[101,167169,14743],{"class":160},[101,167171,167172],{"class":111},", nums)\n",[101,167174,167175,167177,167179,167181],{"class":103,"line":1166},[101,167176,30404],{"class":160},[101,167178,112],{"class":111},[101,167180,154050],{"class":160},[101,167182,166048],{"class":111},[72,167184,167186],{"id":167185},"_7102-filter","7.10.2 filter",[10,167188,167189,167191],{},[98,167190,80040],{}," 保留满足条件的元素。",[92,167193,167195],{"className":30367,"code":167194,"language":30369,"meta":20,"style":20},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[98,167196,167197,167225,167250],{"__ignoreMap":20},[101,167198,167199,167201,167203,167205,167207,167209,167211,167213,167215,167217,167219,167221,167223],{"class":103,"line":104},[101,167200,164080],{"class":111},[101,167202,157],{"class":107},[101,167204,52215],{"class":111},[101,167206,329],{"class":160},[101,167208,12423],{"class":111},[101,167210,189],{"class":160},[101,167212,12423],{"class":111},[101,167214,183],{"class":160},[101,167216,12423],{"class":111},[101,167218,404],{"class":160},[101,167220,12423],{"class":111},[101,167222,430],{"class":160},[101,167224,33235],{"class":111},[101,167226,167227,167229,167231,167234,167236,167238,167240,167242,167244,167246,167248],{"class":103,"line":21},[101,167228,161286],{"class":111},[101,167230,157],{"class":107},[101,167232,167233],{"class":160}," filter",[101,167235,112],{"class":111},[101,167237,166866],{"class":107},[101,167239,167165],{"class":111},[101,167241,439],{"class":107},[101,167243,14743],{"class":160},[101,167245,101539],{"class":107},[101,167247,4080],{"class":160},[101,167249,167172],{"class":111},[101,167251,167252,167254,167256,167258],{"class":103,"line":1166},[101,167253,30404],{"class":160},[101,167255,112],{"class":111},[101,167257,154050],{"class":160},[101,167259,166048],{"class":111},[72,167261,167263],{"id":167262},"_7103-sorted","7.10.3 sorted",[10,167265,167266,167268],{},[98,167267,165216],{}," 返回排序后的新列表。",[92,167270,167272],{"className":30367,"code":167271,"language":30369,"meta":20,"style":20},"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",[98,167273,167274,167282,167302,167322,167342,167346,167350,167379],{"__ignoreMap":20},[101,167275,167276,167278,167280],{"class":103,"line":104},[101,167277,159696],{"class":111},[101,167279,157],{"class":107},[101,167281,55436],{"class":111},[101,167283,167284,167286,167288,167290,167292,167294,167296,167298,167300],{"class":103,"line":21},[101,167285,148365],{"class":111},[101,167287,62668],{"class":216},[101,167289,51426],{"class":111},[101,167291,149868],{"class":216},[101,167293,12423],{"class":111},[101,167295,151452],{"class":216},[101,167297,51426],{"class":111},[101,167299,1100],{"class":160},[101,167301,4917],{"class":111},[101,167303,167304,167306,167308,167310,167312,167314,167316,167318,167320],{"class":103,"line":1166},[101,167305,148365],{"class":111},[101,167307,62668],{"class":216},[101,167309,51426],{"class":111},[101,167311,150916],{"class":216},[101,167313,12423],{"class":111},[101,167315,151452],{"class":216},[101,167317,51426],{"class":111},[101,167319,922],{"class":160},[101,167321,4917],{"class":111},[101,167323,167324,167326,167328,167330,167332,167334,167336,167338,167340],{"class":103,"line":1181},[101,167325,148365],{"class":111},[101,167327,62668],{"class":216},[101,167329,51426],{"class":111},[101,167331,159711],{"class":216},[101,167333,12423],{"class":111},[101,167335,151452],{"class":216},[101,167337,51426],{"class":111},[101,167339,517],{"class":160},[101,167341,4917],{"class":111},[101,167343,167344],{"class":103,"line":1187},[101,167345,33235],{"class":111},[101,167347,167348],{"class":103,"line":1201},[101,167349,2387],{"emptyLinePlaceholder":27},[101,167351,167352,167354,167356,167358,167361,167363,167365,167367,167369,167371,167373,167375,167377],{"class":103,"line":1207},[101,167353,161286],{"class":111},[101,167355,157],{"class":107},[101,167357,163584],{"class":160},[101,167359,167360],{"class":111},"(students, ",[101,167362,153926],{"class":5204},[101,167364,153929],{"class":107},[101,167366,153932],{"class":111},[101,167368,151452],{"class":216},[101,167370,112182],{"class":111},[101,167372,163508],{"class":5204},[101,167374,157],{"class":107},[101,167376,31465],{"class":160},[101,167378,118],{"class":111},[101,167380,167381,167383],{"class":103,"line":1298},[101,167382,30404],{"class":160},[101,167384,76574],{"class":111},[43,167386,167388],{"id":167387},"_711-闭包入门","7.11 闭包入门",[10,167390,167391],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[92,167393,167395],{"className":30367,"code":167394,"language":30369,"meta":20,"style":20},"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",[98,167396,167397,167407,167417,167428,167432,167439,167443,167447,167461],{"__ignoreMap":20},[101,167398,167399,167401,167404],{"class":103,"line":104},[101,167400,31936],{"class":107},[101,167402,167403],{"class":1950}," outer",[101,167405,167406],{"class":111},"(base):\n",[101,167408,167409,167411,167414],{"class":103,"line":21},[101,167410,30790],{"class":107},[101,167412,167413],{"class":1950}," inner",[101,167415,167416],{"class":111},"(num):\n",[101,167418,167419,167421,167424,167426],{"class":103,"line":1166},[101,167420,14740],{"class":107},[101,167422,167423],{"class":111}," base ",[101,167425,592],{"class":107},[101,167427,166559],{"class":111},[101,167429,167430],{"class":103,"line":1181},[101,167431,2387],{"emptyLinePlaceholder":27},[101,167433,167434,167436],{"class":103,"line":1187},[101,167435,4077],{"class":107},[101,167437,167438],{"class":111}," inner\n",[101,167440,167441],{"class":103,"line":1201},[101,167442,2387],{"emptyLinePlaceholder":27},[101,167444,167445],{"class":103,"line":1207},[101,167446,2387],{"emptyLinePlaceholder":27},[101,167448,167449,167452,167454,167457,167459],{"class":103,"line":1298},[101,167450,167451],{"class":111},"add_10 ",[101,167453,157],{"class":107},[101,167455,167456],{"class":111}," outer(",[101,167458,557],{"class":160},[101,167460,118],{"class":111},[101,167462,167463,167465,167468,167470],{"class":103,"line":1304},[101,167464,30404],{"class":160},[101,167466,167467],{"class":111},"(add_10(",[101,167469,430],{"class":160},[101,167471,30486],{"class":111},[10,167473,167474],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[43,167476,167478],{"id":167477},"_712-装饰器入门","7.12 装饰器入门",[10,167480,167481],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[92,167483,167485],{"className":30367,"code":167484,"language":30369,"meta":20,"style":20},"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",[98,167486,167487,167496,167505,167516,167521,167532,167536,167543,167547,167551,167556,167564,167574,167578,167582],{"__ignoreMap":20},[101,167488,167489,167491,167493],{"class":103,"line":104},[101,167490,31936],{"class":107},[101,167492,87180],{"class":1950},[101,167494,167495],{"class":111},"(func):\n",[101,167497,167498,167500,167503],{"class":103,"line":21},[101,167499,30790],{"class":107},[101,167501,167502],{"class":1950}," wrapper",[101,167504,31942],{"class":111},[101,167506,167507,167509,167511,167514],{"class":103,"line":1166},[101,167508,32440],{"class":160},[101,167510,112],{"class":111},[101,167512,167513],{"class":216},"\"函数开始执行\"",[101,167515,118],{"class":111},[101,167517,167518],{"class":103,"line":1181},[101,167519,167520],{"class":111},"        func()\n",[101,167522,167523,167525,167527,167530],{"class":103,"line":1187},[101,167524,32440],{"class":160},[101,167526,112],{"class":111},[101,167528,167529],{"class":216},"\"函数执行结束\"",[101,167531,118],{"class":111},[101,167533,167534],{"class":103,"line":1201},[101,167535,2387],{"emptyLinePlaceholder":27},[101,167537,167538,167540],{"class":103,"line":1207},[101,167539,4077],{"class":107},[101,167541,167542],{"class":111}," wrapper\n",[101,167544,167545],{"class":103,"line":1298},[101,167546,2387],{"emptyLinePlaceholder":27},[101,167548,167549],{"class":103,"line":1304},[101,167550,2387],{"emptyLinePlaceholder":27},[101,167552,167553],{"class":103,"line":1316},[101,167554,167555],{"class":1950},"@log\n",[101,167557,167558,167560,167562],{"class":103,"line":1599},[101,167559,31936],{"class":107},[101,167561,160976],{"class":1950},[101,167563,31942],{"class":111},[101,167565,167566,167568,167570,167572],{"class":103,"line":1604},[101,167567,31288],{"class":160},[101,167569,112],{"class":111},[101,167571,5832],{"class":216},[101,167573,118],{"class":111},[101,167575,167576],{"class":103,"line":1610},[101,167577,2387],{"emptyLinePlaceholder":27},[101,167579,167580],{"class":103,"line":1615},[101,167581,2387],{"emptyLinePlaceholder":27},[101,167583,167584],{"class":103,"line":1629},[101,167585,161011],{"class":111},[10,167587,158254],{},[92,167589,167591],{"className":30367,"code":167590,"language":30369,"meta":20,"style":20},"say_hello = log(say_hello)\n",[98,167592,167593],{"__ignoreMap":20},[101,167594,167595,167598,167600],{"class":103,"line":104},[101,167596,167597],{"class":111},"say_hello ",[101,167599,157],{"class":107},[101,167601,167602],{"class":111}," log(say_hello)\n",[10,167604,167605],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[43,167607,167609],{"id":167608},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[92,167611,167613],{"className":30367,"code":167612,"language":30369,"meta":20,"style":20},"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",[98,167614,167615,167623,167640,167650,167669,167679,167686,167690,167696,167700,167704,167708,167716,167726,167730,167734],{"__ignoreMap":20},[101,167616,167617,167619,167621],{"class":103,"line":104},[101,167618,31936],{"class":107},[101,167620,87180],{"class":1950},[101,167622,167495],{"class":111},[101,167624,167625,167627,167629,167631,167633,167636,167638],{"class":103,"line":21},[101,167626,30790],{"class":107},[101,167628,167502],{"class":1950},[101,167630,112],{"class":111},[101,167632,566],{"class":107},[101,167634,167635],{"class":111},"args, ",[101,167637,10649],{"class":107},[101,167639,166646],{"class":111},[101,167641,167642,167644,167646,167648],{"class":103,"line":1166},[101,167643,32440],{"class":160},[101,167645,112],{"class":111},[101,167647,167513],{"class":216},[101,167649,118],{"class":111},[101,167651,167652,167655,167657,167660,167662,167664,167666],{"class":103,"line":1181},[101,167653,167654],{"class":111},"        result ",[101,167656,157],{"class":107},[101,167658,167659],{"class":111}," func(",[101,167661,566],{"class":107},[101,167663,167635],{"class":111},[101,167665,10649],{"class":107},[101,167667,167668],{"class":111},"kwargs)\n",[101,167670,167671,167673,167675,167677],{"class":103,"line":1187},[101,167672,32440],{"class":160},[101,167674,112],{"class":111},[101,167676,167529],{"class":216},[101,167678,118],{"class":111},[101,167680,167681,167683],{"class":103,"line":1201},[101,167682,14740],{"class":107},[101,167684,167685],{"class":111}," result\n",[101,167687,167688],{"class":103,"line":1207},[101,167689,2387],{"emptyLinePlaceholder":27},[101,167691,167692,167694],{"class":103,"line":1298},[101,167693,4077],{"class":107},[101,167695,167542],{"class":111},[101,167697,167698],{"class":103,"line":1304},[101,167699,2387],{"emptyLinePlaceholder":27},[101,167701,167702],{"class":103,"line":1316},[101,167703,2387],{"emptyLinePlaceholder":27},[101,167705,167706],{"class":103,"line":1599},[101,167707,167555],{"class":1950},[101,167709,167710,167712,167714],{"class":103,"line":1604},[101,167711,31936],{"class":107},[101,167713,5197],{"class":1950},[101,167715,151073],{"class":111},[101,167717,167718,167720,167722,167724],{"class":103,"line":1610},[101,167719,4077],{"class":107},[101,167721,10857],{"class":111},[101,167723,592],{"class":107},[101,167725,151084],{"class":111},[101,167727,167728],{"class":103,"line":1615},[101,167729,2387],{"emptyLinePlaceholder":27},[101,167731,167732],{"class":103,"line":1629},[101,167733,2387],{"emptyLinePlaceholder":27},[101,167735,167736,167738,167740,167742,167744,167746],{"class":103,"line":1634},[101,167737,30404],{"class":160},[101,167739,166580],{"class":111},[101,167741,557],{"class":160},[101,167743,12423],{"class":111},[101,167745,811],{"class":160},[101,167747,30486],{"class":111},[10,167749,167750,167751,100998,167753,167755],{},"这个写法使用 ",[98,167752,166512],{},[98,167754,166627],{}," 接收原函数的所有参数。",[43,167757,167759],{"id":167758},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[10,167761,123272],{},[55,167763,167764,167767,167770],{},[58,167765,167766],{},"给定一组学生数据。",[58,167768,167769],{},"封装函数，根据传入规则筛选学生。",[58,167771,167772],{},"筛选及格、优秀、未成年学生。",[10,167774,10023],{},[92,167776,167778],{"className":30367,"code":167777,"language":30369,"meta":20,"style":20},"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",[98,167779,167780,167788,167816,167844,167872,167876,167880,167884,167894,167902,167912,167919,167924,167930,167934,167938,167962,167985,168008,168012,168019,168026],{"__ignoreMap":20},[101,167781,167782,167784,167786],{"class":103,"line":104},[101,167783,159696],{"class":111},[101,167785,157],{"class":107},[101,167787,55436],{"class":111},[101,167789,167790,167792,167794,167796,167798,167800,167802,167804,167806,167808,167810,167812,167814],{"class":103,"line":21},[101,167791,148365],{"class":111},[101,167793,62668],{"class":216},[101,167795,51426],{"class":111},[101,167797,149868],{"class":216},[101,167799,12423],{"class":111},[101,167801,69113],{"class":216},[101,167803,51426],{"class":111},[101,167805,761],{"class":160},[101,167807,12423],{"class":111},[101,167809,151452],{"class":216},[101,167811,51426],{"class":111},[101,167813,1100],{"class":160},[101,167815,4917],{"class":111},[101,167817,167818,167820,167822,167824,167826,167828,167830,167832,167834,167836,167838,167840,167842],{"class":103,"line":1166},[101,167819,148365],{"class":111},[101,167821,62668],{"class":216},[101,167823,51426],{"class":111},[101,167825,150916],{"class":216},[101,167827,12423],{"class":111},[101,167829,69113],{"class":216},[101,167831,51426],{"class":111},[101,167833,736],{"class":160},[101,167835,12423],{"class":111},[101,167837,151452],{"class":216},[101,167839,51426],{"class":111},[101,167841,922],{"class":160},[101,167843,4917],{"class":111},[101,167845,167846,167848,167850,167852,167854,167856,167858,167860,167862,167864,167866,167868,167870],{"class":103,"line":1181},[101,167847,148365],{"class":111},[101,167849,62668],{"class":216},[101,167851,51426],{"class":111},[101,167853,159711],{"class":216},[101,167855,12423],{"class":111},[101,167857,69113],{"class":216},[101,167859,51426],{"class":111},[101,167861,786],{"class":160},[101,167863,12423],{"class":111},[101,167865,151452],{"class":216},[101,167867,51426],{"class":111},[101,167869,993],{"class":160},[101,167871,4917],{"class":111},[101,167873,167874],{"class":103,"line":1187},[101,167875,33235],{"class":111},[101,167877,167878],{"class":103,"line":1201},[101,167879,2387],{"emptyLinePlaceholder":27},[101,167881,167882],{"class":103,"line":1207},[101,167883,2387],{"emptyLinePlaceholder":27},[101,167885,167886,167888,167891],{"class":103,"line":1298},[101,167887,31936],{"class":107},[101,167889,167890],{"class":1950}," filter_students",[101,167892,167893],{"class":111},"(students, condition):\n",[101,167895,167896,167898,167900],{"class":103,"line":1304},[101,167897,161203],{"class":111},[101,167899,157],{"class":107},[101,167901,51827],{"class":111},[101,167903,167904,167906,167908,167910],{"class":103,"line":1316},[101,167905,3188],{"class":107},[101,167907,152117],{"class":111},[101,167909,26032],{"class":107},[101,167911,152122],{"class":111},[101,167913,167914,167916],{"class":103,"line":1599},[101,167915,2484],{"class":107},[101,167917,167918],{"class":111}," condition(student):\n",[101,167920,167921],{"class":103,"line":1604},[101,167922,167923],{"class":111},"            result.append(student)\n",[101,167925,167926,167928],{"class":103,"line":1610},[101,167927,4077],{"class":107},[101,167929,167685],{"class":111},[101,167931,167932],{"class":103,"line":1615},[101,167933,2387],{"emptyLinePlaceholder":27},[101,167935,167936],{"class":103,"line":1629},[101,167937,2387],{"emptyLinePlaceholder":27},[101,167939,167940,167942,167944,167947,167949,167952,167954,167956,167958,167960],{"class":103,"line":1634},[101,167941,165681],{"class":111},[101,167943,157],{"class":107},[101,167945,167946],{"class":111}," filter_students(students, ",[101,167948,166866],{"class":107},[101,167950,167951],{"class":111}," s: s[",[101,167953,151452],{"class":216},[101,167955,4430],{"class":111},[101,167957,1697],{"class":107},[101,167959,157817],{"class":160},[101,167961,118],{"class":111},[101,167963,167964,167967,167969,167971,167973,167975,167977,167979,167981,167983],{"class":103,"line":1640},[101,167965,167966],{"class":111},"excellent ",[101,167968,157],{"class":107},[101,167970,167946],{"class":111},[101,167972,166866],{"class":107},[101,167974,167951],{"class":111},[101,167976,151452],{"class":216},[101,167978,4430],{"class":111},[101,167980,1697],{"class":107},[101,167982,157768],{"class":160},[101,167984,118],{"class":111},[101,167986,167987,167990,167992,167994,167996,167998,168000,168002,168004,168006],{"class":103,"line":1661},[101,167988,167989],{"class":111},"under_age ",[101,167991,157],{"class":107},[101,167993,167946],{"class":111},[101,167995,166866],{"class":107},[101,167997,167951],{"class":111},[101,167999,69113],{"class":216},[101,168001,4430],{"class":111},[101,168003,1021],{"class":107},[101,168005,156265],{"class":160},[101,168007,118],{"class":111},[101,168009,168010],{"class":103,"line":1666},[101,168011,2387],{"emptyLinePlaceholder":27},[101,168013,168014,168016],{"class":103,"line":1680},[101,168015,30404],{"class":160},[101,168017,168018],{"class":111},"(passed)\n",[101,168020,168021,168023],{"class":103,"line":1685},[101,168022,30404],{"class":160},[101,168024,168025],{"class":111},"(excellent)\n",[101,168027,168028,168030],{"class":103,"line":1714},[101,168029,30404],{"class":160},[101,168031,168032],{"class":111},"(under_age)\n",[43,168034,168036],{"id":168035},"_715-易错点","7.15 易错点",[55,168038,168039,168042,168050,168055,168066],{},[58,168040,168041],{},"默认参数不要写可变对象。",[58,168043,168044,168046,168047,168049],{},[98,168045,166512],{}," 是元组，",[98,168048,166627],{}," 是字典。",[58,168051,168052,168054],{},[98,168053,166866],{}," 只适合简单表达式。",[58,168056,168057,100998,168059,168061,168062,168065],{},[98,168058,74033],{},[98,168060,80040],{}," 的结果是迭代器，常用 ",[98,168063,168064],{},"list()"," 转换查看。",[58,168067,168068],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[43,168070,168072],{"id":168071},"_716-本章练习","7.16 本章练习",[55,168074,168075,168082,168088,168093,168098],{},[58,168076,168077,168078,168081],{},"写函数 ",[98,168079,168080],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[58,168083,168077,168084,168087],{},[98,168085,168086],{},"print_user(**kwargs)","，输出用户所有字段。",[58,168089,104346,168090,168092],{},[98,168091,166866],{}," 对学生列表按年龄排序。",[58,168094,104346,168095,168097],{},[98,168096,80040],{}," 找出成绩不及格的学生。",[58,168099,168100],{},"写一个装饰器，统计函数执行前后的提示信息。",[5114,168102,168103],{},"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":20,"searchDepth":21,"depth":21,"links":168105},[168106,168107,168108,168109,168110,168111,168115,168116,168117,168118,168123,168124,168125,168126,168127,168128],{"id":165964,"depth":21,"text":165965},{"id":166078,"depth":21,"text":166079},{"id":166167,"depth":21,"text":166168},{"id":166229,"depth":21,"text":166230},{"id":166375,"depth":21,"text":166376},{"id":166502,"depth":21,"text":166503,"children":168112},[168113,168114],{"id":166506,"depth":1166,"text":166507},{"id":166621,"depth":1166,"text":166622},{"id":166702,"depth":21,"text":166703},{"id":166860,"depth":21,"text":166861},{"id":167028,"depth":21,"text":167029},{"id":167110,"depth":21,"text":167111,"children":168119},[168120,168121,168122],{"id":167114,"depth":1166,"text":167115},{"id":167185,"depth":1166,"text":167186},{"id":167262,"depth":1166,"text":167263},{"id":167387,"depth":21,"text":167388},{"id":167477,"depth":21,"text":167478},{"id":167608,"depth":21,"text":167609},{"id":167758,"depth":21,"text":167759},{"id":168035,"depth":21,"text":168036},{"id":168071,"depth":21,"text":168072},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165956,"description":23365},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168135,"title":168136,"body":168137,"description":23365,"extension":24,"meta":170656,"navigation":27,"path":170657,"seo":170658,"stem":170659,"__hash__":170660},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168138,"toc":170631},[168139,168142,168146,168149,168152,168183,168187,168191,168194,168221,168225,168228,168279,168282,168297,168300,168335,168339,168341,168365,168368,168428,168432,168436,168439,168496,168499,168519,168523,168526,168589,168593,168596,168652,168659,168683,168687,168690,168753,168757,168762,168813,168816,168820,168825,168892,168895,168977,168981,168986,169037,169040,169044,169047,169050,169058,169061,169107,169110,169156,169160,169166,169210,169213,169259,169262,169302,169305,169366,169370,169373,169463,169466,169608,169611,169678,169682,169685,169688,169829,169832,169910,169913,170089,170093,170095,170106,170108,170307,170311,170555,170559,170593,170597,170628],[39,168140,168136],{"id":168141},"_8-文件操作",[43,168143,168145],{"id":168144},"_81-文件操作的意义","8.1 文件操作的意义",[10,168147,168148],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[10,168150,168151],{},"常见文件类型：",[55,168153,168154,168160,168166,168172,168178],{},[58,168155,168156,168159],{},[98,168157,168158],{},".txt","：普通文本。",[58,168161,168162,168165],{},[98,168163,168164],{},".csv","：表格文本。",[58,168167,168168,168171],{},[98,168169,168170],{},".json","：结构化数据。",[58,168173,168174,168177],{},[98,168175,168176],{},".log","：日志文件。",[58,168179,168180,168182],{},[98,168181,146332],{},"：Python 源代码。",[43,168184,168186],{"id":168185},"_82-路径","8.2 路径",[72,168188,168190],{"id":168189},"_821-相对路径","8.2.1 相对路径",[10,168192,168193],{},"相对当前运行目录：",[92,168195,168197],{"className":30367,"code":168196,"language":30369,"meta":20,"style":20},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[98,168198,168199],{"__ignoreMap":20},[101,168200,168201,168203,168205,168207,168209,168211,168213,168215,168217,168219],{"class":103,"line":104},[101,168202,86904],{"class":160},[101,168204,112],{"class":111},[101,168206,146776],{"class":216},[101,168208,12423],{"class":111},[101,168210,146781],{"class":216},[101,168212,12423],{"class":111},[101,168214,146786],{"class":5204},[101,168216,157],{"class":107},[101,168218,146791],{"class":216},[101,168220,118],{"class":111},[72,168222,168224],{"id":168223},"_822-绝对路径","8.2.2 绝对路径",[10,168226,168227],{},"从根目录或盘符开始：",[92,168229,168231],{"className":30367,"code":168230,"language":30369,"meta":20,"style":20},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[98,168232,168233,168256],{"__ignoreMap":20},[101,168234,168235,168237,168239,168242,168244,168246,168248,168250,168252,168254],{"class":103,"line":104},[101,168236,86904],{"class":160},[101,168238,112],{"class":111},[101,168240,168241],{"class":216},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[101,168243,12423],{"class":111},[101,168245,146781],{"class":216},[101,168247,12423],{"class":111},[101,168249,146786],{"class":5204},[101,168251,157],{"class":107},[101,168253,146791],{"class":216},[101,168255,118],{"class":111},[101,168257,168258,168260,168262,168265,168267,168269,168271,168273,168275,168277],{"class":103,"line":21},[101,168259,86904],{"class":160},[101,168261,112],{"class":111},[101,168263,168264],{"class":216},"\"D:\u002Fdata\u002Fdata.txt\"",[101,168266,12423],{"class":111},[101,168268,146781],{"class":216},[101,168270,12423],{"class":111},[101,168272,146786],{"class":5204},[101,168274,157],{"class":107},[101,168276,146791],{"class":216},[101,168278,118],{"class":111},[10,168280,168281],{},"Windows 路径建议写成：",[92,168283,168285],{"className":30367,"code":168284,"language":30369,"meta":20,"style":20},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[98,168286,168287],{"__ignoreMap":20},[101,168288,168289,168292,168294],{"class":103,"line":104},[101,168290,168291],{"class":111},"path ",[101,168293,157],{"class":107},[101,168295,168296],{"class":216}," \"D:\u002Fdata\u002Fdata.txt\"\n",[10,168298,168299],{},"或原始字符串：",[92,168301,168303],{"className":30367,"code":168302,"language":30369,"meta":20,"style":20},"path = r\"D:\\data\\data.txt\"\n",[98,168304,168305],{"__ignoreMap":20},[101,168306,168307,168309,168311,168313,168315,168318,168321,168324,168326,168328,168330,168333],{"class":103,"line":104},[101,168308,168291],{"class":111},[101,168310,157],{"class":107},[101,168312,17109],{"class":107},[101,168314,362],{"class":216},[101,168316,168317],{"class":47966},"D:",[101,168319,168320],{"class":160},"\\d",[101,168322,168323],{"class":47966},"ata",[101,168325,168320],{"class":160},[101,168327,168323],{"class":47966},[101,168329,669],{"class":160},[101,168331,168332],{"class":47966},"txt",[101,168334,25122],{"class":216},[43,168336,168338],{"id":168337},"_83-open函数","8.3 open函数",[10,168340,5169],{},[92,168342,168344],{"className":30367,"code":168343,"language":30369,"meta":20,"style":20},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[98,168345,168346],{"__ignoreMap":20},[101,168347,168348,168350,168352,168354,168357,168359,168361,168363],{"class":103,"line":104},[101,168349,45343],{"class":5204},[101,168351,13552],{"class":107},[101,168353,146771],{"class":160},[101,168355,168356],{"class":111},"(文件路径, 打开模式, ",[101,168358,146786],{"class":5204},[101,168360,157],{"class":107},[101,168362,146791],{"class":216},[101,168364,118],{"class":111},[10,168366,168367],{},"常见模式：",[249,168369,168370,168379],{},[252,168371,168372],{},[255,168373,168374,168377],{},[258,168375,168376],{},"模式",[258,168378,25858],{},[296,168380,168381,168390,168399,168408,168418],{},[255,168382,168383,168387],{},[301,168384,168385],{},[98,168386,781],{},[301,168388,168389],{},"只读，文件不存在会报错",[255,168391,168392,168396],{},[301,168393,168394],{},[98,168395,906],{},[301,168397,168398],{},"只写，文件不存在会创建，存在会清空",[255,168400,168401,168405],{},[301,168402,168403],{},[98,168404,14],{},[301,168406,168407],{},"追加，文件不存在会创建",[255,168409,168410,168415],{},[301,168411,168412],{},[98,168413,168414],{},"rb",[301,168416,168417],{},"二进制只读",[255,168419,168420,168425],{},[301,168421,168422],{},[98,168423,168424],{},"wb",[301,168426,168427],{},"二进制只写",[43,168429,168431],{"id":168430},"_84-读取文件","8.4 读取文件",[72,168433,168435],{"id":168434},"_841-read","8.4.1 read",[10,168437,168438],{},"一次读取全部内容：",[92,168440,168442],{"className":30367,"code":168441,"language":30369,"meta":20,"style":20},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[98,168443,168444,168470,168482,168489],{"__ignoreMap":20},[101,168445,168446,168448,168450,168452,168454,168456,168458,168460,168462,168464,168466,168468],{"class":103,"line":104},[101,168447,45343],{"class":5204},[101,168449,13552],{"class":107},[101,168451,146771],{"class":160},[101,168453,112],{"class":111},[101,168455,146776],{"class":216},[101,168457,12423],{"class":111},[101,168459,146781],{"class":216},[101,168461,12423],{"class":111},[101,168463,146786],{"class":5204},[101,168465,157],{"class":107},[101,168467,146791],{"class":216},[101,168469,118],{"class":111},[101,168471,168472,168475,168477,168479],{"class":103,"line":21},[101,168473,168474],{"class":111},"content ",[101,168476,157],{"class":107},[101,168478,148133],{"class":5204},[101,168480,168481],{"class":111},".read()\n",[101,168483,168484,168486],{"class":103,"line":1166},[101,168485,30404],{"class":160},[101,168487,168488],{"class":111},"(content)\n",[101,168490,168491,168493],{"class":103,"line":1181},[101,168492,45343],{"class":5204},[101,168494,168495],{"class":111},".close()\n",[10,168497,168498],{},"可以指定读取字符数：",[92,168500,168502],{"className":30367,"code":168501,"language":30369,"meta":20,"style":20},"content = file.read(10)\n",[98,168503,168504],{"__ignoreMap":20},[101,168505,168506,168508,168510,168512,168515,168517],{"class":103,"line":104},[101,168507,168474],{"class":111},[101,168509,157],{"class":107},[101,168511,148133],{"class":5204},[101,168513,168514],{"class":111},".read(",[101,168516,557],{"class":160},[101,168518,118],{"class":111},[72,168520,168522],{"id":168521},"_842-readline","8.4.2 readline",[10,168524,168525],{},"一次读取一行：",[92,168527,168529],{"className":30367,"code":168528,"language":30369,"meta":20,"style":20},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[98,168530,168531,168557,168561,168572,168579,168583],{"__ignoreMap":20},[101,168532,168533,168535,168537,168539,168541,168543,168545,168547,168549,168551,168553,168555],{"class":103,"line":104},[101,168534,45343],{"class":5204},[101,168536,13552],{"class":107},[101,168538,146771],{"class":160},[101,168540,112],{"class":111},[101,168542,146776],{"class":216},[101,168544,12423],{"class":111},[101,168546,146781],{"class":216},[101,168548,12423],{"class":111},[101,168550,146786],{"class":5204},[101,168552,157],{"class":107},[101,168554,146791],{"class":216},[101,168556,118],{"class":111},[101,168558,168559],{"class":103,"line":21},[101,168560,2387],{"emptyLinePlaceholder":27},[101,168562,168563,168565,168567,168569],{"class":103,"line":1166},[101,168564,147232],{"class":111},[101,168566,157],{"class":107},[101,168568,148133],{"class":5204},[101,168570,168571],{"class":111},".readline()\n",[101,168573,168574,168576],{"class":103,"line":1181},[101,168575,30404],{"class":160},[101,168577,168578],{"class":111},"(line)\n",[101,168580,168581],{"class":103,"line":1187},[101,168582,2387],{"emptyLinePlaceholder":27},[101,168584,168585,168587],{"class":103,"line":1201},[101,168586,45343],{"class":5204},[101,168588,168495],{"class":111},[72,168590,168592],{"id":168591},"_843-readlines","8.4.3 readlines",[10,168594,168595],{},"读取所有行，返回列表：",[92,168597,168599],{"className":30367,"code":168598,"language":30369,"meta":20,"style":20},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[98,168600,168601,168627,168639,168646],{"__ignoreMap":20},[101,168602,168603,168605,168607,168609,168611,168613,168615,168617,168619,168621,168623,168625],{"class":103,"line":104},[101,168604,45343],{"class":5204},[101,168606,13552],{"class":107},[101,168608,146771],{"class":160},[101,168610,112],{"class":111},[101,168612,146776],{"class":216},[101,168614,12423],{"class":111},[101,168616,146781],{"class":216},[101,168618,12423],{"class":111},[101,168620,146786],{"class":5204},[101,168622,157],{"class":107},[101,168624,146791],{"class":216},[101,168626,118],{"class":111},[101,168628,168629,168632,168634,168636],{"class":103,"line":21},[101,168630,168631],{"class":111},"lines ",[101,168633,157],{"class":107},[101,168635,148133],{"class":5204},[101,168637,168638],{"class":111},".readlines()\n",[101,168640,168641,168643],{"class":103,"line":1166},[101,168642,30404],{"class":160},[101,168644,168645],{"class":111},"(lines)\n",[101,168647,168648,168650],{"class":103,"line":1181},[101,168649,45343],{"class":5204},[101,168651,168495],{"class":111},[10,168653,168654,168655,168658],{},"每一行通常带有换行符，可以用 ",[98,168656,168657],{},"strip()"," 去掉：",[92,168660,168662],{"className":30367,"code":168661,"language":30369,"meta":20,"style":20},"for line in lines:\n    print(line.strip())\n",[98,168663,168664,168676],{"__ignoreMap":20},[101,168665,168666,168668,168671,168673],{"class":103,"line":104},[101,168667,3012],{"class":107},[101,168669,168670],{"class":111}," line ",[101,168672,26032],{"class":107},[101,168674,168675],{"class":111}," lines:\n",[101,168677,168678,168680],{"class":103,"line":21},[101,168679,31288],{"class":160},[101,168681,168682],{"class":111},"(line.strip())\n",[72,168684,168686],{"id":168685},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[10,168688,168689],{},"推荐读取大文件时使用：",[92,168691,168693],{"className":30367,"code":168692,"language":30369,"meta":20,"style":20},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[98,168694,168695,168721,168725,168737,168743,168747],{"__ignoreMap":20},[101,168696,168697,168699,168701,168703,168705,168707,168709,168711,168713,168715,168717,168719],{"class":103,"line":104},[101,168698,45343],{"class":5204},[101,168700,13552],{"class":107},[101,168702,146771],{"class":160},[101,168704,112],{"class":111},[101,168706,146776],{"class":216},[101,168708,12423],{"class":111},[101,168710,146781],{"class":216},[101,168712,12423],{"class":111},[101,168714,146786],{"class":5204},[101,168716,157],{"class":107},[101,168718,146791],{"class":216},[101,168720,118],{"class":111},[101,168722,168723],{"class":103,"line":21},[101,168724,2387],{"emptyLinePlaceholder":27},[101,168726,168727,168729,168731,168733,168735],{"class":103,"line":1166},[101,168728,3012],{"class":107},[101,168730,168670],{"class":111},[101,168732,26032],{"class":107},[101,168734,148133],{"class":5204},[101,168736,3726],{"class":111},[101,168738,168739,168741],{"class":103,"line":1181},[101,168740,31288],{"class":160},[101,168742,168682],{"class":111},[101,168744,168745],{"class":103,"line":1187},[101,168746,2387],{"emptyLinePlaceholder":27},[101,168748,168749,168751],{"class":103,"line":1201},[101,168750,45343],{"class":5204},[101,168752,168495],{"class":111},[43,168754,168756],{"id":168755},"_85-with语句","8.5 with语句",[10,168758,168759,168761],{},[98,168760,107813],{}," 会自动关闭文件，推荐使用。",[92,168763,168765],{"className":30367,"code":168764,"language":30369,"meta":20,"style":20},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[98,168766,168767,168797,168807],{"__ignoreMap":20},[101,168768,168769,168771,168773,168775,168777,168779,168781,168783,168785,168787,168789,168791,168793,168795],{"class":103,"line":104},[101,168770,107813],{"class":107},[101,168772,146771],{"class":160},[101,168774,112],{"class":111},[101,168776,146776],{"class":216},[101,168778,12423],{"class":111},[101,168780,146781],{"class":216},[101,168782,12423],{"class":111},[101,168784,146786],{"class":5204},[101,168786,157],{"class":107},[101,168788,146791],{"class":216},[101,168790,13702],{"class":111},[101,168792,31372],{"class":107},[101,168794,148133],{"class":5204},[101,168796,3726],{"class":111},[101,168798,168799,168801,168803,168805],{"class":103,"line":21},[101,168800,146803],{"class":111},[101,168802,157],{"class":107},[101,168804,148133],{"class":5204},[101,168806,168481],{"class":111},[101,168808,168809,168811],{"class":103,"line":1166},[101,168810,31288],{"class":160},[101,168812,168488],{"class":111},[10,168814,168815],{},"等价于打开文件、读取、最后关闭，但更安全。",[43,168817,168819],{"id":168818},"_86-写入文件","8.6 写入文件",[10,168821,168822,168824],{},[98,168823,906],{}," 模式会清空原文件。",[92,168826,168828],{"className":30367,"code":168827,"language":30369,"meta":20,"style":20},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[98,168829,168830,168860,168877],{"__ignoreMap":20},[101,168831,168832,168834,168836,168838,168840,168842,168844,168846,168848,168850,168852,168854,168856,168858],{"class":103,"line":104},[101,168833,107813],{"class":107},[101,168835,146771],{"class":160},[101,168837,112],{"class":111},[101,168839,146776],{"class":216},[101,168841,12423],{"class":111},[101,168843,151956],{"class":216},[101,168845,12423],{"class":111},[101,168847,146786],{"class":5204},[101,168849,157],{"class":107},[101,168851,146791],{"class":216},[101,168853,13702],{"class":111},[101,168855,31372],{"class":107},[101,168857,148133],{"class":5204},[101,168859,3726],{"class":111},[101,168861,168862,168865,168868,168871,168873,168875],{"class":103,"line":21},[101,168863,168864],{"class":5204},"    file",[101,168866,168867],{"class":111},".write(",[101,168869,168870],{"class":216},"\"hello",[101,168872,156505],{"class":160},[101,168874,362],{"class":216},[101,168876,118],{"class":111},[101,168878,168879,168881,168883,168886,168888,168890],{"class":103,"line":1166},[101,168880,168864],{"class":5204},[101,168882,168867],{"class":111},[101,168884,168885],{"class":216},"\"python",[101,168887,156505],{"class":160},[101,168889,362],{"class":216},[101,168891,118],{"class":111},[10,168893,168894],{},"写入多行：",[92,168896,168898],{"className":30367,"code":168897,"language":30369,"meta":20,"style":20},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[98,168899,168900,168935,168939,168970],{"__ignoreMap":20},[101,168901,168902,168904,168906,168908,168911,168913,168915,168917,168920,168922,168924,168926,168929,168931,168933],{"class":103,"line":104},[101,168903,168631],{"class":111},[101,168905,157],{"class":107},[101,168907,52215],{"class":111},[101,168909,168910],{"class":216},"\"小明,18",[101,168912,156505],{"class":160},[101,168914,362],{"class":216},[101,168916,12423],{"class":111},[101,168918,168919],{"class":216},"\"小红,17",[101,168921,156505],{"class":160},[101,168923,362],{"class":216},[101,168925,12423],{"class":111},[101,168927,168928],{"class":216},"\"小刚,19",[101,168930,156505],{"class":160},[101,168932,362],{"class":216},[101,168934,33235],{"class":111},[101,168936,168937],{"class":103,"line":21},[101,168938,2387],{"emptyLinePlaceholder":27},[101,168940,168941,168943,168945,168947,168950,168952,168954,168956,168958,168960,168962,168964,168966,168968],{"class":103,"line":1166},[101,168942,107813],{"class":107},[101,168944,146771],{"class":160},[101,168946,112],{"class":111},[101,168948,168949],{"class":216},"\"students.txt\"",[101,168951,12423],{"class":111},[101,168953,151956],{"class":216},[101,168955,12423],{"class":111},[101,168957,146786],{"class":5204},[101,168959,157],{"class":107},[101,168961,146791],{"class":216},[101,168963,13702],{"class":111},[101,168965,31372],{"class":107},[101,168967,148133],{"class":5204},[101,168969,3726],{"class":111},[101,168971,168972,168974],{"class":103,"line":1181},[101,168973,168864],{"class":5204},[101,168975,168976],{"class":111},".writelines(lines)\n",[43,168978,168980],{"id":168979},"_87-追加文件","8.7 追加文件",[10,168982,168983,168985],{},[98,168984,14],{}," 模式不会清空原内容，而是在末尾追加。",[92,168987,168989],{"className":30367,"code":168988,"language":30369,"meta":20,"style":20},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[98,168990,168991,169022],{"__ignoreMap":20},[101,168992,168993,168995,168997,168999,169002,169004,169006,169008,169010,169012,169014,169016,169018,169020],{"class":103,"line":104},[101,168994,107813],{"class":107},[101,168996,146771],{"class":160},[101,168998,112],{"class":111},[101,169000,169001],{"class":216},"\"log.txt\"",[101,169003,12423],{"class":111},[101,169005,165305],{"class":216},[101,169007,12423],{"class":111},[101,169009,146786],{"class":5204},[101,169011,157],{"class":107},[101,169013,146791],{"class":216},[101,169015,13702],{"class":111},[101,169017,31372],{"class":107},[101,169019,148133],{"class":5204},[101,169021,3726],{"class":111},[101,169023,169024,169026,169028,169031,169033,169035],{"class":103,"line":21},[101,169025,168864],{"class":5204},[101,169027,168867],{"class":111},[101,169029,169030],{"class":216},"\"程序启动",[101,169032,156505],{"class":160},[101,169034,362],{"class":216},[101,169036,118],{"class":111},[10,169038,169039],{},"日志类文件常用追加模式。",[43,169041,169043],{"id":169042},"_88-文件编码","8.8 文件编码",[10,169045,169046],{},"编码决定文字如何保存为字节。",[10,169048,169049],{},"常见编码：",[55,169051,169052,169055],{},[58,169053,169054],{},"UTF-8：推荐。",[58,169056,169057],{},"GBK：部分 Windows 中文文件常见。",[10,169059,169060],{},"读取文件乱码时，可以尝试：",[92,169062,169064],{"className":30367,"code":169063,"language":30369,"meta":20,"style":20},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[98,169065,169066,169097],{"__ignoreMap":20},[101,169067,169068,169070,169072,169074,169076,169078,169080,169082,169084,169086,169089,169091,169093,169095],{"class":103,"line":104},[101,169069,107813],{"class":107},[101,169071,146771],{"class":160},[101,169073,112],{"class":111},[101,169075,146776],{"class":216},[101,169077,12423],{"class":111},[101,169079,146781],{"class":216},[101,169081,12423],{"class":111},[101,169083,146786],{"class":5204},[101,169085,157],{"class":107},[101,169087,169088],{"class":216},"\"gbk\"",[101,169090,13702],{"class":111},[101,169092,31372],{"class":107},[101,169094,148133],{"class":5204},[101,169096,3726],{"class":111},[101,169098,169099,169101,169103,169105],{"class":103,"line":21},[101,169100,146803],{"class":111},[101,169102,157],{"class":107},[101,169104,148133],{"class":5204},[101,169106,168481],{"class":111},[10,169108,169109],{},"写文件时建议统一 UTF-8：",[92,169111,169113],{"className":30367,"code":169112,"language":30369,"meta":20,"style":20},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[98,169114,169115,169145],{"__ignoreMap":20},[101,169116,169117,169119,169121,169123,169125,169127,169129,169131,169133,169135,169137,169139,169141,169143],{"class":103,"line":104},[101,169118,107813],{"class":107},[101,169120,146771],{"class":160},[101,169122,112],{"class":111},[101,169124,146776],{"class":216},[101,169126,12423],{"class":111},[101,169128,151956],{"class":216},[101,169130,12423],{"class":111},[101,169132,146786],{"class":5204},[101,169134,157],{"class":107},[101,169136,146791],{"class":216},[101,169138,13702],{"class":111},[101,169140,31372],{"class":107},[101,169142,148133],{"class":5204},[101,169144,3726],{"class":111},[101,169146,169147,169149,169151,169154],{"class":103,"line":21},[101,169148,168864],{"class":5204},[101,169150,168867],{"class":111},[101,169152,169153],{"class":216},"\"中文内容\"",[101,169155,118],{"class":111},[43,169157,169159],{"id":169158},"_89-pathlib","8.9 pathlib",[10,169161,169162,169165],{},[98,169163,169164],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[92,169167,169169],{"className":30367,"code":169168,"language":30369,"meta":20,"style":20},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[98,169170,169171,169181,169185,169203],{"__ignoreMap":20},[101,169172,169173,169175,169177,169179],{"class":103,"line":104},[101,169174,30726],{"class":107},[101,169176,108291],{"class":111},[101,169178,30381],{"class":107},[101,169180,108296],{"class":111},[101,169182,169183],{"class":103,"line":21},[101,169184,2387],{"emptyLinePlaceholder":27},[101,169186,169187,169189,169191,169193,169196,169198,169200],{"class":103,"line":1166},[101,169188,168291],{"class":111},[101,169190,157],{"class":107},[101,169192,108525],{"class":111},[101,169194,169195],{"class":216},"\"data\"",[101,169197,13702],{"class":111},[101,169199,695],{"class":107},[101,169201,169202],{"class":216}," \"students.txt\"\n",[101,169204,169205,169207],{"class":103,"line":1181},[101,169206,30404],{"class":160},[101,169208,169209],{"class":111},"(path)\n",[10,169211,169212],{},"创建目录：",[92,169214,169216],{"className":30367,"code":169215,"language":30369,"meta":20,"style":20},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[98,169217,169218,169228,169232,169245],{"__ignoreMap":20},[101,169219,169220,169222,169224,169226],{"class":103,"line":104},[101,169221,30726],{"class":107},[101,169223,108291],{"class":111},[101,169225,30381],{"class":107},[101,169227,108296],{"class":111},[101,169229,169230],{"class":103,"line":21},[101,169231,2387],{"emptyLinePlaceholder":27},[101,169233,169234,169237,169239,169241,169243],{"class":103,"line":1166},[101,169235,169236],{"class":111},"data_dir ",[101,169238,157],{"class":107},[101,169240,108525],{"class":111},[101,169242,169195],{"class":216},[101,169244,118],{"class":111},[101,169246,169247,169250,169253,169255,169257],{"class":103,"line":1181},[101,169248,169249],{"class":111},"data_dir.mkdir(",[101,169251,169252],{"class":5204},"exist_ok",[101,169254,157],{"class":107},[101,169256,31465],{"class":160},[101,169258,118],{"class":111},[10,169260,169261],{},"判断文件是否存在：",[92,169263,169265],{"className":30367,"code":169264,"language":30369,"meta":20,"style":20},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[98,169266,169267,169280,169284,169291],{"__ignoreMap":20},[101,169268,169269,169271,169273,169275,169278],{"class":103,"line":104},[101,169270,168291],{"class":111},[101,169272,157],{"class":107},[101,169274,108525],{"class":111},[101,169276,169277],{"class":216},"\"data\u002Fstudents.txt\"",[101,169279,118],{"class":111},[101,169281,169282],{"class":103,"line":21},[101,169283,2387],{"emptyLinePlaceholder":27},[101,169285,169286,169288],{"class":103,"line":1166},[101,169287,1518],{"class":107},[101,169289,169290],{"class":111}," path.exists():\n",[101,169292,169293,169295,169297,169300],{"class":103,"line":1181},[101,169294,31288],{"class":160},[101,169296,112],{"class":111},[101,169298,169299],{"class":216},"\"文件存在\"",[101,169301,118],{"class":111},[10,169303,169304],{},"读写文本：",[92,169306,169308],{"className":30367,"code":169307,"language":30369,"meta":20,"style":20},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[98,169309,169310,169322,169326,169343,169360],{"__ignoreMap":20},[101,169311,169312,169314,169316,169318,169320],{"class":103,"line":104},[101,169313,168291],{"class":111},[101,169315,157],{"class":107},[101,169317,108525],{"class":111},[101,169319,146776],{"class":216},[101,169321,118],{"class":111},[101,169323,169324],{"class":103,"line":21},[101,169325,2387],{"emptyLinePlaceholder":27},[101,169327,169328,169331,169333,169335,169337,169339,169341],{"class":103,"line":1166},[101,169329,169330],{"class":111},"path.write_text(",[101,169332,145856],{"class":216},[101,169334,12423],{"class":111},[101,169336,146786],{"class":5204},[101,169338,157],{"class":107},[101,169340,146791],{"class":216},[101,169342,118],{"class":111},[101,169344,169345,169347,169349,169352,169354,169356,169358],{"class":103,"line":1181},[101,169346,168474],{"class":111},[101,169348,157],{"class":107},[101,169350,169351],{"class":111}," path.read_text(",[101,169353,146786],{"class":5204},[101,169355,157],{"class":107},[101,169357,146791],{"class":216},[101,169359,118],{"class":111},[101,169361,169362,169364],{"class":103,"line":1187},[101,169363,30404],{"class":160},[101,169365,168488],{"class":111},[43,169367,169369],{"id":169368},"_810-json文件","8.10 JSON文件",[10,169371,169372],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[92,169374,169376],{"className":30367,"code":169375,"language":30369,"meta":20,"style":20},"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",[98,169377,169378,169384,169388,169396,169406,169416,169424,169428,169432,169457],{"__ignoreMap":20},[101,169379,169380,169382],{"class":103,"line":104},[101,169381,30381],{"class":107},[101,169383,147071],{"class":111},[101,169385,169386],{"class":103,"line":21},[101,169387,2387],{"emptyLinePlaceholder":27},[101,169389,169390,169392,169394],{"class":103,"line":1166},[101,169391,149461],{"class":111},[101,169393,157],{"class":107},[101,169395,15560],{"class":111},[101,169397,169398,169400,169402,169404],{"class":103,"line":1181},[101,169399,147000],{"class":216},[101,169401,51426],{"class":111},[101,169403,149868],{"class":216},[101,169405,31455],{"class":111},[101,169407,169408,169410,169412,169414],{"class":103,"line":1187},[101,169409,164517],{"class":216},[101,169411,51426],{"class":111},[101,169413,761],{"class":160},[101,169415,31455],{"class":111},[101,169417,169418,169420,169422],{"class":103,"line":1201},[101,169419,164528],{"class":216},[101,169421,51426],{"class":111},[101,169423,164533],{"class":160},[101,169425,169426],{"class":103,"line":1207},[101,169427,1552],{"class":111},[101,169429,169430],{"class":103,"line":1298},[101,169431,2387],{"emptyLinePlaceholder":27},[101,169433,169434,169436,169438,169441,169443,169445,169447,169449,169451,169453,169455],{"class":103,"line":1304},[101,169435,156424],{"class":111},[101,169437,157],{"class":107},[101,169439,169440],{"class":111}," json.dumps(student, ",[101,169442,147117],{"class":5204},[101,169444,157],{"class":107},[101,169446,33976],{"class":160},[101,169448,12423],{"class":111},[101,169450,151992],{"class":5204},[101,169452,157],{"class":107},[101,169454,189],{"class":160},[101,169456,118],{"class":111},[101,169458,169459,169461],{"class":103,"line":1316},[101,169460,30404],{"class":160},[101,169462,164051],{"class":111},[10,169464,169465],{},"写入 JSON 文件：",[92,169467,169469],{"className":30367,"code":169468,"language":30369,"meta":20,"style":20},"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",[98,169470,169471,169477,169481,169489,169517,169545,169549,169553,169583],{"__ignoreMap":20},[101,169472,169473,169475],{"class":103,"line":104},[101,169474,30381],{"class":107},[101,169476,147071],{"class":111},[101,169478,169479],{"class":103,"line":21},[101,169480,2387],{"emptyLinePlaceholder":27},[101,169482,169483,169485,169487],{"class":103,"line":1166},[101,169484,159696],{"class":111},[101,169486,157],{"class":107},[101,169488,55436],{"class":111},[101,169490,169491,169493,169495,169497,169499,169501,169503,169505,169507,169509,169511,169513,169515],{"class":103,"line":1181},[101,169492,148365],{"class":111},[101,169494,62668],{"class":216},[101,169496,51426],{"class":111},[101,169498,149868],{"class":216},[101,169500,12423],{"class":111},[101,169502,69113],{"class":216},[101,169504,51426],{"class":111},[101,169506,761],{"class":160},[101,169508,12423],{"class":111},[101,169510,151452],{"class":216},[101,169512,51426],{"class":111},[101,169514,1100],{"class":160},[101,169516,4917],{"class":111},[101,169518,169519,169521,169523,169525,169527,169529,169531,169533,169535,169537,169539,169541,169543],{"class":103,"line":1187},[101,169520,148365],{"class":111},[101,169522,62668],{"class":216},[101,169524,51426],{"class":111},[101,169526,150916],{"class":216},[101,169528,12423],{"class":111},[101,169530,69113],{"class":216},[101,169532,51426],{"class":111},[101,169534,736],{"class":160},[101,169536,12423],{"class":111},[101,169538,151452],{"class":216},[101,169540,51426],{"class":111},[101,169542,922],{"class":160},[101,169544,4917],{"class":111},[101,169546,169547],{"class":103,"line":1201},[101,169548,33235],{"class":111},[101,169550,169551],{"class":103,"line":1207},[101,169552,2387],{"emptyLinePlaceholder":27},[101,169554,169555,169557,169559,169561,169563,169565,169567,169569,169571,169573,169575,169577,169579,169581],{"class":103,"line":1298},[101,169556,107813],{"class":107},[101,169558,146771],{"class":160},[101,169560,112],{"class":111},[101,169562,151811],{"class":216},[101,169564,12423],{"class":111},[101,169566,151956],{"class":216},[101,169568,12423],{"class":111},[101,169570,146786],{"class":5204},[101,169572,157],{"class":107},[101,169574,146791],{"class":216},[101,169576,13702],{"class":111},[101,169578,31372],{"class":107},[101,169580,148133],{"class":5204},[101,169582,3726],{"class":111},[101,169584,169585,169588,169590,169592,169594,169596,169598,169600,169602,169604,169606],{"class":103,"line":1304},[101,169586,169587],{"class":111},"    json.dump(students, ",[101,169589,45343],{"class":5204},[101,169591,12423],{"class":111},[101,169593,147117],{"class":5204},[101,169595,157],{"class":107},[101,169597,33976],{"class":160},[101,169599,12423],{"class":111},[101,169601,151992],{"class":5204},[101,169603,157],{"class":107},[101,169605,189],{"class":160},[101,169607,118],{"class":111},[10,169609,169610],{},"读取 JSON 文件：",[92,169612,169614],{"className":30367,"code":169613,"language":30369,"meta":20,"style":20},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[98,169615,169616,169622,169626,169656,169668,169672],{"__ignoreMap":20},[101,169617,169618,169620],{"class":103,"line":104},[101,169619,30381],{"class":107},[101,169621,147071],{"class":111},[101,169623,169624],{"class":103,"line":21},[101,169625,2387],{"emptyLinePlaceholder":27},[101,169627,169628,169630,169632,169634,169636,169638,169640,169642,169644,169646,169648,169650,169652,169654],{"class":103,"line":1166},[101,169629,107813],{"class":107},[101,169631,146771],{"class":160},[101,169633,112],{"class":111},[101,169635,151811],{"class":216},[101,169637,12423],{"class":111},[101,169639,146781],{"class":216},[101,169641,12423],{"class":111},[101,169643,146786],{"class":5204},[101,169645,157],{"class":107},[101,169647,146791],{"class":216},[101,169649,13702],{"class":111},[101,169651,31372],{"class":107},[101,169653,148133],{"class":5204},[101,169655,3726],{"class":111},[101,169657,169658,169660,169662,169664,169666],{"class":103,"line":1181},[101,169659,153017],{"class":111},[101,169661,157],{"class":107},[101,169663,148144],{"class":111},[101,169665,45343],{"class":5204},[101,169667,118],{"class":111},[101,169669,169670],{"class":103,"line":1187},[101,169671,2387],{"emptyLinePlaceholder":27},[101,169673,169674,169676],{"class":103,"line":1201},[101,169675,30404],{"class":160},[101,169677,164975],{"class":111},[43,169679,169681],{"id":169680},"_811-csv文件","8.11 CSV文件",[10,169683,169684],{},"CSV 是逗号分隔值，常用于表格数据。",[10,169686,169687],{},"写入 CSV：",[92,169689,169691],{"className":30367,"code":169690,"language":30369,"meta":20,"style":20},"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",[98,169692,169693,169700,169704,169712,169730,169746,169762,169766,169770,169810,169824],{"__ignoreMap":20},[101,169694,169695,169697],{"class":103,"line":104},[101,169696,30381],{"class":107},[101,169698,169699],{"class":111}," csv\n",[101,169701,169702],{"class":103,"line":21},[101,169703,2387],{"emptyLinePlaceholder":27},[101,169705,169706,169708,169710],{"class":103,"line":1166},[101,169707,159696],{"class":111},[101,169709,157],{"class":107},[101,169711,55436],{"class":111},[101,169713,169714,169717,169719,169721,169723,169725,169728],{"class":103,"line":1181},[101,169715,169716],{"class":111},"    [",[101,169718,73088],{"class":216},[101,169720,12423],{"class":111},[101,169722,73121],{"class":216},[101,169724,12423],{"class":111},[101,169726,169727],{"class":216},"\"成绩\"",[101,169729,87825],{"class":111},[101,169731,169732,169734,169736,169738,169740,169742,169744],{"class":103,"line":1187},[101,169733,169716],{"class":111},[101,169735,149868],{"class":216},[101,169737,12423],{"class":111},[101,169739,761],{"class":160},[101,169741,12423],{"class":111},[101,169743,1100],{"class":160},[101,169745,87825],{"class":111},[101,169747,169748,169750,169752,169754,169756,169758,169760],{"class":103,"line":1201},[101,169749,169716],{"class":111},[101,169751,150916],{"class":216},[101,169753,12423],{"class":111},[101,169755,736],{"class":160},[101,169757,12423],{"class":111},[101,169759,922],{"class":160},[101,169761,87825],{"class":111},[101,169763,169764],{"class":103,"line":1207},[101,169765,33235],{"class":111},[101,169767,169768],{"class":103,"line":1298},[101,169769,2387],{"emptyLinePlaceholder":27},[101,169771,169772,169774,169776,169778,169781,169783,169785,169787,169789,169791,169793,169795,169798,169800,169802,169804,169806,169808],{"class":103,"line":1304},[101,169773,107813],{"class":107},[101,169775,146771],{"class":160},[101,169777,112],{"class":111},[101,169779,169780],{"class":216},"\"students.csv\"",[101,169782,12423],{"class":111},[101,169784,151956],{"class":216},[101,169786,12423],{"class":111},[101,169788,146786],{"class":5204},[101,169790,157],{"class":107},[101,169792,146791],{"class":216},[101,169794,12423],{"class":111},[101,169796,169797],{"class":5204},"newline",[101,169799,157],{"class":107},[101,169801,7640],{"class":216},[101,169803,13702],{"class":111},[101,169805,31372],{"class":107},[101,169807,148133],{"class":5204},[101,169809,3726],{"class":111},[101,169811,169812,169815,169817,169820,169822],{"class":103,"line":1316},[101,169813,169814],{"class":111},"    writer ",[101,169816,157],{"class":107},[101,169818,169819],{"class":111}," csv.writer(",[101,169821,45343],{"class":5204},[101,169823,118],{"class":111},[101,169825,169826],{"class":103,"line":1599},[101,169827,169828],{"class":111},"    writer.writerows(students)\n",[10,169830,169831],{},"读取 CSV：",[92,169833,169835],{"className":30367,"code":169834,"language":30369,"meta":20,"style":20},"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",[98,169836,169837,169843,169847,169877,169891,169903],{"__ignoreMap":20},[101,169838,169839,169841],{"class":103,"line":104},[101,169840,30381],{"class":107},[101,169842,169699],{"class":111},[101,169844,169845],{"class":103,"line":21},[101,169846,2387],{"emptyLinePlaceholder":27},[101,169848,169849,169851,169853,169855,169857,169859,169861,169863,169865,169867,169869,169871,169873,169875],{"class":103,"line":1166},[101,169850,107813],{"class":107},[101,169852,146771],{"class":160},[101,169854,112],{"class":111},[101,169856,169780],{"class":216},[101,169858,12423],{"class":111},[101,169860,146781],{"class":216},[101,169862,12423],{"class":111},[101,169864,146786],{"class":5204},[101,169866,157],{"class":107},[101,169868,146791],{"class":216},[101,169870,13702],{"class":111},[101,169872,31372],{"class":107},[101,169874,148133],{"class":5204},[101,169876,3726],{"class":111},[101,169878,169879,169882,169884,169887,169889],{"class":103,"line":1181},[101,169880,169881],{"class":111},"    reader ",[101,169883,157],{"class":107},[101,169885,169886],{"class":111}," csv.reader(",[101,169888,45343],{"class":5204},[101,169890,118],{"class":111},[101,169892,169893,169895,169898,169900],{"class":103,"line":1187},[101,169894,3188],{"class":107},[101,169896,169897],{"class":111}," row ",[101,169899,26032],{"class":107},[101,169901,169902],{"class":111}," reader:\n",[101,169904,169905,169907],{"class":103,"line":1201},[101,169906,32440],{"class":160},[101,169908,169909],{"class":111},"(row)\n",[10,169911,169912],{},"使用字典写入：",[92,169914,169916],{"className":30367,"code":169915,"language":30369,"meta":20,"style":20},"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",[98,169917,169918,169924,169928,169936,169964,169992,169996,170000,170038,170059,170080,170085],{"__ignoreMap":20},[101,169919,169920,169922],{"class":103,"line":104},[101,169921,30381],{"class":107},[101,169923,169699],{"class":111},[101,169925,169926],{"class":103,"line":21},[101,169927,2387],{"emptyLinePlaceholder":27},[101,169929,169930,169932,169934],{"class":103,"line":1166},[101,169931,159696],{"class":111},[101,169933,157],{"class":107},[101,169935,55436],{"class":111},[101,169937,169938,169940,169942,169944,169946,169948,169950,169952,169954,169956,169958,169960,169962],{"class":103,"line":1181},[101,169939,148365],{"class":111},[101,169941,62668],{"class":216},[101,169943,51426],{"class":111},[101,169945,149868],{"class":216},[101,169947,12423],{"class":111},[101,169949,69113],{"class":216},[101,169951,51426],{"class":111},[101,169953,761],{"class":160},[101,169955,12423],{"class":111},[101,169957,151452],{"class":216},[101,169959,51426],{"class":111},[101,169961,1100],{"class":160},[101,169963,4917],{"class":111},[101,169965,169966,169968,169970,169972,169974,169976,169978,169980,169982,169984,169986,169988,169990],{"class":103,"line":1187},[101,169967,148365],{"class":111},[101,169969,62668],{"class":216},[101,169971,51426],{"class":111},[101,169973,150916],{"class":216},[101,169975,12423],{"class":111},[101,169977,69113],{"class":216},[101,169979,51426],{"class":111},[101,169981,736],{"class":160},[101,169983,12423],{"class":111},[101,169985,151452],{"class":216},[101,169987,51426],{"class":111},[101,169989,922],{"class":160},[101,169991,4917],{"class":111},[101,169993,169994],{"class":103,"line":1201},[101,169995,33235],{"class":111},[101,169997,169998],{"class":103,"line":1207},[101,169999,2387],{"emptyLinePlaceholder":27},[101,170001,170002,170004,170006,170008,170010,170012,170014,170016,170018,170020,170022,170024,170026,170028,170030,170032,170034,170036],{"class":103,"line":1298},[101,170003,107813],{"class":107},[101,170005,146771],{"class":160},[101,170007,112],{"class":111},[101,170009,169780],{"class":216},[101,170011,12423],{"class":111},[101,170013,151956],{"class":216},[101,170015,12423],{"class":111},[101,170017,146786],{"class":5204},[101,170019,157],{"class":107},[101,170021,146791],{"class":216},[101,170023,12423],{"class":111},[101,170025,169797],{"class":5204},[101,170027,157],{"class":107},[101,170029,7640],{"class":216},[101,170031,13702],{"class":111},[101,170033,31372],{"class":107},[101,170035,148133],{"class":5204},[101,170037,3726],{"class":111},[101,170039,170040,170043,170045,170047,170049,170051,170053,170055,170057],{"class":103,"line":1304},[101,170041,170042],{"class":111},"    fieldnames ",[101,170044,157],{"class":107},[101,170046,52215],{"class":111},[101,170048,62668],{"class":216},[101,170050,12423],{"class":111},[101,170052,69113],{"class":216},[101,170054,12423],{"class":111},[101,170056,151452],{"class":216},[101,170058,33235],{"class":111},[101,170060,170061,170063,170065,170068,170070,170072,170075,170077],{"class":103,"line":1316},[101,170062,169814],{"class":111},[101,170064,157],{"class":107},[101,170066,170067],{"class":111}," csv.DictWriter(",[101,170069,45343],{"class":5204},[101,170071,12423],{"class":111},[101,170073,170074],{"class":5204},"fieldnames",[101,170076,157],{"class":107},[101,170078,170079],{"class":111},"fieldnames)\n",[101,170081,170082],{"class":103,"line":1599},[101,170083,170084],{"class":111},"    writer.writeheader()\n",[101,170086,170087],{"class":103,"line":1604},[101,170088,169828],{"class":111},[43,170090,170092],{"id":170091},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[10,170094,123272],{},[55,170096,170097,170100,170103],{},[58,170098,170099],{},"读取文本文件。",[58,170101,170102],{},"统计每个单词出现次数。",[58,170104,170105],{},"输出出现次数最多的前 10 个单词。",[10,170107,10023],{},[92,170109,170111],{"className":30367,"code":170110,"language":30369,"meta":20,"style":20},"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",[98,170112,170113,170123,170127,170140,170156,170160,170170,170179,170183,170195,170215,170224,170228,170246,170250,170280,170284,170300],{"__ignoreMap":20},[101,170114,170115,170117,170119,170121],{"class":103,"line":104},[101,170116,30726],{"class":107},[101,170118,108291],{"class":111},[101,170120,30381],{"class":107},[101,170122,108296],{"class":111},[101,170124,170125],{"class":103,"line":21},[101,170126,2387],{"emptyLinePlaceholder":27},[101,170128,170129,170131,170133,170135,170138],{"class":103,"line":1166},[101,170130,168291],{"class":111},[101,170132,157],{"class":107},[101,170134,108525],{"class":111},[101,170136,170137],{"class":216},"\"article.txt\"",[101,170139,118],{"class":111},[101,170141,170142,170144,170146,170148,170150,170152,170154],{"class":103,"line":1181},[101,170143,168474],{"class":111},[101,170145,157],{"class":107},[101,170147,169351],{"class":111},[101,170149,146786],{"class":5204},[101,170151,157],{"class":107},[101,170153,146791],{"class":216},[101,170155,118],{"class":111},[101,170157,170158],{"class":103,"line":1187},[101,170159,2387],{"emptyLinePlaceholder":27},[101,170161,170162,170165,170167],{"class":103,"line":1201},[101,170163,170164],{"class":111},"words ",[101,170166,157],{"class":107},[101,170168,170169],{"class":111}," content.lower().split()\n",[101,170171,170172,170175,170177],{"class":103,"line":1207},[101,170173,170174],{"class":111},"counter ",[101,170176,157],{"class":107},[101,170178,87857],{"class":111},[101,170180,170181],{"class":103,"line":1298},[101,170182,2387],{"emptyLinePlaceholder":27},[101,170184,170185,170187,170190,170192],{"class":103,"line":1304},[101,170186,3012],{"class":107},[101,170188,170189],{"class":111}," word ",[101,170191,26032],{"class":107},[101,170193,170194],{"class":111}," words:\n",[101,170196,170197,170200,170202,170205,170208,170210,170213],{"class":103,"line":1316},[101,170198,170199],{"class":111},"    word ",[101,170201,157],{"class":107},[101,170203,170204],{"class":111}," word.strip(",[101,170206,170207],{"class":216},"\".,!?;:",[101,170209,156475],{"class":160},[101,170211,170212],{"class":216},"'()[]\"",[101,170214,118],{"class":111},[101,170216,170217,170219,170221],{"class":103,"line":1599},[101,170218,3088],{"class":107},[101,170220,38919],{"class":107},[101,170222,170223],{"class":111}," word:\n",[101,170225,170226],{"class":103,"line":1604},[101,170227,148492],{"class":107},[101,170229,170230,170233,170235,170238,170240,170242,170244],{"class":103,"line":1610},[101,170231,170232],{"class":111},"    counter[word] ",[101,170234,157],{"class":107},[101,170236,170237],{"class":111}," counter.get(word, ",[101,170239,303],{"class":160},[101,170241,13702],{"class":111},[101,170243,592],{"class":107},[101,170245,55688],{"class":160},[101,170247,170248],{"class":103,"line":1615},[101,170249,2387],{"emptyLinePlaceholder":27},[101,170251,170252,170255,170257,170259,170262,170264,170266,170268,170270,170272,170274,170276,170278],{"class":103,"line":1629},[101,170253,170254],{"class":111},"items ",[101,170256,157],{"class":107},[101,170258,163584],{"class":160},[101,170260,170261],{"class":111},"(counter.items(), ",[101,170263,153926],{"class":5204},[101,170265,153929],{"class":107},[101,170267,153932],{"class":111},[101,170269,329],{"class":160},[101,170271,112182],{"class":111},[101,170273,163508],{"class":5204},[101,170275,157],{"class":107},[101,170277,31465],{"class":160},[101,170279,118],{"class":111},[101,170281,170282],{"class":103,"line":1634},[101,170283,2387],{"emptyLinePlaceholder":27},[101,170285,170286,170288,170291,170293,170296,170298],{"class":103,"line":1640},[101,170287,3012],{"class":107},[101,170289,170290],{"class":111}," word, count ",[101,170292,26032],{"class":107},[101,170294,170295],{"class":111}," items[:",[101,170297,557],{"class":160},[101,170299,165735],{"class":111},[101,170301,170302,170304],{"class":103,"line":1661},[101,170303,31288],{"class":160},[101,170305,170306],{"class":111},"(word, count)\n",[43,170308,170310],{"id":170309},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[92,170312,170314],{"className":30367,"code":170313,"language":30369,"meta":20,"style":20},"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",[98,170315,170316,170322,170332,170336,170348,170352,170356,170364,170374,170380,170384,170414,170424,170428,170432,170440,170470,170494,170498,170502,170510,170539,170544],{"__ignoreMap":20},[101,170317,170318,170320],{"class":103,"line":104},[101,170319,30381],{"class":107},[101,170321,147071],{"class":111},[101,170323,170324,170326,170328,170330],{"class":103,"line":21},[101,170325,30726],{"class":107},[101,170327,108291],{"class":111},[101,170329,30381],{"class":107},[101,170331,108296],{"class":111},[101,170333,170334],{"class":103,"line":1166},[101,170335,2387],{"emptyLinePlaceholder":27},[101,170337,170338,170340,170342,170344,170346],{"class":103,"line":1181},[101,170339,151804],{"class":160},[101,170341,13552],{"class":107},[101,170343,108525],{"class":111},[101,170345,151811],{"class":216},[101,170347,118],{"class":111},[101,170349,170350],{"class":103,"line":1187},[101,170351,2387],{"emptyLinePlaceholder":27},[101,170353,170354],{"class":103,"line":1201},[101,170355,2387],{"emptyLinePlaceholder":27},[101,170357,170358,170360,170362],{"class":103,"line":1207},[101,170359,31936],{"class":107},[101,170361,151828],{"class":1950},[101,170363,31942],{"class":111},[101,170365,170366,170368,170370,170372],{"class":103,"line":1298},[101,170367,3088],{"class":107},[101,170369,38919],{"class":107},[101,170371,151839],{"class":160},[101,170373,151842],{"class":111},[101,170375,170376,170378],{"class":103,"line":1304},[101,170377,14740],{"class":107},[101,170379,51827],{"class":111},[101,170381,170382],{"class":103,"line":1316},[101,170383,2387],{"emptyLinePlaceholder":27},[101,170385,170386,170388,170390,170392,170394,170396,170398,170400,170402,170404,170406,170408,170410,170412],{"class":103,"line":1599},[101,170387,34167],{"class":107},[101,170389,146771],{"class":160},[101,170391,112],{"class":111},[101,170393,151804],{"class":160},[101,170395,12423],{"class":111},[101,170397,146781],{"class":216},[101,170399,12423],{"class":111},[101,170401,146786],{"class":5204},[101,170403,157],{"class":107},[101,170405,146791],{"class":216},[101,170407,13702],{"class":111},[101,170409,31372],{"class":107},[101,170411,148133],{"class":5204},[101,170413,3726],{"class":111},[101,170415,170416,170418,170420,170422],{"class":103,"line":1604},[101,170417,14740],{"class":107},[101,170419,148144],{"class":111},[101,170421,45343],{"class":5204},[101,170423,118],{"class":111},[101,170425,170426],{"class":103,"line":1610},[101,170427,2387],{"emptyLinePlaceholder":27},[101,170429,170430],{"class":103,"line":1615},[101,170431,2387],{"emptyLinePlaceholder":27},[101,170433,170434,170436,170438],{"class":103,"line":1629},[101,170435,31936],{"class":107},[101,170437,151938],{"class":1950},[101,170439,151941],{"class":111},[101,170441,170442,170444,170446,170448,170450,170452,170454,170456,170458,170460,170462,170464,170466,170468],{"class":103,"line":1634},[101,170443,34167],{"class":107},[101,170445,146771],{"class":160},[101,170447,112],{"class":111},[101,170449,151804],{"class":160},[101,170451,12423],{"class":111},[101,170453,151956],{"class":216},[101,170455,12423],{"class":111},[101,170457,146786],{"class":5204},[101,170459,157],{"class":107},[101,170461,146791],{"class":216},[101,170463,13702],{"class":111},[101,170465,31372],{"class":107},[101,170467,148133],{"class":5204},[101,170469,3726],{"class":111},[101,170471,170472,170474,170476,170478,170480,170482,170484,170486,170488,170490,170492],{"class":103,"line":1640},[101,170473,151977],{"class":111},[101,170475,45343],{"class":5204},[101,170477,12423],{"class":111},[101,170479,147117],{"class":5204},[101,170481,157],{"class":107},[101,170483,33976],{"class":160},[101,170485,12423],{"class":111},[101,170487,151992],{"class":5204},[101,170489,157],{"class":107},[101,170491,189],{"class":160},[101,170493,118],{"class":111},[101,170495,170496],{"class":103,"line":1661},[101,170497,2387],{"emptyLinePlaceholder":27},[101,170499,170500],{"class":103,"line":1666},[101,170501,2387],{"emptyLinePlaceholder":27},[101,170503,170504,170506,170508],{"class":103,"line":1680},[101,170505,159696],{"class":111},[101,170507,157],{"class":107},[101,170509,153022],{"class":111},[101,170511,170512,170515,170517,170519,170521,170523,170525,170527,170529,170531,170533,170535,170537],{"class":103,"line":1685},[101,170513,170514],{"class":111},"students.append({",[101,170516,62668],{"class":216},[101,170518,51426],{"class":111},[101,170520,149868],{"class":216},[101,170522,12423],{"class":111},[101,170524,69113],{"class":216},[101,170526,51426],{"class":111},[101,170528,761],{"class":160},[101,170530,12423],{"class":111},[101,170532,151452],{"class":216},[101,170534,51426],{"class":111},[101,170536,1100],{"class":160},[101,170538,165132],{"class":111},[101,170540,170541],{"class":103,"line":1714},[101,170542,170543],{"class":111},"save_students(students)\n",[101,170545,170546,170548,170550,170553],{"class":103,"line":1719},[101,170547,30404],{"class":160},[101,170549,112],{"class":111},[101,170551,170552],{"class":216},"\"保存成功\"",[101,170554,118],{"class":111},[43,170556,170558],{"id":170557},"_814-易错点","8.14 易错点",[55,170560,170561,170565,170571,170576,170583,170590],{},[58,170562,170563,168824],{},[98,170564,906],{},[58,170566,170567,170568,28374],{},"读写中文要指定 ",[98,170569,170570],{},"encoding=\"utf-8\"",[58,170572,170573,170574,28374],{},"打开文件后要关闭，推荐使用 ",[98,170575,107813],{},[58,170577,170578,170579,170582],{},"读取大文件不要直接 ",[98,170580,170581],{},"read()"," 全部内容。",[58,170584,170585,170586,170589],{},"Windows 写 CSV 时建议加 ",[98,170587,170588],{},"newline=\"\"","，避免空行。",[58,170591,170592],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[43,170594,170596],{"id":170595},"_815-本章练习","8.15 本章练习",[55,170598,170599,170606,170611,170614,170617],{},[58,170600,170601,170602,170605],{},"写入一个 ",[98,170603,170604],{},"students.txt","，每行保存一个学生姓名。",[58,170607,104335,170608,170610],{},[98,170609,170604],{}," 并输出所有学生。",[58,170612,170613],{},"把学生列表保存为 JSON 文件。",[58,170615,170616],{},"从 JSON 文件读取学生数据，计算平均分。",[58,170618,170619,170620,170623,170624,170627],{},"写一个日志函数 ",[98,170621,170622],{},"write_log(message)","，每次调用向 ",[98,170625,170626],{},"app.log"," 追加一行。",[5114,170629,170630],{},"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":20,"searchDepth":21,"depth":21,"links":170632},[170633,170634,170638,170639,170645,170646,170647,170648,170649,170650,170651,170652,170653,170654,170655],{"id":168144,"depth":21,"text":168145},{"id":168185,"depth":21,"text":168186,"children":170635},[170636,170637],{"id":168189,"depth":1166,"text":168190},{"id":168223,"depth":1166,"text":168224},{"id":168337,"depth":21,"text":168338},{"id":168430,"depth":21,"text":168431,"children":170640},[170641,170642,170643,170644],{"id":168434,"depth":1166,"text":168435},{"id":168521,"depth":1166,"text":168522},{"id":168591,"depth":1166,"text":168592},{"id":168685,"depth":1166,"text":168686},{"id":168755,"depth":21,"text":168756},{"id":168818,"depth":21,"text":168819},{"id":168979,"depth":21,"text":168980},{"id":169042,"depth":21,"text":169043},{"id":169158,"depth":21,"text":169159},{"id":169368,"depth":21,"text":169369},{"id":169680,"depth":21,"text":169681},{"id":170091,"depth":21,"text":170092},{"id":170309,"depth":21,"text":170310},{"id":170557,"depth":21,"text":170558},{"id":170595,"depth":21,"text":170596},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168136,"description":23365},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170662,"title":170663,"body":170664,"description":23365,"extension":24,"meta":172850,"navigation":27,"path":172851,"seo":172852,"stem":172853,"__hash__":172854},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170665,"toc":172817},[170666,170669,170673,170676,170679,170771,170773,170792,170797,170801,170804,170807,170836,170843,170846,170850,170853,170882,170884,170936,170942,170995,170999,171097,171100,171167,171171,171228,171230,171236,171240,171245,171251,171342,171347,171351,171354,171432,171435,171473,171477,171595,171598,171602,171605,171650,171653,171657,171662,171668,171718,171721,171752,171756,171760,171790,171794,171829,171833,171868,171908,171912,171928,171931,171935,171939,172018,172022,172063,172067,172122,172126,172160,172164,172194,172203,172210,172216,172273,172276,172284,172287,172291,172298,172301,172307,172310,172327,172332,172336,172342,172355,172358,172395,172398,172409,172412,172426,172429,172443,172447,172454,172487,172490,172492,172498,172501,172505,172507,172513,172518,172691,172695,172758,172762,172786,172790,172814],[39,170667,170663],{"id":170668},"_9-异常模块与包",[43,170670,170672],{"id":170671},"_91-什么是异常","9.1 什么是异常",[10,170674,170675],{},"异常是程序运行过程中出现的错误。",[10,170677,170678],{},"常见异常：",[249,170680,170681,170690],{},[252,170682,170683],{},[255,170684,170685,170688],{},[258,170686,170687],{},"异常",[258,170689,25858],{},[296,170691,170692,170702,170712,170721,170731,170741,170751,170761],{},[255,170693,170694,170699],{},[301,170695,170696],{},[98,170697,170698],{},"NameError",[301,170700,170701],{},"使用了未定义变量",[255,170703,170704,170709],{},[301,170705,170706],{},[98,170707,170708],{},"TypeError",[301,170710,170711],{},"类型不匹配",[255,170713,170714,170718],{},[301,170715,170716],{},[98,170717,154814],{},[301,170719,170720],{},"值不合法",[255,170722,170723,170728],{},[301,170724,170725],{},[98,170726,170727],{},"IndexError",[301,170729,170730],{},"列表索引越界",[255,170732,170733,170738],{},[301,170734,170735],{},[98,170736,170737],{},"KeyError",[301,170739,170740],{},"字典 key 不存在",[255,170742,170743,170748],{},[301,170744,170745],{},[98,170746,170747],{},"FileNotFoundError",[301,170749,170750],{},"文件不存在",[255,170752,170753,170758],{},[301,170754,170755],{},[98,170756,170757],{},"ZeroDivisionError",[301,170759,170760],{},"除数为 0",[255,170762,170763,170768],{},[301,170764,170765],{},[98,170766,170767],{},"ImportError",[301,170769,170770],{},"导入失败",[10,170772,15123],{},[92,170774,170776],{"className":30367,"code":170775,"language":30369,"meta":20,"style":20},"num = int(\"abc\")\n",[98,170777,170778],{"__ignoreMap":20},[101,170779,170780,170782,170784,170786,170788,170790],{"class":103,"line":104},[101,170781,155767],{"class":111},[101,170783,157],{"class":107},[101,170785,2369],{"class":160},[101,170787,112],{"class":111},[101,170789,155860],{"class":216},[101,170791,118],{"class":111},[10,170793,170794,170795,28374],{},"会触发 ",[98,170796,154814],{},[43,170798,170800],{"id":170799},"_92-为什么要处理异常","9.2 为什么要处理异常",[10,170802,170803],{},"如果不处理异常，程序会直接终止。",[10,170805,170806],{},"例如用户输入年龄：",[92,170808,170810],{"className":30367,"code":170809,"language":30369,"meta":20,"style":20},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[98,170811,170812,170830],{"__ignoreMap":20},[101,170813,170814,170816,170818,170820,170822,170824,170826,170828],{"class":103,"line":104},[101,170815,146526],{"class":111},[101,170817,157],{"class":107},[101,170819,2369],{"class":160},[101,170821,112],{"class":111},[101,170823,53810],{"class":160},[101,170825,112],{"class":111},[101,170827,152374],{"class":216},[101,170829,30486],{"class":111},[101,170831,170832,170834],{"class":103,"line":21},[101,170833,30404],{"class":160},[101,170835,155741],{"class":111},[10,170837,170838,170839,170842],{},"用户输入 ",[98,170840,170841],{},"abc","，程序就会报错退出。",[10,170844,170845],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[43,170847,170849],{"id":170848},"_93-try-except","9.3 try except",[10,170851,170852],{},"基础语法：",[92,170854,170856],{"className":30367,"code":170855,"language":30369,"meta":20,"style":20},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[98,170857,170858,170865,170870,170877],{"__ignoreMap":20},[101,170859,170860,170863],{"class":103,"line":104},[101,170861,170862],{"class":107},"try",[101,170864,3726],{"class":111},[101,170866,170867],{"class":103,"line":21},[101,170868,170869],{"class":111},"    可能出错的代码\n",[101,170871,170872,170875],{"class":103,"line":1166},[101,170873,170874],{"class":107},"except",[101,170876,3726],{"class":111},[101,170878,170879],{"class":103,"line":1181},[101,170880,170881],{"class":111},"    出错后的处理代码\n",[10,170883,15123],{},[92,170885,170887],{"className":30367,"code":170886,"language":30369,"meta":20,"style":20},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[98,170888,170889,170895,170913,170919,170925],{"__ignoreMap":20},[101,170890,170891,170893],{"class":103,"line":104},[101,170892,170862],{"class":107},[101,170894,3726],{"class":111},[101,170896,170897,170899,170901,170903,170905,170907,170909,170911],{"class":103,"line":21},[101,170898,152366],{"class":111},[101,170900,157],{"class":107},[101,170902,2369],{"class":160},[101,170904,112],{"class":111},[101,170906,53810],{"class":160},[101,170908,112],{"class":111},[101,170910,152374],{"class":216},[101,170912,30486],{"class":111},[101,170914,170915,170917],{"class":103,"line":1166},[101,170916,31288],{"class":160},[101,170918,155741],{"class":111},[101,170920,170921,170923],{"class":103,"line":1181},[101,170922,170874],{"class":107},[101,170924,3726],{"class":111},[101,170926,170927,170929,170931,170934],{"class":103,"line":1187},[101,170928,31288],{"class":160},[101,170930,112],{"class":111},[101,170932,170933],{"class":216},"\"年龄必须是数字\"",[101,170935,118],{"class":111},[10,170937,170938,170939,170941],{},"不建议裸写 ",[98,170940,170874],{},"，最好指定异常类型。",[92,170943,170945],{"className":30367,"code":170944,"language":30369,"meta":20,"style":20},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[98,170946,170947,170953,170971,170977,170985],{"__ignoreMap":20},[101,170948,170949,170951],{"class":103,"line":104},[101,170950,170862],{"class":107},[101,170952,3726],{"class":111},[101,170954,170955,170957,170959,170961,170963,170965,170967,170969],{"class":103,"line":21},[101,170956,152366],{"class":111},[101,170958,157],{"class":107},[101,170960,2369],{"class":160},[101,170962,112],{"class":111},[101,170964,53810],{"class":160},[101,170966,112],{"class":111},[101,170968,152374],{"class":216},[101,170970,30486],{"class":111},[101,170972,170973,170975],{"class":103,"line":1166},[101,170974,31288],{"class":160},[101,170976,155741],{"class":111},[101,170978,170979,170981,170983],{"class":103,"line":1181},[101,170980,170874],{"class":107},[101,170982,152206],{"class":160},[101,170984,3726],{"class":111},[101,170986,170987,170989,170991,170993],{"class":103,"line":1187},[101,170988,31288],{"class":160},[101,170990,112],{"class":111},[101,170992,170933],{"class":216},[101,170994,118],{"class":111},[43,170996,170998],{"id":170997},"_94-捕获多个异常","9.4 捕获多个异常",[92,171000,171002],{"className":30367,"code":171001,"language":30369,"meta":20,"style":20},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[98,171003,171004,171010,171031,171051,171058,171066,171077,171086],{"__ignoreMap":20},[101,171005,171006,171008],{"class":103,"line":104},[101,171007,170862],{"class":107},[101,171009,3726],{"class":111},[101,171011,171012,171015,171017,171019,171021,171023,171025,171027,171029],{"class":103,"line":21},[101,171013,171014],{"class":111},"    nums ",[101,171016,157],{"class":107},[101,171018,52215],{"class":111},[101,171020,329],{"class":160},[101,171022,12423],{"class":111},[101,171024,189],{"class":160},[101,171026,12423],{"class":111},[101,171028,183],{"class":160},[101,171030,33235],{"class":111},[101,171032,171033,171036,171038,171040,171042,171044,171046,171049],{"class":103,"line":1166},[101,171034,171035],{"class":111},"    index ",[101,171037,157],{"class":107},[101,171039,2369],{"class":160},[101,171041,112],{"class":111},[101,171043,53810],{"class":160},[101,171045,112],{"class":111},[101,171047,171048],{"class":216},"\"请输入索引:\"",[101,171050,30486],{"class":111},[101,171052,171053,171055],{"class":103,"line":1181},[101,171054,31288],{"class":160},[101,171056,171057],{"class":111},"(nums[index])\n",[101,171059,171060,171062,171064],{"class":103,"line":1187},[101,171061,170874],{"class":107},[101,171063,152206],{"class":160},[101,171065,3726],{"class":111},[101,171067,171068,171070,171072,171075],{"class":103,"line":1201},[101,171069,31288],{"class":160},[101,171071,112],{"class":111},[101,171073,171074],{"class":216},"\"索引必须是整数\"",[101,171076,118],{"class":111},[101,171078,171079,171081,171084],{"class":103,"line":1207},[101,171080,170874],{"class":107},[101,171082,171083],{"class":160}," IndexError",[101,171085,3726],{"class":111},[101,171087,171088,171090,171092,171095],{"class":103,"line":1298},[101,171089,31288],{"class":160},[101,171091,112],{"class":111},[101,171093,171094],{"class":216},"\"索引越界\"",[101,171096,118],{"class":111},[10,171098,171099],{},"多个异常使用相同处理逻辑：",[92,171101,171103],{"className":30367,"code":171102,"language":30369,"meta":20,"style":20},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[98,171104,171105,171111,171129,171142,171156],{"__ignoreMap":20},[101,171106,171107,171109],{"class":103,"line":104},[101,171108,170862],{"class":107},[101,171110,3726],{"class":111},[101,171112,171113,171115,171117,171119,171121,171123,171125,171127],{"class":103,"line":21},[101,171114,45582],{"class":111},[101,171116,157],{"class":107},[101,171118,2369],{"class":160},[101,171120,112],{"class":111},[101,171122,53810],{"class":160},[101,171124,112],{"class":111},[101,171126,155776],{"class":216},[101,171128,30486],{"class":111},[101,171130,171131,171133,171135,171137,171139],{"class":103,"line":1166},[101,171132,31288],{"class":160},[101,171134,112],{"class":111},[101,171136,557],{"class":160},[101,171138,156026],{"class":107},[101,171140,171141],{"class":111}," num)\n",[101,171143,171144,171146,171148,171150,171152,171154],{"class":103,"line":1181},[101,171145,170874],{"class":107},[101,171147,1645],{"class":111},[101,171149,154814],{"class":160},[101,171151,12423],{"class":111},[101,171153,170757],{"class":160},[101,171155,30775],{"class":111},[101,171157,171158,171160,171162,171165],{"class":103,"line":1187},[101,171159,31288],{"class":160},[101,171161,112],{"class":111},[101,171163,171164],{"class":216},"\"输入不合法\"",[101,171166,118],{"class":111},[43,171168,171170],{"id":171169},"_95-获取异常信息","9.5 获取异常信息",[92,171172,171174],{"className":30367,"code":171173,"language":30369,"meta":20,"style":20},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[98,171175,171176,171182,171196,171207],{"__ignoreMap":20},[101,171177,171178,171180],{"class":103,"line":104},[101,171179,170862],{"class":107},[101,171181,3726],{"class":111},[101,171183,171184,171186,171188,171190,171192,171194],{"class":103,"line":21},[101,171185,45582],{"class":111},[101,171187,157],{"class":107},[101,171189,2369],{"class":160},[101,171191,112],{"class":111},[101,171193,155860],{"class":216},[101,171195,118],{"class":111},[101,171197,171198,171200,171202,171204],{"class":103,"line":1166},[101,171199,170874],{"class":107},[101,171201,152206],{"class":160},[101,171203,64593],{"class":107},[101,171205,171206],{"class":111}," e:\n",[101,171208,171209,171211,171213,171215,171218,171220,171222,171224,171226],{"class":103,"line":1181},[101,171210,31288],{"class":160},[101,171212,112],{"class":111},[101,171214,164],{"class":107},[101,171216,171217],{"class":216},"\"出错了:",[101,171219,1007],{"class":160},[101,171221,186],{"class":111},[101,171223,1057],{"class":160},[101,171225,362],{"class":216},[101,171227,118],{"class":111},[10,171229,146437],{},[92,171231,171234],{"className":171232,"code":171233,"language":5175,"meta":20},[5173],"出错了:invalid literal for int() with base 10: 'abc'\n",[98,171235,171233],{"__ignoreMap":20},[43,171237,171239],{"id":171238},"_96-else和finally","9.6 else和finally",[10,171241,171242,171244],{},[98,171243,1688],{},"：没有异常时执行。",[10,171246,171247,171250],{},[98,171248,171249],{},"finally","：无论是否异常都会执行。",[92,171252,171254],{"className":30367,"code":171253,"language":30369,"meta":20,"style":20},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[98,171255,171256,171262,171280,171288,171298,171304,171325,171331],{"__ignoreMap":20},[101,171257,171258,171260],{"class":103,"line":104},[101,171259,170862],{"class":107},[101,171261,3726],{"class":111},[101,171263,171264,171266,171268,171270,171272,171274,171276,171278],{"class":103,"line":21},[101,171265,45582],{"class":111},[101,171267,157],{"class":107},[101,171269,2369],{"class":160},[101,171271,112],{"class":111},[101,171273,53810],{"class":160},[101,171275,112],{"class":111},[101,171277,155776],{"class":216},[101,171279,30486],{"class":111},[101,171281,171282,171284,171286],{"class":103,"line":1166},[101,171283,170874],{"class":107},[101,171285,152206],{"class":160},[101,171287,3726],{"class":111},[101,171289,171290,171292,171294,171296],{"class":103,"line":1181},[101,171291,31288],{"class":160},[101,171293,112],{"class":111},[101,171295,153194],{"class":216},[101,171297,118],{"class":111},[101,171299,171300,171302],{"class":103,"line":1187},[101,171301,1688],{"class":107},[101,171303,3726],{"class":111},[101,171305,171306,171308,171310,171312,171315,171317,171319,171321,171323],{"class":103,"line":1201},[101,171307,31288],{"class":160},[101,171309,112],{"class":111},[101,171311,164],{"class":107},[101,171313,171314],{"class":216},"\"输入正确:",[101,171316,1007],{"class":160},[101,171318,1652],{"class":111},[101,171320,1057],{"class":160},[101,171322,362],{"class":216},[101,171324,118],{"class":111},[101,171326,171327,171329],{"class":103,"line":1207},[101,171328,171249],{"class":107},[101,171330,3726],{"class":111},[101,171332,171333,171335,171337,171340],{"class":103,"line":1298},[101,171334,31288],{"class":160},[101,171336,112],{"class":111},[101,171338,171339],{"class":216},"\"程序结束\"",[101,171341,118],{"class":111},[10,171343,171344,171346],{},[98,171345,171249],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[43,171348,171350],{"id":171349},"_97-抛出异常","9.7 抛出异常",[10,171352,171353],{},"程序可以主动抛出异常。",[92,171355,171357],{"className":30367,"code":171356,"language":30369,"meta":20,"style":20},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[98,171358,171359,171368,171380,171393,171413,171417,171421],{"__ignoreMap":20},[101,171360,171361,171363,171366],{"class":103,"line":104},[101,171362,31936],{"class":107},[101,171364,171365],{"class":1950}," set_age",[101,171367,161395],{"class":111},[101,171369,171370,171372,171374,171376,171378],{"class":103,"line":21},[101,171371,3088],{"class":107},[101,171373,15695],{"class":111},[101,171375,1021],{"class":107},[101,171377,4080],{"class":160},[101,171379,3726],{"class":111},[101,171381,171382,171384,171386,171388,171391],{"class":103,"line":1166},[101,171383,103412],{"class":107},[101,171385,152206],{"class":160},[101,171387,112],{"class":111},[101,171389,171390],{"class":216},"\"年龄不能为负数\"",[101,171392,118],{"class":111},[101,171394,171395,171397,171399,171401,171403,171405,171407,171409,171411],{"class":103,"line":1181},[101,171396,31288],{"class":160},[101,171398,112],{"class":111},[101,171400,164],{"class":107},[101,171402,161963],{"class":216},[101,171404,1007],{"class":160},[101,171406,70210],{"class":111},[101,171408,1057],{"class":160},[101,171410,362],{"class":216},[101,171412,118],{"class":111},[101,171414,171415],{"class":103,"line":1187},[101,171416,2387],{"emptyLinePlaceholder":27},[101,171418,171419],{"class":103,"line":1201},[101,171420,2387],{"emptyLinePlaceholder":27},[101,171422,171423,171426,171428,171430],{"class":103,"line":1207},[101,171424,171425],{"class":111},"set_age(",[101,171427,643],{"class":107},[101,171429,329],{"class":160},[101,171431,118],{"class":111},[10,171433,171434],{},"调用者可以捕获：",[92,171436,171438],{"className":30367,"code":171437,"language":30369,"meta":20,"style":20},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[98,171439,171440,171446,171457,171467],{"__ignoreMap":20},[101,171441,171442,171444],{"class":103,"line":104},[101,171443,170862],{"class":107},[101,171445,3726],{"class":111},[101,171447,171448,171451,171453,171455],{"class":103,"line":21},[101,171449,171450],{"class":111},"    set_age(",[101,171452,643],{"class":107},[101,171454,329],{"class":160},[101,171456,118],{"class":111},[101,171458,171459,171461,171463,171465],{"class":103,"line":1166},[101,171460,170874],{"class":107},[101,171462,152206],{"class":160},[101,171464,64593],{"class":107},[101,171466,171206],{"class":111},[101,171468,171469,171471],{"class":103,"line":1181},[101,171470,31288],{"class":160},[101,171472,66988],{"class":111},[43,171474,171476],{"id":171475},"_98-自定义异常","9.8 自定义异常",[92,171478,171480],{"className":30367,"code":171479,"language":30369,"meta":20,"style":20},"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",[98,171481,171482,171496,171500,171504,171508,171516,171526,171537,171547,171551,171555,171561,171578,171589],{"__ignoreMap":20},[101,171483,171484,171486,171489,171491,171494],{"class":103,"line":104},[101,171485,14682],{"class":107},[101,171487,171488],{"class":1950}," BalanceNotEnoughError",[101,171490,112],{"class":111},[101,171492,171493],{"class":160},"Exception",[101,171495,30775],{"class":111},[101,171497,171498],{"class":103,"line":21},[101,171499,149517],{"class":107},[101,171501,171502],{"class":103,"line":1166},[101,171503,2387],{"emptyLinePlaceholder":27},[101,171505,171506],{"class":103,"line":1181},[101,171507,2387],{"emptyLinePlaceholder":27},[101,171509,171510,171512,171514],{"class":103,"line":1187},[101,171511,31936],{"class":107},[101,171513,150166],{"class":1950},[101,171515,162792],{"class":111},[101,171517,171518,171520,171522,171524],{"class":103,"line":1201},[101,171519,3088],{"class":107},[101,171521,150122],{"class":111},[101,171523,1071],{"class":107},[101,171525,162569],{"class":111},[101,171527,171528,171530,171533,171535],{"class":103,"line":1207},[101,171529,103412],{"class":107},[101,171531,171532],{"class":111}," BalanceNotEnoughError(",[101,171534,150217],{"class":216},[101,171536,118],{"class":111},[101,171538,171539,171541,171543,171545],{"class":103,"line":1298},[101,171540,4077],{"class":107},[101,171542,162799],{"class":111},[101,171544,643],{"class":107},[101,171546,150155],{"class":111},[101,171548,171549],{"class":103,"line":1304},[101,171550,2387],{"emptyLinePlaceholder":27},[101,171552,171553],{"class":103,"line":1316},[101,171554,2387],{"emptyLinePlaceholder":27},[101,171556,171557,171559],{"class":103,"line":1599},[101,171558,170862],{"class":107},[101,171560,3726],{"class":111},[101,171562,171563,171565,171567,171570,171572,171574,171576],{"class":103,"line":1604},[101,171564,162470],{"class":111},[101,171566,157],{"class":107},[101,171568,171569],{"class":111}," withdraw(",[101,171571,422],{"class":160},[101,171573,12423],{"class":111},[101,171575,1709],{"class":160},[101,171577,118],{"class":111},[101,171579,171580,171582,171585,171587],{"class":103,"line":1610},[101,171581,170874],{"class":107},[101,171583,171584],{"class":111}," BalanceNotEnoughError ",[101,171586,31372],{"class":107},[101,171588,171206],{"class":111},[101,171590,171591,171593],{"class":103,"line":1615},[101,171592,31288],{"class":160},[101,171594,66988],{"class":111},[10,171596,171597],{},"入门阶段大多数情况使用内置异常即可。",[43,171599,171601],{"id":171600},"_99-traceback","9.9 traceback",[10,171603,171604],{},"调试时可以输出完整异常堆栈。",[92,171606,171608],{"className":30367,"code":171607,"language":30369,"meta":20,"style":20},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[98,171609,171610,171617,171621,171627,171637,171645],{"__ignoreMap":20},[101,171611,171612,171614],{"class":103,"line":104},[101,171613,30381],{"class":107},[101,171615,171616],{"class":111}," traceback\n",[101,171618,171619],{"class":103,"line":21},[101,171620,2387],{"emptyLinePlaceholder":27},[101,171622,171623,171625],{"class":103,"line":1166},[101,171624,170862],{"class":107},[101,171626,3726],{"class":111},[101,171628,171629,171631,171633,171635],{"class":103,"line":1181},[101,171630,1972],{"class":160},[101,171632,112],{"class":111},[101,171634,155860],{"class":216},[101,171636,118],{"class":111},[101,171638,171639,171641,171643],{"class":103,"line":1187},[101,171640,170874],{"class":107},[101,171642,152206],{"class":160},[101,171644,3726],{"class":111},[101,171646,171647],{"class":103,"line":1201},[101,171648,171649],{"class":111},"    traceback.print_exc()\n",[10,171651,171652],{},"日志系统中常把异常堆栈记录到文件。",[43,171654,171656],{"id":171655},"_910-什么是模块","9.10 什么是模块",[10,171658,171659,171660,125963],{},"模块就是一个 ",[98,171661,146332],{},[10,171663,171664,171665,24607],{},"例如创建 ",[98,171666,171667],{},"my_math.py",[92,171669,171671],{"className":30367,"code":171670,"language":30369,"meta":20,"style":20},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[98,171672,171673,171681,171691,171695,171699,171708],{"__ignoreMap":20},[101,171674,171675,171677,171679],{"class":103,"line":104},[101,171676,31936],{"class":107},[101,171678,5197],{"class":1950},[101,171680,151073],{"class":111},[101,171682,171683,171685,171687,171689],{"class":103,"line":21},[101,171684,4077],{"class":107},[101,171686,10857],{"class":111},[101,171688,592],{"class":107},[101,171690,151084],{"class":111},[101,171692,171693],{"class":103,"line":1166},[101,171694,2387],{"emptyLinePlaceholder":27},[101,171696,171697],{"class":103,"line":1181},[101,171698,2387],{"emptyLinePlaceholder":27},[101,171700,171701,171703,171706],{"class":103,"line":1187},[101,171702,31936],{"class":107},[101,171704,171705],{"class":1950}," sub",[101,171707,151073],{"class":111},[101,171709,171710,171712,171714,171716],{"class":103,"line":1201},[101,171711,4077],{"class":107},[101,171713,10857],{"class":111},[101,171715,643],{"class":107},[101,171717,151084],{"class":111},[10,171719,171720],{},"在另一个文件中导入：",[92,171722,171724],{"className":30367,"code":171723,"language":30369,"meta":20,"style":20},"import my_math\n\nprint(my_math.add(1, 2))\n",[98,171725,171726,171733,171737],{"__ignoreMap":20},[101,171727,171728,171730],{"class":103,"line":104},[101,171729,30381],{"class":107},[101,171731,171732],{"class":111}," my_math\n",[101,171734,171735],{"class":103,"line":21},[101,171736,2387],{"emptyLinePlaceholder":27},[101,171738,171739,171741,171744,171746,171748,171750],{"class":103,"line":1166},[101,171740,30404],{"class":160},[101,171742,171743],{"class":111},"(my_math.add(",[101,171745,329],{"class":160},[101,171747,12423],{"class":111},[101,171749,189],{"class":160},[101,171751,30486],{"class":111},[43,171753,171755],{"id":171754},"_911-import导入","9.11 import导入",[72,171757,171759],{"id":171758},"_9111-导入模块","9.11.1 导入模块",[92,171761,171763],{"className":30367,"code":171762,"language":30369,"meta":20,"style":20},"import random\n\nprint(random.randint(1, 10))\n",[98,171764,171765,171771,171775],{"__ignoreMap":20},[101,171766,171767,171769],{"class":103,"line":104},[101,171768,30381],{"class":107},[101,171770,45317],{"class":111},[101,171772,171773],{"class":103,"line":21},[101,171774,2387],{"emptyLinePlaceholder":27},[101,171776,171777,171779,171782,171784,171786,171788],{"class":103,"line":1166},[101,171778,30404],{"class":160},[101,171780,171781],{"class":111},"(random.randint(",[101,171783,329],{"class":160},[101,171785,12423],{"class":111},[101,171787,557],{"class":160},[101,171789,30486],{"class":111},[72,171791,171793],{"id":171792},"_9112-导入指定内容","9.11.2 导入指定内容",[92,171795,171797],{"className":30367,"code":171796,"language":30369,"meta":20,"style":20},"from random import randint\n\nprint(randint(1, 10))\n",[98,171798,171799,171810,171814],{"__ignoreMap":20},[101,171800,171801,171803,171805,171807],{"class":103,"line":104},[101,171802,30726],{"class":107},[101,171804,57785],{"class":111},[101,171806,30381],{"class":107},[101,171808,171809],{"class":111}," randint\n",[101,171811,171812],{"class":103,"line":21},[101,171813,2387],{"emptyLinePlaceholder":27},[101,171815,171816,171818,171821,171823,171825,171827],{"class":103,"line":1166},[101,171817,30404],{"class":160},[101,171819,171820],{"class":111},"(randint(",[101,171822,329],{"class":160},[101,171824,12423],{"class":111},[101,171826,557],{"class":160},[101,171828,30486],{"class":111},[72,171830,171832],{"id":171831},"_9113-起别名","9.11.3 起别名",[92,171834,171836],{"className":30367,"code":171835,"language":30369,"meta":20,"style":20},"import random as rd\n\nprint(rd.randint(1, 10))\n",[98,171837,171838,171849,171853],{"__ignoreMap":20},[101,171839,171840,171842,171844,171846],{"class":103,"line":104},[101,171841,30381],{"class":107},[101,171843,57785],{"class":111},[101,171845,31372],{"class":107},[101,171847,171848],{"class":111}," rd\n",[101,171850,171851],{"class":103,"line":21},[101,171852,2387],{"emptyLinePlaceholder":27},[101,171854,171855,171857,171860,171862,171864,171866],{"class":103,"line":1166},[101,171856,30404],{"class":160},[101,171858,171859],{"class":111},"(rd.randint(",[101,171861,329],{"class":160},[101,171863,12423],{"class":111},[101,171865,557],{"class":160},[101,171867,30486],{"class":111},[92,171869,171871],{"className":30367,"code":171870,"language":30369,"meta":20,"style":20},"from random import randint as rint\n\nprint(rint(1, 10))\n",[98,171872,171873,171889,171893],{"__ignoreMap":20},[101,171874,171875,171877,171879,171881,171884,171886],{"class":103,"line":104},[101,171876,30726],{"class":107},[101,171878,57785],{"class":111},[101,171880,30381],{"class":107},[101,171882,171883],{"class":111}," randint ",[101,171885,31372],{"class":107},[101,171887,171888],{"class":111}," rint\n",[101,171890,171891],{"class":103,"line":21},[101,171892,2387],{"emptyLinePlaceholder":27},[101,171894,171895,171897,171900,171902,171904,171906],{"class":103,"line":1166},[101,171896,30404],{"class":160},[101,171898,171899],{"class":111},"(rint(",[101,171901,329],{"class":160},[101,171903,12423],{"class":111},[101,171905,557],{"class":160},[101,171907,30486],{"class":111},[72,171909,171911],{"id":171910},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[92,171913,171915],{"className":30367,"code":171914,"language":30369,"meta":20,"style":20},"from random import *\n",[98,171916,171917],{"__ignoreMap":20},[101,171918,171919,171921,171923,171925],{"class":103,"line":104},[101,171920,30726],{"class":107},[101,171922,57785],{"class":111},[101,171924,30381],{"class":107},[101,171926,171927],{"class":107}," *\n",[10,171929,171930],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[43,171932,171934],{"id":171933},"_912-常用内置模块","9.12 常用内置模块",[72,171936,171938],{"id":171937},"_9121-random","9.12.1 random",[92,171940,171942],{"className":30367,"code":171941,"language":30369,"meta":20,"style":20},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[98,171943,171944,171950,171954,171968,171987],{"__ignoreMap":20},[101,171945,171946,171948],{"class":103,"line":104},[101,171947,30381],{"class":107},[101,171949,45317],{"class":111},[101,171951,171952],{"class":103,"line":21},[101,171953,2387],{"emptyLinePlaceholder":27},[101,171955,171956,171958,171960,171962,171964,171966],{"class":103,"line":1166},[101,171957,30404],{"class":160},[101,171959,171781],{"class":111},[101,171961,329],{"class":160},[101,171963,12423],{"class":111},[101,171965,557],{"class":160},[101,171967,30486],{"class":111},[101,171969,171970,171972,171975,171977,171979,171981,171983,171985],{"class":103,"line":1181},[101,171971,30404],{"class":160},[101,171973,171974],{"class":111},"(random.choice([",[101,171976,149868],{"class":216},[101,171978,12423],{"class":111},[101,171980,150916],{"class":216},[101,171982,12423],{"class":111},[101,171984,159711],{"class":216},[101,171986,33132],{"class":111},[101,171988,171989,171991,171994,171996,171998,172000,172002,172004,172006,172008,172010,172012,172014,172016],{"class":103,"line":1187},[101,171990,30404],{"class":160},[101,171992,171993],{"class":111},"(random.sample([",[101,171995,329],{"class":160},[101,171997,12423],{"class":111},[101,171999,189],{"class":160},[101,172001,12423],{"class":111},[101,172003,183],{"class":160},[101,172005,12423],{"class":111},[101,172007,404],{"class":160},[101,172009,12423],{"class":111},[101,172011,430],{"class":160},[101,172013,112182],{"class":111},[101,172015,189],{"class":160},[101,172017,30486],{"class":111},[72,172019,172021],{"id":172020},"_9122-time","9.12.2 time",[92,172023,172025],{"className":30367,"code":172024,"language":30369,"meta":20,"style":20},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[98,172026,172027,172033,172037,172044,172052],{"__ignoreMap":20},[101,172028,172029,172031],{"class":103,"line":104},[101,172030,30381],{"class":107},[101,172032,31818],{"class":111},[101,172034,172035],{"class":103,"line":21},[101,172036,2387],{"emptyLinePlaceholder":27},[101,172038,172039,172041],{"class":103,"line":1166},[101,172040,30404],{"class":160},[101,172042,172043],{"class":111},"(time.time())\n",[101,172045,172046,172048,172050],{"class":103,"line":1181},[101,172047,95051],{"class":111},[101,172049,329],{"class":160},[101,172051,118],{"class":111},[101,172053,172054,172056,172058,172061],{"class":103,"line":1187},[101,172055,30404],{"class":160},[101,172057,112],{"class":111},[101,172059,172060],{"class":216},"\"1秒后执行\"",[101,172062,118],{"class":111},[72,172064,172066],{"id":172065},"_9123-datetime","9.12.3 datetime",[92,172068,172070],{"className":30367,"code":172069,"language":30369,"meta":20,"style":20},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[98,172071,172072,172084,172088,172098,172105],{"__ignoreMap":20},[101,172073,172074,172076,172079,172081],{"class":103,"line":104},[101,172075,30726],{"class":107},[101,172077,172078],{"class":111}," datetime ",[101,172080,30381],{"class":107},[101,172082,172083],{"class":111}," datetime\n",[101,172085,172086],{"class":103,"line":21},[101,172087,2387],{"emptyLinePlaceholder":27},[101,172089,172090,172093,172095],{"class":103,"line":1166},[101,172091,172092],{"class":111},"now ",[101,172094,157],{"class":107},[101,172096,172097],{"class":111}," datetime.now()\n",[101,172099,172100,172102],{"class":103,"line":1181},[101,172101,30404],{"class":160},[101,172103,172104],{"class":111},"(now)\n",[101,172106,172107,172109,172112,172115,172117,172120],{"class":103,"line":1187},[101,172108,30404],{"class":160},[101,172110,172111],{"class":111},"(now.strftime(",[101,172113,172114],{"class":216},"\"%Y-%m-",[101,172116,156671],{"class":160},[101,172118,172119],{"class":216}," %H:%M:%S\"",[101,172121,30486],{"class":111},[72,172123,172125],{"id":172124},"_9124-os","9.12.4 os",[92,172127,172129],{"className":30367,"code":172128,"language":30369,"meta":20,"style":20},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[98,172130,172131,172137,172141,172148],{"__ignoreMap":20},[101,172132,172133,172135],{"class":103,"line":104},[101,172134,30381],{"class":107},[101,172136,45294],{"class":111},[101,172138,172139],{"class":103,"line":21},[101,172140,2387],{"emptyLinePlaceholder":27},[101,172142,172143,172145],{"class":103,"line":1166},[101,172144,30404],{"class":160},[101,172146,172147],{"class":111},"(os.getcwd())\n",[101,172149,172150,172152,172155,172158],{"class":103,"line":1181},[101,172151,30404],{"class":160},[101,172153,172154],{"class":111},"(os.listdir(",[101,172156,172157],{"class":216},"\".\"",[101,172159,30486],{"class":111},[72,172161,172163],{"id":172162},"_9125-sys","9.12.5 sys",[92,172165,172167],{"className":30367,"code":172166,"language":30369,"meta":20,"style":20},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[98,172168,172169,172176,172180,172187],{"__ignoreMap":20},[101,172170,172171,172173],{"class":103,"line":104},[101,172172,30381],{"class":107},[101,172174,172175],{"class":111}," sys\n",[101,172177,172178],{"class":103,"line":21},[101,172179,2387],{"emptyLinePlaceholder":27},[101,172181,172182,172184],{"class":103,"line":1166},[101,172183,30404],{"class":160},[101,172185,172186],{"class":111},"(sys.version)\n",[101,172188,172189,172191],{"class":103,"line":1181},[101,172190,30404],{"class":160},[101,172192,172193],{"class":111},"(sys.path)\n",[43,172195,172197,172198,172200,172201,362],{"id":172196},"_913-if-name-main","9.13 if ",[261,172199,79799],{}," == \"",[261,172202,102038],{},[10,172204,172205,172206,172209],{},"模块被直接运行和被导入时，",[98,172207,172208],{},"__name__"," 的值不同。",[10,172211,172212,172213,24607],{},"创建 ",[98,172214,172215],{},"my_module.py",[92,172217,172219],{"className":30367,"code":172218,"language":30369,"meta":20,"style":20},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[98,172220,172221,172229,172239,172243,172247,172259],{"__ignoreMap":20},[101,172222,172223,172225,172227],{"class":103,"line":104},[101,172224,31936],{"class":107},[101,172226,5197],{"class":1950},[101,172228,151073],{"class":111},[101,172230,172231,172233,172235,172237],{"class":103,"line":21},[101,172232,4077],{"class":107},[101,172234,10857],{"class":111},[101,172236,592],{"class":107},[101,172238,151084],{"class":111},[101,172240,172241],{"class":103,"line":1166},[101,172242,2387],{"emptyLinePlaceholder":27},[101,172244,172245],{"class":103,"line":1181},[101,172246,2387],{"emptyLinePlaceholder":27},[101,172248,172249,172251,172253,172255,172257],{"class":103,"line":1187},[101,172250,1518],{"class":107},[101,172252,31209],{"class":160},[101,172254,101539],{"class":107},[101,172256,101542],{"class":216},[101,172258,3726],{"class":111},[101,172260,172261,172263,172265,172267,172269,172271],{"class":103,"line":1201},[101,172262,31288],{"class":160},[101,172264,166580],{"class":111},[101,172266,329],{"class":160},[101,172268,12423],{"class":111},[101,172270,189],{"class":160},[101,172272,30486],{"class":111},[10,172274,172275],{},"作用：",[55,172277,172278,172281],{},[58,172279,172280],{},"直接运行该文件时，执行测试代码。",[58,172282,172283],{},"被其他文件导入时，不执行测试代码。",[10,172285,172286],{},"这是写模块时很常用的习惯。",[43,172288,172290],{"id":172289},"_914-包","9.14 包",[10,172292,172293,172294,172297],{},"包是包含 ",[98,172295,172296],{},"__init__.py"," 的目录，用于组织多个模块。",[10,172299,172300],{},"目录结构：",[92,172302,172305],{"className":172303,"code":172304,"language":5175,"meta":20},[5173],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[98,172306,172304],{"__ignoreMap":20},[10,172308,172309],{},"导入：",[92,172311,172313],{"className":30367,"code":172312,"language":30369,"meta":20,"style":20},"from utils.file_utils import read_file\n",[98,172314,172315],{"__ignoreMap":20},[101,172316,172317,172319,172322,172324],{"class":103,"line":104},[101,172318,30726],{"class":107},[101,172320,172321],{"class":111}," utils.file_utils ",[101,172323,30381],{"class":107},[101,172325,172326],{"class":111}," read_file\n",[10,172328,172329,172331],{},[98,172330,172296],{}," 可以为空，也可以写包初始化逻辑。",[43,172333,172335],{"id":172334},"_915-第三方包","9.15 第三方包",[10,172337,172338,172339,172341],{},"第三方包通过 ",[98,172340,23820],{}," 安装。",[92,172343,172345],{"className":23811,"code":172344,"language":23813,"meta":20,"style":20},"pip install requests\n",[98,172346,172347],{"__ignoreMap":20},[101,172348,172349,172351,172353],{"class":103,"line":104},[101,172350,23820],{"class":1950},[101,172352,23823],{"class":216},[101,172354,146078],{"class":216},[10,172356,172357],{},"使用：",[92,172359,172361],{"className":30367,"code":172360,"language":30369,"meta":20,"style":20},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[98,172362,172363,172369,172373,172388],{"__ignoreMap":20},[101,172364,172365,172367],{"class":103,"line":104},[101,172366,30381],{"class":107},[101,172368,146078],{"class":111},[101,172370,172371],{"class":103,"line":21},[101,172372,2387],{"emptyLinePlaceholder":27},[101,172374,172375,172378,172380,172383,172386],{"class":103,"line":1166},[101,172376,172377],{"class":111},"response ",[101,172379,157],{"class":107},[101,172381,172382],{"class":111}," requests.get(",[101,172384,172385],{"class":216},"\"https:\u002F\u002Fwww.example.com\"",[101,172387,118],{"class":111},[101,172389,172390,172392],{"class":103,"line":1181},[101,172391,30404],{"class":160},[101,172393,172394],{"class":111},"(response.status_code)\n",[10,172396,172397],{},"查看已安装包：",[92,172399,172401],{"className":23811,"code":172400,"language":23813,"meta":20,"style":20},"pip list\n",[98,172402,172403],{"__ignoreMap":20},[101,172404,172405,172407],{"class":103,"line":104},[101,172406,23820],{"class":1950},[101,172408,118935],{"class":216},[10,172410,172411],{},"导出项目依赖：",[92,172413,172414],{"className":23811,"code":146273,"language":23813,"meta":20,"style":20},[98,172415,172416],{"__ignoreMap":20},[101,172417,172418,172420,172422,172424],{"class":103,"line":104},[101,172419,23820],{"class":1950},[101,172421,146282],{"class":216},[101,172423,26211],{"class":107},[101,172425,146287],{"class":216},[10,172427,172428],{},"安装项目依赖：",[92,172430,172431],{"className":23811,"code":146293,"language":23813,"meta":20,"style":20},[98,172432,172433],{"__ignoreMap":20},[101,172434,172435,172437,172439,172441],{"class":103,"line":104},[101,172436,23820],{"class":1950},[101,172438,23823],{"class":216},[101,172440,119619],{"class":160},[101,172442,146287],{"class":216},[43,172444,172446],{"id":172445},"_916-模块搜索路径","9.16 模块搜索路径",[10,172448,172449,172450,172453],{},"Python 导入模块时会在 ",[98,172451,172452],{},"sys.path"," 中查找。",[92,172455,172457],{"className":30367,"code":172456,"language":30369,"meta":20,"style":20},"import sys\n\nfor path in sys.path:\n    print(path)\n",[98,172458,172459,172465,172469,172481],{"__ignoreMap":20},[101,172460,172461,172463],{"class":103,"line":104},[101,172462,30381],{"class":107},[101,172464,172175],{"class":111},[101,172466,172467],{"class":103,"line":21},[101,172468,2387],{"emptyLinePlaceholder":27},[101,172470,172471,172473,172476,172478],{"class":103,"line":1166},[101,172472,3012],{"class":107},[101,172474,172475],{"class":111}," path ",[101,172477,26032],{"class":107},[101,172479,172480],{"class":111}," sys.path:\n",[101,172482,172483,172485],{"class":103,"line":1181},[101,172484,31288],{"class":160},[101,172486,169209],{"class":111},[10,172488,172489],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[10,172491,157603],{},[92,172493,172496],{"className":172494,"code":172495,"language":5175,"meta":20},[5173],"random.py\njson.py\ntime.py\n",[98,172497,172495],{"__ignoreMap":20},[10,172499,172500],{},"这些文件名可能导致导入异常。",[43,172502,172504],{"id":172503},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[10,172506,172300],{},[92,172508,172511],{"className":172509,"code":172510,"language":5175,"meta":20},[5173],"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",[98,172512,172510],{"__ignoreMap":20},[10,172514,172515,24607],{},[98,172516,172517],{},"utils\u002Ffile_utils.py",[92,172519,172521],{"className":30367,"code":172520,"language":30369,"meta":20,"style":20},"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",[98,172522,172523,172529,172539,172543,172547,172557,172567,172575,172581,172585,172612,172622,172626,172630,172640,172666],{"__ignoreMap":20},[101,172524,172525,172527],{"class":103,"line":104},[101,172526,30381],{"class":107},[101,172528,147071],{"class":111},[101,172530,172531,172533,172535,172537],{"class":103,"line":21},[101,172532,30726],{"class":107},[101,172534,108291],{"class":111},[101,172536,30381],{"class":107},[101,172538,108296],{"class":111},[101,172540,172541],{"class":103,"line":1166},[101,172542,2387],{"emptyLinePlaceholder":27},[101,172544,172545],{"class":103,"line":1181},[101,172546,2387],{"emptyLinePlaceholder":27},[101,172548,172549,172551,172554],{"class":103,"line":1187},[101,172550,31936],{"class":107},[101,172552,172553],{"class":1950}," read_json",[101,172555,172556],{"class":111},"(path):\n",[101,172558,172559,172562,172564],{"class":103,"line":1201},[101,172560,172561],{"class":111},"    path ",[101,172563,157],{"class":107},[101,172565,172566],{"class":111}," Path(path)\n",[101,172568,172569,172571,172573],{"class":103,"line":1207},[101,172570,3088],{"class":107},[101,172572,38919],{"class":107},[101,172574,169290],{"class":111},[101,172576,172577,172579],{"class":103,"line":1298},[101,172578,14740],{"class":107},[101,172580,51827],{"class":111},[101,172582,172583],{"class":103,"line":1304},[101,172584,2387],{"emptyLinePlaceholder":27},[101,172586,172587,172589,172591,172594,172596,172598,172600,172602,172604,172606,172608,172610],{"class":103,"line":1316},[101,172588,34167],{"class":107},[101,172590,146771],{"class":160},[101,172592,172593],{"class":111},"(path, ",[101,172595,146781],{"class":216},[101,172597,12423],{"class":111},[101,172599,146786],{"class":5204},[101,172601,157],{"class":107},[101,172603,146791],{"class":216},[101,172605,13702],{"class":111},[101,172607,31372],{"class":107},[101,172609,148133],{"class":5204},[101,172611,3726],{"class":111},[101,172613,172614,172616,172618,172620],{"class":103,"line":1599},[101,172615,14740],{"class":107},[101,172617,148144],{"class":111},[101,172619,45343],{"class":5204},[101,172621,118],{"class":111},[101,172623,172624],{"class":103,"line":1604},[101,172625,2387],{"emptyLinePlaceholder":27},[101,172627,172628],{"class":103,"line":1610},[101,172629,2387],{"emptyLinePlaceholder":27},[101,172631,172632,172634,172637],{"class":103,"line":1615},[101,172633,31936],{"class":107},[101,172635,172636],{"class":1950}," write_json",[101,172638,172639],{"class":111},"(path, data):\n",[101,172641,172642,172644,172646,172648,172650,172652,172654,172656,172658,172660,172662,172664],{"class":103,"line":1629},[101,172643,34167],{"class":107},[101,172645,146771],{"class":160},[101,172647,172593],{"class":111},[101,172649,151956],{"class":216},[101,172651,12423],{"class":111},[101,172653,146786],{"class":5204},[101,172655,157],{"class":107},[101,172657,146791],{"class":216},[101,172659,13702],{"class":111},[101,172661,31372],{"class":107},[101,172663,148133],{"class":5204},[101,172665,3726],{"class":111},[101,172667,172668,172671,172673,172675,172677,172679,172681,172683,172685,172687,172689],{"class":103,"line":1634},[101,172669,172670],{"class":111},"        json.dump(data, ",[101,172672,45343],{"class":5204},[101,172674,12423],{"class":111},[101,172676,147117],{"class":5204},[101,172678,157],{"class":107},[101,172680,33976],{"class":160},[101,172682,12423],{"class":111},[101,172684,151992],{"class":5204},[101,172686,157],{"class":107},[101,172688,189],{"class":160},[101,172690,118],{"class":111},[10,172692,172693,24607],{},[98,172694,154587],{},[92,172696,172698],{"className":30367,"code":172697,"language":30369,"meta":20,"style":20},"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",[98,172699,172700,172711,172715,172728,172748],{"__ignoreMap":20},[101,172701,172702,172704,172706,172708],{"class":103,"line":104},[101,172703,30726],{"class":107},[101,172705,172321],{"class":111},[101,172707,30381],{"class":107},[101,172709,172710],{"class":111}," read_json, write_json\n",[101,172712,172713],{"class":103,"line":21},[101,172714,2387],{"emptyLinePlaceholder":27},[101,172716,172717,172719,172721,172724,172726],{"class":103,"line":1166},[101,172718,159696],{"class":111},[101,172720,157],{"class":107},[101,172722,172723],{"class":111}," read_json(",[101,172725,151811],{"class":216},[101,172727,118],{"class":111},[101,172729,172730,172732,172734,172736,172738,172740,172742,172744,172746],{"class":103,"line":1181},[101,172731,170514],{"class":111},[101,172733,62668],{"class":216},[101,172735,51426],{"class":111},[101,172737,149868],{"class":216},[101,172739,12423],{"class":111},[101,172741,151452],{"class":216},[101,172743,51426],{"class":111},[101,172745,1100],{"class":160},[101,172747,165132],{"class":111},[101,172749,172750,172753,172755],{"class":103,"line":1187},[101,172751,172752],{"class":111},"write_json(",[101,172754,151811],{"class":216},[101,172756,172757],{"class":111},", students)\n",[43,172759,172761],{"id":172760},"_918-易错点","9.18 易错点",[55,172763,172764,172767,172772,172777,172780,172783],{},[58,172765,172766],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[58,172768,172769,172770,28374],{},"能指定异常类型就不要裸写 ",[98,172771,170874],{},[58,172773,172774,172776],{},[98,172775,171249],{}," 无论是否出错都会执行。",[58,172778,172779],{},"模块文件名不要和标准库重名。",[58,172781,172782],{},"导入自己写的模块时，要注意运行目录。",[58,172784,172785],{},"第三方包要安装到当前解释器或虚拟环境中。",[43,172787,172789],{"id":172788},"_919-本章练习","9.19 本章练习",[55,172791,172792,172795,172798,172804,172811],{},[58,172793,172794],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[58,172796,172797],{},"写函数读取文件，如果文件不存在则返回空字符串。",[58,172799,172212,172800,172803],{},[98,172801,172802],{},"math_utils.py","，实现加减乘除函数并导入使用。",[58,172805,172806,172807,172810],{},"创建一个 ",[98,172808,172809],{},"utils"," 包，把 JSON 读写函数放进去。",[58,172812,172813],{},"写一个程序，捕获除零异常和输入格式异常。",[5114,172815,172816],{},"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":20,"searchDepth":21,"depth":21,"links":172818},[172819,172820,172821,172822,172823,172824,172825,172826,172827,172828,172829,172835,172842,172844,172845,172846,172847,172848,172849],{"id":170671,"depth":21,"text":170672},{"id":170799,"depth":21,"text":170800},{"id":170848,"depth":21,"text":170849},{"id":170997,"depth":21,"text":170998},{"id":171169,"depth":21,"text":171170},{"id":171238,"depth":21,"text":171239},{"id":171349,"depth":21,"text":171350},{"id":171475,"depth":21,"text":171476},{"id":171600,"depth":21,"text":171601},{"id":171655,"depth":21,"text":171656},{"id":171754,"depth":21,"text":171755,"children":172830},[172831,172832,172833,172834],{"id":171758,"depth":1166,"text":171759},{"id":171792,"depth":1166,"text":171793},{"id":171831,"depth":1166,"text":171832},{"id":171910,"depth":1166,"text":171911},{"id":171933,"depth":21,"text":171934,"children":172836},[172837,172838,172839,172840,172841],{"id":171937,"depth":1166,"text":171938},{"id":172020,"depth":1166,"text":172021},{"id":172065,"depth":1166,"text":172066},{"id":172124,"depth":1166,"text":172125},{"id":172162,"depth":1166,"text":172163},{"id":172196,"depth":21,"text":172843},"9.13 if name == \"main\"",{"id":172289,"depth":21,"text":172290},{"id":172334,"depth":21,"text":172335},{"id":172445,"depth":21,"text":172446},{"id":172503,"depth":21,"text":172504},{"id":172760,"depth":21,"text":172761},{"id":172788,"depth":21,"text":172789},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170663,"description":23365},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172856,"title":172857,"body":172858,"description":173021,"extension":24,"meta":173022,"navigation":27,"path":173023,"seo":173024,"stem":173025,"__hash__":173026},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172859,"toc":173016},[172860,172863,172866,172869,172880,172882,172956,172959,172962,172965,172968,172971,172974,172977,172980,172983,172986],[39,172861,172857],{"id":172862},"python教程",[10,172864,172865],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[10,172867,172868],{},"建议学习环境：",[55,172870,172871,172874,172877],{},[58,172872,172873],{},"Python 版本：Python 3.10 及以上。",[58,172875,172876],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[58,172878,172879],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[43,172881,117058],{"id":117058},[55,172883,172884,172890,172896,172902,172908,172914,172920,172926,172932,172938,172944,172950],{},[58,172885,172886],{},[14,172887,172889],{"href":172888},".\u002Fch1-Python","Python环境与第一个程序",[58,172891,172892],{},[14,172893,172895],{"href":172894},".\u002Fch2","基础语法、变量与字符串",[58,172897,172898],{},[14,172899,172901],{"href":172900},".\u002Fch3","判断语句",[58,172903,172904],{},[14,172905,172907],{"href":172906},".\u002Fch4","循环语句",[58,172909,172910],{},[14,172911,172913],{"href":172912},".\u002Fch5","函数基础",[58,172915,172916],{},[14,172917,172919],{"href":172918},".\u002Fch6","数据容器",[58,172921,172922],{},[14,172923,172925],{"href":172924},".\u002Fch7","函数进阶",[58,172927,172928],{},[14,172929,172931],{"href":172930},".\u002Fch8","文件操作",[58,172933,172934],{},[14,172935,172937],{"href":172936},".\u002Fch9","异常、模块与包",[58,172939,172940],{},[14,172941,172943],{"href":172942},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[58,172945,172946],{},[14,172947,172949],{"href":172948},".\u002Fch11","面向对象基础",[58,172951,172952],{},[14,172953,172955],{"href":172954},".\u002Fch12","综合案例与复习路线",[43,172957,172958],{"id":172958},"学习路线",[10,172960,172961],{},"第一阶段：能运行程序。",[10,172963,172964],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[10,172966,172967],{},"第二阶段：能组织数据。",[10,172969,172970],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[10,172972,172973],{},"第三阶段：能封装逻辑。",[10,172975,172976],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[10,172978,172979],{},"第四阶段：能做小项目。",[10,172981,172982],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[43,172984,172985],{"id":172985},"参考资料",[55,172987,172988,172995,173002,173009],{},[58,172989,172990,172991],{},"黑马程序员 Python 入门教程推荐：",[14,172992,172993],{"href":172993,"rel":172994},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[18],[58,172996,172997,172998],{},"Python 官方中文教程：",[14,172999,173000],{"href":173000,"rel":173001},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[18],[58,173003,173004,173005],{},"Python 标准库文档：",[14,173006,173007],{"href":173007,"rel":173008},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[18],[58,173010,173011,173012],{},"pyecharts 文档：",[14,173013,173014],{"href":173014,"rel":173015},"https:\u002F\u002Fpyecharts.org\u002F",[18],{"title":20,"searchDepth":21,"depth":21,"links":173017},[173018,173019,173020],{"id":117058,"depth":21,"text":117058},{"id":172958,"depth":21,"text":172958},{"id":172985,"depth":21,"text":172985},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23367},"\u002Fwiki\u002F2024-10-10-python",{"title":172857,"description":173021},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331373253]